Av: Bj|rn Kornefalk <4463> 1985-05-04 00.51.21 ; April 1985 Bj|rn Kornefalk <4463> ; (C) saknas ; Skapar enheten MOD som simulerar ; en ramfloppy ; Kr{ver 64 K minne typ det som anv{ndes ; i Mikrodatorn nr 9 - 83 ; ; Programmet {r en prototyp som ; bara klarar att lagra ett program ; }t g}ngen. ; ; Max 120 sektorers program kan lagras ; (127 om det {ndras lite) ; Obs! l{ngs ned i minnet (adress ; 0-102 g}t det inte att lagra ; n}gon data pga PIO, NMI som ; hoppar till adress 52,54 resp 102 ; ; Hoppas p} en b{ttre version snabbt! ; ; upptar 455 bytes inklusive buffert ; INPUT EQU 21 ; basicens inputrutin PRINT EQU 27 ; basicens printrutin ERR3 EQU 1791 ; error minnet fullt ASCII EQU 6240 ; HL->ascii ORG 63800 ; startadress DEFW 0 ; n{sta enhet DEFM "MOD" ; enhetsnamn DEFW TABELL ; l{nk till hopptabell TABELL: JP OPEN ; OPEN-rutin JP OPEN ; PREPARE-rutin JP CLOSE ; CLOSE-rutin JP INPUT ; INPUT #x JP PRINT ; PRINT #x JP BL_IN ; Block till buffert JP BL_UT ; Block fr}n buffert BUFF DEFS 256 ; Buffert 256 bytes OPEN LD HL,BUFF LD (IX+7),120 ; max radl{ngd LD (IX+8),L ; buffertadress LD (IX+9),H LD (IX+10),L ; buffertpekare LD (IX+11),H LD (IX+12),1 ; b|rja p} sektor 1 LD (IX+13),253 ; 253 bytes/sektor LD (IX+14),0 ; inget skrivet LD (HL),3 ; l{gg ned End of text DI ; St{ng av PIO:n HALT ; V{nta p} NMI LD HL,0 ; Flytta de 256 bytes LD BC,1 ; f|rsta bytes fr}n LOOP LD A,0 ; minneskarta 0 OUT (7),A ; till 1 LD D,(HL) ; (Se Mikrodator LD A,1 ; nr 10-83) OUT (7),A LD (HL),D INC HL DJNZ LOOP DEC C JR NZ,LOOP LD HL,0 ; Ny interuptadress LD (52),HL ; f|r PIO:n LD (54),HL LD (HL),251 ; kod f|r EI INC HL LD (HL),237 ; halv kod f|r RET I INC HL LD (HL),77 ; andra halvan XOR A OUT (7),A EI ; till}t PIO:n att RET ; arbeta CLOSE BIT 7,(IX+14) ; N}got skrivet? RET Z ; Om inte s} return BL_UT LD A,(IX+12) ; blocknummer CP 120 ; Minnet slut (kan s{ttas till 127 om karta 2 eller 3 anv{nds) JP Z,ERR3 ; i s} fall ge felmeddelande LD L,A LD H,0 LD DE,32755 CALL ASCII ; skriv ut sektornummer p} sk{rmen LD HL,BUFF LD D,(IX+12) ; Sektoradress LD E,0 INC (IX+12) LD BC,253 ; 253 tecken (255 kan anv{ndas) CALL L7DIR ; Skifta minneskarta g|r LDIR LD (IX+13),253 ; 253 lediga tecken SET 0,(IX+14) ; markera utskriven buffert LD HL,BUFF EX DE,HL RET ; forts{tt i basictolken BL_IN LD H,(IX+12) ; Sektoradress LD L,0 LD A,H CP 120 ; minnet fullt? JP Z,ERR3 ; ge error i s} fall INC (IX+12) ; |ka sektortalet LD DE,BUFF LD BC,253 CALL L7DIR ; skifta minneskarta, g|r LDIR LD HL,BUFF RET ; forts{tt i basicen L7DIR LD A,1 OUT (7),A ; minneskarta 1 LDIR ; flytta sektor till buffert XOR A ; eller tv{rt om OUT (7),A ; A=0, minneskarta 0 RET END