|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 21632 (0x5480) Types: TextFile Names: »BLOWUP.ASM«
└─⟦0d02879d3⟧ Bits:30004605 COMPAS Pascal version 3.03 └─ ⟦this⟧ »BLOWUP.ASM«
ORG 4000H ; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; THE FOLLOWING ROUTINES ARE BLOWN INTO COMMON RAM ; AT START UP TIME. ; ; NOTE, THAT LABEL ADRESSES ARE SPECIFIED IN THE VARIABEL ; AREA ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; BLOWUP: XCLRSC: CALL SAVEBA+OFFSET JR Z,NOINT2 EI NOINT2: LD HL,0 LD DE,1 LD (HL),0 LD BC,32767 LDIR JP GOBACK+OFFSET ;SPROM DEFS 40H ;ROMSP DEFS 2 XJTAB: LD (HLSTO5),HL LD (AFSTOR),A LD (DESTOR),DE LD A,I DI POP HL ; REMOVE PSEUDO CALL LD (ROMSP),SP LD SP,ROMSP LD (HLSTO6),HL ; STORE PSEUDO CALL PUSH AF ; GET INT FLAG POP HL LD A,L AND 00000100B LD (INSAV1),A ; SAVE INT FLAG LD HL,(SYBAN) ; SAVE CONFIGURATION LD (HLSTO3),HL LD HL,(RAMWR) LD (HLSTO4),HL XOR A ; OPEN SYSTEM BANK OUT (SYSBAN),A LD (SYBAN),A OUT (RAMBAW),A ; CLOSE RAM LD (RAMWR),A OUT (RAMBAR),A LD (RAMRD),A LD (VIDROM),A ; CLOSE VIDEO OUT (VIDBAN),A LD HL,RETUR-BLOWUP+BLOWST PUSH HL ; SAVE RETURN POINT LD A,(INSAV1) OR A ; JR Z,NOIN11 EI NOIN11: LD HL,(CCPSTO) ; CALCULATE START OF LD DE,1600H+3 ; JUMP TABLE ADD HL,DE LD DE,(HLSTO6) ; CALCULATE RELATIVE START EX DE,HL AND A ; RESET FLAGS SBC HL,DE ; RELATIVE ADDRESS FOR CALL EX DE,HL LD HL,JTAB ADD HL,DE PUSH HL LD DE,(DESTOR) LD HL,(HLSTO5) LD A,(AFSTOR) RET RETUR: DI LD (AFSTOR),A LD (HLSTO6),HL LD HL,(HLSTO4) LD (RAMWR),HL LD A,L OUT (RAMBAW),A LD A,H OUT (RAMBAR),A LD HL,(HLSTO3) LD (SYBAN),HL LD A,L OUT (SYSBAN),A LD A,H OUT (VIDBAN),A LD SP,(ROMSP) LD A,(INSAV1) OR A LD A,(AFSTOR) LD HL,(HLSTO6) RET Z EI RET PLOT60: LD A,(DE) LD C,A CALL SAVEBA+OFFSET JR Z,NOIN21 EI NOIN21: LD A,(GRAFF) OR A JR NZ,PLOT70 LD A,(FLASH) OR A JR NZ,PLOT66 PLOT65: IN A,(PIOBD) AND 81H JR Z,PLOT65 PLOT66: LD A,C OR (HL) LD (HL),A JR PLOT80 PLOT70: LD A,(FLASH) OR A JR NZ,PLOT72 PLOT71: IN A,(PIOBD) AND 81H JR Z,PLOT71 PLOT72: LD A,C CPL AND (HL) LD (HL),A PLOT80: JP GOBACK+OFFSET ; ;--------------------------------- ; ; THIS PROCEDURE UPDATES CLOCK AND ; EVENTUALLY CLEARS SCROLLED LINES. ; INITIATED BY INTERRUPT! ; SPSCRC DEFS 20H SCRCSP DEFS 2 SCRCLR: LD (SCRCSP-BLOWUP+BLOWST),SP LD SP,SCRCSP-BLOWUP+BLOWST-1 PUSH AF PUSH BC PUSH DE PUSH HL LD HL,(SYBAN) ; SAVE CONFIGURATION PUSH HL LD HL,(RAMWR) PUSH HL LD A,80H OUT (SYSBAN),A LD (SYBAN),A XOR A OUT (RAMBAW),A LD (RAMWR),A LD A,0F0H LD (VIDROM),A OUT (VIDBAN),A ; OPEN ALL VIDEOBANKS ; EI NOIN10: ; ; PLACE CLOCK PROCEDURE HERE ; LD BC,(CLRBEGIN) LD HL,(CRTSTART) OR A SBC HL,BC JR Z,SCRC10 ; NOTHING TO CLEAR SCRC3: LD H,B LD L,C LD A,(PIXHO1) CP 40 JR Z,SCRC7 LD B,160 XOR A SCRC2: LD (HL),A INC HL RES 7,H DJNZ SCRC2 LD (CLRBEGIN),HL ; SAVE FOR NEXT INTERRUPT ; ; SCRC1: ; DI POP HL LD (RAMWR),HL LD A,L OUT (RAMBAW),A LD A,H OUT (RAMBAR),A POP HL LD (SYBAN),HL LD A,L OUT (SYSBAN),A LD A,H OUT (VIDBAN),A POP HL POP DE POP BC POP AF LD SP,(SCRCSP-BLOWUP+BLOWST) EI RETI SCRC7: LD B,80 XOR A SCRC8: LD (HL),A INC HL RES 7,H RES 6,H DJNZ SCRC8 LD (CLRBEGIN),HL ; SAVE FOR NEXT INTERRUPT JR SCRC1 SCRC10: LD A,03H OUT (PIOBC),A JR SCRC1 ; CLRBYTES ; ; CLEARS A RECTANGULAR SCREEN AREA WHICH IS ON BYTE BOUNDARIES. ; ; INPUT: ; HL IS CRT RAM ADDRESS OF BYTE IN UPPER LEFT CORNER OF AREA. ; C IS HORIZONTAL SIZE IN BYTES ( = # HORIZONTAL PIXELS / 8 ). ; B IS VERTICAL SIZE IN BYTES ( = # VERTICAL PIXELS). MUST BE NONZERO. CLRBYTES: ; PROC CLRBYTES(HL, C, B) CALL SAVEBA+OFFSET JR Z,NOINT9 EI NOINT9: CLRB10: ; DO B TIMES PUSH BC ; PUSH BC, HL PUSH HL LD B,C ; B := C BIT 0,B JR Z,CLRB15 ; IF B MOD 2 = 1 THEN LD A,(FLASH) OR A JR NZ,CLRB11 L2: IN A,(PIOBD) AND 81H JR Z,L2 CLRB11: LD (HL),0 ; HL^ := 0 INC HL ; HL := (HL+2) MOD 32K INC HL CALL RES76B+OFFSET DEC B ; ENDIF CLRB15: LD A,B ; DO B/2 TIMES OR A JR Z,CLRB30 SRL B CLRB20: LD D,H ; DE := (HL+2) MOD 32K LD E,L INC DE INC DE RES 7,D LD A,(FLASH) OR A JR NZ,CLRB22 L3: IN A,(PIOBD) AND 81H JR Z,L3 CLRB22: XOR A LD (HL),A ; HL^ := 0 LD (DE),A ; DE^ := 0 EX DE,HL INC HL ; HL := (DE+2) MOD 32K INC HL CALL RES76B+OFFSET DJNZ CLRB20 CLRB30: ; ENDDO POP HL ; POP HL, BC POP BC CALL STEPHL-BLOWUP+BLOWST ; STEPHL(HL) DJNZ CLRB10 ; ENDDO JP GOBACK+OFFSET CLRE10: CALL SAVEBA+OFFSET JR Z,NOINT8 EI NOINT8: CLRE12: ; DO LINESPACE TIMES LD A,(FLASH) OR A JR NZ,CLRE13 L1: IN A,(PIOBD) AND 81H JR Z,L1 CLRE13: LD A,(HL) ; HL^ := HL^ AND C AND C LD (HL),A CALL STEPHL-BLOWUP+BLOWST ; STEPHL(HL) DJNZ CLRE12 ; ENDDO JP GOBACK+OFFSET TIMBUF DEFS 12 CTCISP DEFS 20H SPCTCI DEFS 2 CTCINT: EI PUSH AF LD A,(SECOND) INC A LD (SECOND),A CP 60 JR C,VISDET XOR A LD (SECOND),A LD A,(MINUTE) INC A LD (MINUTE),A CP 60 JR C,VISDET XOR A LD (MINUTE),A LD A,(HOUR) INC A LD (HOUR),A CP 24 JR C,VISDET XOR A LD (HOUR),A VISDET: LD A,(VISF) OR A JR Z,FÆRDIG DI LD (SPCTCI-BLOWUP+BLOWST),SP LD SP,SPCTCI-BLOWUP+BLOWST-1 PUSH BC PUSH DE PUSH HL LD HL,(SYBAN) ; SAVE CONFIG BYTES PUSH HL LD HL,(RAMWR) PUSH HL XOR A OUT (SYSBAN),A ; OPEN SYSTEM BANK LD (SYBAN),A ; UPDATE CONFIG BYTE OUT (RAMBAR),A ; CLOSE RAM BANK LD (RAMRD),A OUT (RAMBAW),A LD (RAMWR),A LD (VIDROM),A OUT (VIDBAN),A EI LD A,(PIXHO1) SUB 9 LD E,A LD D,0 LD A,(HOUR) LD HL,(CRTSTAR) ADD HL,DE ; POSITION FOR PRINTOUT IN HL ADD HL,DE CALL VISD10-BLOWUP+BLOWST LD A,(PIXHO1) SUB 6 LD E,A LD D,0 LD A,(MINUTE) LD HL,(CRTSTAR) ADD HL,DE ADD HL,DE CALL VISD10-BLOWUP+BLOWST LD A,(PIXHO1) SUB 3 LD E,A LD D,0 LD A,(SECOND) LD HL,(CRTSTAR) ADD HL,DE ADD HL,DE CALL VISD10-BLOWUP+BLOWST DI POP HL LD (RAMWR),HL LD A,L OUT (RAMBAW),A LD A,H OUT (RAMBAR),A POP HL LD (SYBAN),HL LD A,L OUT (SYSBAN),A LD A,H OUT (VIDBAN),A POP HL POP DE POP BC LD SP,(SPCTCI-BLOWUP+BLOWST) FÆRDIG: LD A,(MOTORF) OR A JR Z,FÆRD10 DEC A LD (MOTORF),A JR NZ,FÆRD10 OUT (FDCMOF),A FÆRD10: POP AF EI RETI VISD10: PUSH HL CALL OMSÆT-BLOWUP+BLOWST PUSH AF ; SAVE LOW-10 LD A,B ADD A,30H CALL MOVEIT-BLOWUP+BLOWST POP AF ; GET LOW-10 POP HL ; GET ADDRESS PUSH HL ; SAVE ADDRESS PUSH AF ; SAVE LOW-10 CALL PRINIT-BLOWUP+BLOWST POP AF ; GET LOW-10 ADD A,3AH CALL MOVEIT-BLOWUP+BLOWST POP HL INC HL INC HL CALL PRINIT-BLOWUP+BLOWST RET MOVEIT: LD H,0 LD L,A ADD HL,HL ; * 2 ADD HL,HL ; * 4 LD D,H ; SAVE LD E,L ADD HL,HL ; * 8 ADD HL,DE ; + 4 = 12 EX DE,HL LD HL,CHARGE ADD HL,DE LD DE,TIMBUF-BLOWUP+BLOWST LD BC,12 LDIR LD B,12 LD HL,TIMBUF-BLOWUP+BLOWST MOVEI1: LD A,(HL) ; INVERT THE CHARACTER CPL LD (HL),A INC HL DJNZ MOVEI1 RET PRINIT: DI LD A,0F0H OUT (VIDBAN),A LD B,5 ; COUNTER LD D,H ; DE := HL := FIRST ADDRESS LD E,L ; LD HL,TIMBUF-BLOWUP+BLOWST INC HL L15: IN A,(PIOBD) ; WAIT FOR SYNC AND 81H JR Z,L15 LD A,(HL) LD (DE),A INC HL INC DE L16: IN A,(PIOBD) AND 81H JR Z,L16 LD A,(HL) LD (DE),A DEC DE INC HL PUSH HL ; SAVE ADDRESS TIMBUF LD HL,(PIXHO1) ; CALCULATE NEXT ADDRESS ADD HL,HL ADD HL,DE ; IN VIDEO RAM EX DE,HL POP HL ; RECOVER ADDRESS IN TIMBUF DJNZ L15 XOR A OUT (VIDBAN),A EI RET OMSÆT: LD B,0 OMSÆ10: SUB 10 RET C INC B JR OMSÆ10 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ROUTINE WHICH START INTERRUPT FROM CTC1 WHEN ; A KEY IS PRESSED AND STOPS INTERRUPT WHEN ALL ; KEYS (EXCEPT FUNCTION KEYS) ARE RELEASED ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; SPCONI DEFS 20H CONISP DEFS 2 CONINT: PUSH AF ; SAVE AF LD A,0FFH ; AT LEAST ONE KEY DOWN LD (KEYSAV),A LD (KEYSAV+1),A LD (KEYSAV+2),A LD A,45 LD (KEYCOU),A ; REPROGRAM PIO LD A,0CFH OUT (KBPIOC),A LD A,0FFH OUT (KBPIOC),A LD A,01110111B ; INTERRUPT CONTROL WORD ; INTERRUPT DISABLED BIT 7 = 0 ; INTERRUPT ON AND BIT 6 = 1 ; ACTIVE LEVEL HIGH BIT 5 = 1 ; MASK WORD FOLLOWS BIT 4 = 1 OUT (KBPIOC),A LD A,11000001B ; MASK WORD OUT (KBPIOC),A LD A,10000011B ; START INTERRUPT OUT (KBPIOC),A ; START CTC1 LD A,10110111B ; CONTROL WORD FOR CTC1 ; ENABLE INTERRUPT BIT 7 = 1 ; TIMER MODE BIT 6 = 0 ; PRESCALER 256 BIT 5 = 1 ; RISING EDGE BIT 4 = 1 ; AUTOMATIC TRIG BIT 3 = 0 ; CONSTANT FOLLOW BIT 2 = 1 ; SOFTWARE RESET BIT 1 = 1 ; CONTROL WORD BIT 0 = 1 OUT (CTC1),A LD A,0FFH ; TIME CONSTANT OUT (CTC1),A LD A,0FFH LD (CTC1AC),A POP AF EI RETI CON15: LD A,00110011B ; STOP CTC1 OUT (CTC1),A XOR A LD (CTC1AC),A LD A,0CFH OUT (KBPIOC),A LD A,0FFH OUT (KBPIOC),A LD A,00010111B ; INTERRUPT CONTROL WORD ; INTERRUPT DISABLE BIT 7 = 0 ; INTERRUPT ON OR BIT 6 = 0 ; ACTIVE LEVEL LOW BIT 5 = 0 ; MASK WORD FOLLOWS BIT 4 = 1 OUT (KBPIOC),A LD A,11000001B ; MASK WORD OUT (KBPIOC),A LD A,10000011B ; START INTERRUPT OUT (KBPIOC),A RET KEYINT: LD (CONISP-BLOWUP+BLOWST),SP LD SP,CONISP-BLOWUP+BLOWST PUSH AF ; SAVE AF PUSH HL ; SAVE HL PUSH DE PUSH BC CALL GETDAT-BLOWUP+BLOWST ; GET DATA FROM KEYBOARD LD HL,KEYSAV LD A,C AND 00111110B CP 00111110B JR NZ,KEYI05 CALL CON15-BLOWUP+BLOWST JR KEYI10 KEYI05: LD A,(HL) CP 0FFH JR Z,KEYI06 AND 11000001B LD B,A LD A,C AND 11000001B CP B JR Z,KEYI06 LD A,C LD (KEYSAV),A LD (KEYSAV+1),DE LD A,45 LD (KEYCOU),A JR KEYI10 KEYI06: LD A,C CP (HL) JR NZ,DECODE INC HL LD A,E CP (HL) JR NZ,DECODE INC HL LD A,D CP (HL) JR NZ,DECODE LD A,(KEYCOU) DEC A LD (KEYCOU),A JR NZ,KEYI10 LD A,(KEYCO1) LD (KEYCOU),A JR DECODE KEYI10: POP BC POP DE POP HL POP AF LD SP,(CONISP-BLOWUP+BLOWST) EI RETI GETDAT: IN A,(KBPIOD) LD C,A LD A,0FH ; SET MODE 0 OUT (KBPIOC),A XOR A OUT (KBPIOD),A LD A,07H OUT (KB89A),A XOR A OUT (KB89D),A LD A,0EH OUT (KB89A),A IN A,(KB89D) LD E,A LD A,0FH OUT (KB89A),A IN A,(KB89D) LD D,A LD A,07H OUT (KB89A),A LD A,0C0H OUT (KB89D),A LD A,0EH OUT (KB89A),A XOR A OUT (KB89D),A LD A,0FH OUT (KB89A),A XOR A OUT (KB89D),A LD A,0CFH ; SET MODE 3 OUT (KBPIOC),A LD A,0FFH ; SET ALL LINES TO INPUT OUT (KBPIOC),A LD A,00010111B OUT (KBPIOC),A LD A,11000001B OUT (KBPIOC),A LD A,10000011B OUT (KBPIOC),A RET DECODE: LD A,C LD (KEYSAV),A LD (KEYSAV+1),DE LD HL,(SYBAN) ; SAVE CONFIGURATION PUSH HL LD HL,(RAMWR) PUSH HL XOR A OUT (SYSBAN),A ; OPEN SYSTEM BANK LD (SYBAN),A ; UPDATE CONFIG BYTE OUT (RAMBAR),A ; CLOSE RAM FOR READ LD (RAMRD),A ; UPDATE CONFIG BYTE LD (VIDROM),A ; CLOSE VIDEO BANK OUT (VIDBAN),A ; UPDATE CONFIG BYTE EI CALL CONI05 ; CALL ROM ROUTINE DI POP HL ; GET CONFIG BYTES LD (RAMWR),HL ; UPDATE LD A,L ; OUT (RAMBAW),A LD A,H ; OUT (RAMBAR),A POP HL ; GET CONFIG BYTES LD (SYBAN),HL LD A,L ; UPDATE OUT (SYSBAN),A LD A,H OUT (VIDBAN),A JP KEYI10-BLOWUP+BLOWST CHAR10: CALL SAVEBA+OFFSET JR Z,NOINT3 EI NOINT3: CHAR11: LD D,H ; DE := HL LD E,L CALL STEPHL-BLOWUP+BLOWST ; STEPHL(HL) LD A,(FLASH) OR A JR NZ,CHAR12 L5: IN A,(PIOBD) AND 81H JR Z,L5 CHAR12: LD A,(DE) LD C,(HL) LD (IX+0),A ; IX^ := DE^; IX :+ 1 INC IX LD (IX+0),C ; IX^ := HL^; IX :+ 1 INC IX CALL STEPHL-BLOWUP+BLOWST ; STEPHL(HL) DJNZ CHAR11 ; ENDDO JP GOBACK+OFFSET SAVEBA: LD (HLSTORE),HL LD A,I DI PUSH AF POP HL LD A,L AND 00000100B LD (INSAVE),A ; SAVE INT FLAG LD HL,(SYBAN) ; SAVE CONFIGURATION LD (HLSTO1),HL LD HL,(RAMWR) LD (HLSTO2),HL LD A,80H OUT (SYSBAN),A LD (SYBAN),A XOR A OUT (RAMBAW),A LD (RAMWR),A OUT (RAMBAR),A LD (RAMRD),A LD A,0F0H LD (VIDROM),A OUT (VIDBAN),A ; OPEN ALL VIDEOBANKS LD HL,(HLSTORE) LD A,(INSAVE) OR A RET ESCJ9: CALL SAVEBA+OFFSET JR Z,YYY EI YYY: LD A,(FLASH) OR A JR NZ,YYYY YYY10: IN A,(PIOBD) AND 81H JR Z,YYY10 LDD LD A,B OR C JP NZ,YYY10+OFFSET JP GOBACK+OFFSET YYYY: LDDR JP GOBACK+OFFSET ESCLL9: CALL SAVEBA+OFFSET JR Z,NOINTF EI NOINTF: LD A,(FLASH) OR A JR NZ,NOINTG LD A,E RRCA JR C,NOINL5 LD A,(PIXHO1) NOINL3: PUSH AF NINL3: IN A,(PIOBD) AND 81H JR Z,NINL3 LD A,(HL) LD (DE),A DEC HL DEC HL CALL RES76B+OFFSET DEC DE DEC DE EX DE,HL CALL RES76B+OFFSET EX DE,HL POP AF DEC A JR NZ,NOINL3 NOINL5: IN A,(PIOBD) AND 81H JR Z,NOINL5 LD A,(HL) LD (DE),A LD A,L DEC L OR A JP NZ,NINL5+OFFSET DEC H CALL RES76B+OFFSET NINL5: LD A,E DEC E OR A JP NZ,NINL6+OFFSET DEC D EX DE,HL CALL RES76B+OFFSET EX DE,HL NINL6: DEC BC LD A,B OR C JR NZ,NOINL5 JP GOBACK+OFFSET NOINTG: LD A,E RRCA JR NC,NOINL7 LD A,(PIXHO1) NOINL6: PUSH AF LD A,(HL) LD (DE),A DEC HL DEC HL CALL RES76B+OFFSET DEC DE DEC DE EX DE,HL CALL RES76B+OFFSET EX DE,HL POP AF DEC A JR NZ,NOINL6 NOINL7: LD A,(HL) LD (DE),A LD A,L DEC L OR A JP NZ,NINL7+OFFSET DEC H CALL RES76B+OFFSET NINL7: LD A,E DEC E OR A JP NZ,NINL8+OFFSET DEC D EX DE,HL CALL RES76B+OFFSET EX DE,HL NINL8: DEC BC LD A,B OR C JP NZ,NOINL7+OFFSET JP GOBACK+OFFSET ESCLJ9: CALL SAVEBA+OFFSET JR Z,XXX EI XXX: LD A,(FLASH) OR A JR NZ,XXXX XXX10: IN A,(PIOBD) AND 81H JR Z,XXX10 LDI LD A,B OR C JP NZ,XXX10+OFFSET JP GOBACK+OFFSET XXXX: LDIR JP GOBACK+OFFSET ESCLD9: CALL SAVEBA+OFFSET JR Z,NOINTB EI NOINTB: LD A,(FLASH) OR A JR NZ,NOINTD LD A,E RRCA JR NC,NOINA5 LD A,(PIXHO1) NOINA3: PUSH AF NINA3: IN A,(PIOBD) AND 81H JR Z,NINA3 LD A,(HL) LD (DE),A INC HL INC HL NINA4: CALL RES76B+OFFSET INC DE INC DE EX DE,HL CALL RES76B+OFFSET EX DE,HL POP AF DEC A JR NZ,NOINA3 NOINA5: IN A,(PIOBD) AND 81H JR Z,NOINA5 LD A,(HL) LD (DE),A INC L JP NZ,NINA6+OFFSET INC H CALL RES76B+OFFSET NINA6: INC E JP NZ,NINA7+OFFSET INC D EX DE,HL CALL RES76B+OFFSET EX DE,HL NINA7: DEC BC LD A,B OR C JP NZ,NOINA5+OFFSET JR GOBACK NOINTD: LD A,E RRCA JR NC,NOINA7 LD A,(PIXHO1) NOINA6: PUSH AF LD A,(HL) LD (DE),A INC HL INC HL CALL RES76B+OFFSET INC DE INC DE EX DE,HL CALL RES76B+OFFSET EX DE,HL POP AF DEC A JR NZ,NOINA6 NOINA7: LD A,(HL) LD (DE),A INC L JP NZ,NOINA8+OFFSET INC H CALL RES76B+OFFSET NOINA8: INC E JP NZ,NOINA9+OFFSET INC D EX DE,HL CALL RES76B+OFFSET EX DE,HL NOINA9: DEC BC LD A,B OR C JP NZ,NOINA7+OFFSET JR GOBACK CHAR60: CALL SAVEBA+OFFSET JR Z,NOINT4 EI NOINT4: CHAR61: LD D,H ; DE := HL LD E,L CALL STEPHL-BLOWUP+BLOWST ; STEPHL(HL) PUSH BC LD B,(IX+0) INC IX ; B := IX^; IX :+ 1 LD C,(IX+0) INC IX ; C := IX^; IX :+ 1 LD A,(FLASH) OR A JR NZ,CHAR62 L6: IN A,(PIOBD) AND 81H JR Z,L6 CHAR62: LD A,B LD (DE),A ; DE^ := B LD (HL),C ; HL^ := C POP BC CALL STEPHL-BLOWUP+BLOWST ; STEPHL(HL) DJNZ CHAR61 ; ENDDO JR GOBACK GOBACK: DI LD HL,(HLSTO2) LD (RAMWR),HL LD A,L OUT (RAMBAW),A LD A,H OUT (RAMBAR),A LD HL,(HLSTO1) LD (SYBAN),HL LD A,L OUT (SYSBAN),A LD A,H OUT (VIDBAN),A LD A,(INSAVE) OR A RET Z EI RET ; STEPHL ; ; ASSUMING THAT HL POINTS TO A BYTE IN THE VIDEO RAM, ; THIS PROCEDURE MAKES HL POINT TO THE BYTE WHICH IS ; DISPLAYED IMMEDIATELY BELOW. ; ; DESTROYS AF STEPHL: ; PROC STEPHL(REF HL) INC HL ; HL :+ 1 BIT 0,L JR NZ,STEP10 ; IF HL MOD 2 = 0 THEN HL := PUSH DE ; LD DE,-2+2*PIXHOR/8 PUSH HL LD DE,(PIXHO1) LD L,E LD H,D ADD HL,DE EX DE,HL DEC DE DEC DE POP HL ADD HL,DE ; (HL-2+2*PIXHOR/8) MOD 32K POP DE STEP10: ; RES 7,H CALL RES76B+OFFSET RET ; ENDPROC RES76B: PUSH AF LD A,(PIXHO1) CP 40 JR NZ,RES76C RES 6,H RES76C: RES 7,H POP AF RET RWMOVE: LD A,I DI PUSH HL PUSH AF POP HL LD A,L AND 00000100B LD (INSAVE),A ; SAVE INT FLAG LD HL,(SYBAN) ; SAVE CONFIGURATION LD (HLSTO1),HL LD HL,(RAMWR) LD (HLSTO2),HL LD A,80H OUT (SYSBAN),A LD (SYBAN),A LD A,01 OUT (RAMBAW),A LD (RAMWR),A OUT (RAMBAR),A LD (RAMRD),A XOR A LD (VIDROM),A OUT (VIDBAN),A ; CLOSE ALL VIDEOBANKS LD A,(INSAVE) OR A POP HL JR Z,NOINT7 EI NOINT7: RWMO04: LD A,(DE) ; SOURCE CHARACTER INC DE LD (HL),A ; TO DEST INC HL DEC C ; LOOP 128 TIMES JR NZ,RWMO04 JP GOBACK+OFFSET ; ; EJECT ; TITLE TABLES AND VARIABLES ; ; COMMANDS: ; IOCOMM: DEFB 09H IOCMD: DEFS 1 ; READ/WRITE COMMAND IODISK: DEFS 1 ; DISK NO IOTRKN: DEFS 1 ; TRACK NO (0....) HEADNO: DEFB 0 ; HEAD NUMBER IOSECN: DEFS 1 ; SECTOR DEFB N ; NO OF DATA BYTES IOEOT: DEFB EOT DEFB GPL DEFB DTL SEEKCO: DEFB 3 ; DEFB 0FH ; SEEK COMMAND SEEKNO: DEFS 1 ; DISK NO SEEKTR: DEFS 1 ; NEW TRACK NO SPECIO: DEFB 3 ; LENGTH DEFB 03H DEFB SRT*16+HUT DEFB HLT*2+ND RECALIBRATE: DEFB 2 ; LENGTH DEFB 07H RECANO: DEFB 00H ; US=0 SENSEINT: DEFB 1 ; LENGTH DEFB 08H READTR: DEFB 09H DEFB 42H RDNO: DEFB 0 RDTR: DEFB 0 DEFB 0 DEFB 1 DEFB 2 RDEOT: DEFB EOT DEFB GPL DEFB DTL ; ; ; FIXED DATA TABLES DESCRIBING 2 DRIVES ; ; ; DISK PARAMETER HEADER ; DPBAS0: DEFW 00,0000H DEFW 0000H,0000H DEFW DIRBF,DPBLK0-BLOWUP+BLOWST DEFW CHK00,ALL00 DPBAS1: DEFW 00,0000H DEFW 0000H,0000H DEFW DIRBF,DPBLK0-BLOWUP+BLOWST DEFW CHK01,ALL01 DPBAS2: DEFS 8 DEFW DIRBF,DPBLK0-BLOWUP+BLOWST DEFW CHK02,ALL02 DPBAS3: DEFS 8 DEFW DIRBF,DPBLK0-BLOWUP+BLOWST DEFW CHK03,ALL03 ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; FORMAT TABLE FOR EACH DRIVE ; ; LEGAL CODES ARE: ; ; 0 := DUAL SIDE 80 TRACKS ; 1 := SINGLE SIDE 40 TRACKS ; 2 := DUAL SIDE 40 TRACKS ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; DISKFO: DEFB 0,0,0,0 DEFB 0,0,0,0 ; ; DISK PARAMETER BLOCK ; DPBLK0: DEFW 28H DEFB 04H DEFB 0FH DEFB 0 DEFW 18AH DEFW 7FH DEFB 0C0H DEFB 0 DEFW 20H DEFW 2 DPBLK1: DEFW 28H DEFB 03 DEFB 07 DEFB 00 DEFW 0BDH DEFW 3FH DEFB 0C0H DEFB 00 DEFW 10H DEFW 02H DPBLK2: DEFW 48H DEFB 04H DEFB 0FH DEFB 01 DEFW 86H DEFW 7FH DEFB 0C0H DEFB 00 DEFW 20H DEFW 2H ASCTAB: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; THE KEYS Q, W, T, Y, O, :, F, J, L AND ' ' ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; GROUP A DEFB 'L' DEFB '*' DEFB 0DH DEFB 'O' DEFB 'J' DEFB 'Y' DEFB 'T' DEFB 'F' DEFB 'W' DEFB 'Q' DEFB 86H ; F3 DEFB 03H ; INSERT DEFB 0DH ; ENTER DEFB '1' ; 1 DEFB '3' ; 3 DEFB '2' ; 2 DEFB 'P' ; GROUP B DEFB 'Å' DEFB 08H ; BACKSPACE DEFB '(' DEFB 'I' DEFB 'U' DEFB '$' DEFB 'R' DEFB 'E' DEFB 1BH DEFB 85H ; F2 DEFB 90H ; OLINE DEFB '-' ; - DEFB '4' ; 4 DEFB '6' ; 6 DEFB '5' ; 5 DEFB '<' ; GROUP C DEFB '>' DEFB '?' DEFB 'M' DEFB ' ' DEFB 'B' DEFB 'V' DEFB 'C' DEFB 'X' DEFB 'Z' DEFB 84H ; F1 DEFB 97H ; SCREEN DUMP TO FILE DEFB '*' ; * DEFB '7' ; 7 DEFB '9' ; 9 DEFB '8' ; 8 DEFB '_' ; GROUP D DEFB '=' DEFB 5EH DEFB ')' DEFB 27H DEFB '&' DEFB '%' DEFB '#' DEFB '"' DEFB '!' DEFB 0FH ; BLINK DEFB 99H ; USPECIFICERET DEFB 0CH ; CURSOR UP DEFB 95H ; BACK DEFB 7FH ; DELETE DEFB 93H ; BORDER DEFB 'Æ' ; GROUP E DEFB 'Ø' DEFB '+' DEFB 'K' DEFB 'N' DEFB 'H' DEFB 'G' DEFB 'D' DEFB 'S' DEFB 'A' DEFB 0EH ; CURSOR DOWN DEFB 02H ; CURSOR 8 LEFT DEFB '.' ; . DEFB 09H ; CURSOR 8 RIGHT DEFB '0' ; 0 DEFB 87H ; F4 ASCTA1: ; GROUP A DEFB 'l' DEFB ':' DEFB 0DH DEFB 'o' DEFB 'j' DEFB 'y' DEFB 't' DEFB 'f' DEFB 'w' DEFB 'q' DEFB 82H ; F3 DEFB 01H ; INSERT DEFB 0DH ; ENTER DEFB '1' ; 1 DEFB '3' ; 3 DEFB '2' ; 2 DEFB 'p' ; GROUP B DEFB 'å' DEFB 08H DEFB '8' DEFB 'i' DEFB 'u' DEFB '4' DEFB 'r' DEFB 'e' DEFB 1BH DEFB 81H ; F2 DEFB 91H ; ULINE DEFB '-' ; - DEFB '4' ; 4 DEFB '6' ; 6 DEFB '5' ; 5 DEFB ',' ; GROUP C DEFB '.' DEFB '/' DEFB 'm' DEFB ' ' DEFB 'b' DEFB 'v' DEFB 'c' DEFB 'x' DEFB 'z' DEFB 80H ; F1 DEFB 98H ; SCREEN DUMP TO PRINTER DEFB '*' ; * DEFB '7' ; 7 DEFB '9' ; 9 DEFB '8' ; 8 DEFB '0' ; GROUP D DEFB '-' DEFB '@' DEFB '9' DEFB 37H DEFB '6' DEFB '5' DEFB '3' DEFB '2' DEFB '1' DEFB 92H ; INVERT DEFB 9AH ; USPECIFICERET DEFB 0BH ; CURSOR UP DEFB 96H ; FRONT DEFB 13H ; DELETE DEFB 94H ; PAPER DEFB 'æ' ; GROUP E DEFB 'ø' DEFB ';' DEFB 'k' DEFB 'n' DEFB 'h' DEFB 'g' DEFB 'd' DEFB 's' DEFB 'a' DEFB 0AH ; CURSOR DOWN DEFB 08H ; CURSOR LEFT DEFB '.' ; . DEFB 0CH ; CURSOR RIGHT DEFB '0' ; 0 DEFB 83H ; F4 ▶04◀ ▶ff◀▶04◀ ▶ff◀▶04◀ ▶ff◀▶04◀ ▶ff◀▶04◀ ▶04◀ F4 ▶ff◀▶04◀ F4 ▶ff◀«eof»