|
|
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 - metrics - 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»