|
|
|
@ -12,8 +12,31 @@ |
|
|
|
; +--10--+ 80 |
|
|
|
; |
|
|
|
; |
|
|
|
DEVECHO "H8P: IO=??" |
|
|
|
;DEVECHO 0 |
|
|
|
H8PKEYNONE .EQU $FF ; NONE |
|
|
|
H8PKEY0 .EQU $FE |
|
|
|
H8PKEY1 .EQU $FC |
|
|
|
H8PKEY2 .EQU $FA |
|
|
|
H8PKEY3 .EQU $F8 |
|
|
|
H8PKEY4 .EQU $F6 |
|
|
|
H8PKEY5 .EQU $F4 |
|
|
|
H8PKEY6 .EQU $F2 |
|
|
|
H8PKEY7 .EQU $F0 |
|
|
|
H8PKEY8 .EQU $EF |
|
|
|
H8PKEY9 .EQU $CF |
|
|
|
H8PKEYPLUS .EQU $AF ; PLUS |
|
|
|
H8PKEYMINUS .EQU $8F ; MINUS |
|
|
|
H8PKEYMUL .EQU $6F ; MULTIPLY |
|
|
|
H8PKEYDIV .EQU $4F ; DIVIDE |
|
|
|
H8PKEYNUM .EQU $2F ; NUMBER |
|
|
|
H8PKEYDOT .EQU $0F ; DOT |
|
|
|
; |
|
|
|
H8P_TICCNT .EQU $FFEA ; TICCNT AT $FFEA IS COPIED DOWN TO $000B FOR HEATH COMPATIBILITY |
|
|
|
H8P_SPEED .EQU $FFEC ; SPEED CONTROL VALUE IS STORED HERE |
|
|
|
H8P_SPDIO .EQU $30 |
|
|
|
H8FPIO .EQU $F0 |
|
|
|
; |
|
|
|
DEVECHO "H8P: IO=" |
|
|
|
DEVECHO H8FPIO |
|
|
|
DEVECHO "\n" |
|
|
|
; |
|
|
|
;__H8P_PREINIT_______________________________________________________________________________________ |
|
|
|
@ -24,144 +47,856 @@ |
|
|
|
; HARDWARE RESET PRIOR TO ROMWBW CONSOLE INITIALIZATION |
|
|
|
; |
|
|
|
H8P_PREINIT: |
|
|
|
LD A,(DSKY_DISPACT) ; DSKY DISPATCHER ALREADY SET? |
|
|
|
OR A ; SET FLAGS |
|
|
|
RET NZ ; IF ALREADY ACTIVE, ABORT |
|
|
|
; |
|
|
|
; REGISTER DRIVER WITH HBIOS |
|
|
|
LD BC,H8P_DISPATCH |
|
|
|
CALL DSKY_SETDISP |
|
|
|
LD HL,H8P_INTR |
|
|
|
CALL HB_ADDIM1 |
|
|
|
; |
|
|
|
RET |
|
|
|
; |
|
|
|
;__H8P_INIT__________________________________________________________________________________________ |
|
|
|
; |
|
|
|
; DISPLAY DSKY INFO ON ROMWBW CONSOLE |
|
|
|
; DISPLAY H8 FRONT PANEL INFO ON ROMWBW CONSOLE |
|
|
|
;____________________________________________________________________________________________________ |
|
|
|
; |
|
|
|
H8P_INIT: |
|
|
|
CALL NEWLINE ; FORMATTING |
|
|
|
PRTS("H8P:$") ; DRIVER TAG |
|
|
|
PRTS("H8FP:$") ; FORMATTING |
|
|
|
; |
|
|
|
PRTS(" IO=0x$") ; FORMATTING |
|
|
|
LD A,H8FPIO ; GET BASE PORT |
|
|
|
CALL PRTHEXBYTE ; PRINT BASE PORT |
|
|
|
; |
|
|
|
RET ; DONE |
|
|
|
; |
|
|
|
; DSKY DEVICE FUNCTION DISPATCH ENTRY |
|
|
|
; A: RESULT (OUT), 0=OK, Z=OK, NZ=ERR |
|
|
|
; B: FUNCTION (IN) |
|
|
|
; |
|
|
|
H8P_DISPATCH: |
|
|
|
LD A,B ; GET REQUESTED FUNCTION |
|
|
|
AND $0F ; ISOLATE SUB-FUNCTION |
|
|
|
JP Z,H8P_RESET ; RESET DSKY HARDWARE |
|
|
|
DEC A |
|
|
|
JP Z,H8P_STAT ; GET KEYPAD STATUS |
|
|
|
DEC A |
|
|
|
JP Z,H8P_GETKEY ; READ A KEY FROM THE KEYPAD |
|
|
|
DEC A |
|
|
|
JP Z,H8P_SHOWHEX ; DISPLAY A 32-BIT BINARY VALUE IN HEX |
|
|
|
DEC A |
|
|
|
JP Z,H8P_SHOWSEG ; DISPLAY SEGMENTS |
|
|
|
DEC A |
|
|
|
JP Z,H8P_KEYLEDS ; SET KEYPAD LEDS |
|
|
|
DEC A |
|
|
|
JP Z,H8P_STATLED ; SET STATUS LED |
|
|
|
DEC A |
|
|
|
JP Z,H8P_BEEP ; BEEP DSKY SPEAKER |
|
|
|
DEC A |
|
|
|
JP Z,H8P_DEVICE ; DEVICE INFO |
|
|
|
SYSCHKERR(ERR_NOFUNC) |
|
|
|
RET |
|
|
|
; |
|
|
|
; RESET DSKY -- CLEAR DISPLAY AND KEYPAD FIFO |
|
|
|
; |
|
|
|
H8P_RESET: |
|
|
|
XOR A ; SIGNAL SUCCESS |
|
|
|
; H8 FRONT PANEL INTERRUPT |
|
|
|
; |
|
|
|
H8P_INTR: |
|
|
|
LD (H8P_BCVAL),BC |
|
|
|
LD (H8P_DEVAL),DE |
|
|
|
LD (H8P_HLVAL),HL |
|
|
|
LD HL,(H8P_TICCNT) ; 2MS TIC COUNTER |
|
|
|
INC HL |
|
|
|
LD (H8P_TICCNT),HL |
|
|
|
CALL H8P_TIMER ; UP TIMER |
|
|
|
CALL H8P_STAT ; CHECK KEYPAD PRESS |
|
|
|
CALL H8P_GETSEGIDX ; SEGMENT INDEX IN (C) |
|
|
|
CALL H8P_HORN |
|
|
|
OR C |
|
|
|
OUT (H8FPIO),A ; CLEAR INTERRUPT AND SET LED IDX |
|
|
|
LD C,A |
|
|
|
LD A,(H8P_FPENA) |
|
|
|
OR A |
|
|
|
LD A,$FF |
|
|
|
CALL NZ,H8P_GETSEGPAT |
|
|
|
OUT (H8FPIO+1),A ; SET LED PATTERN |
|
|
|
; |
|
|
|
CALL H8P_KEYPAD |
|
|
|
LD A,(H8P_STTIMER) |
|
|
|
INC A |
|
|
|
AND $1F ; UPDATE LEDS EVERY 32 TICKS |
|
|
|
LD (H8P_STTIMER),A |
|
|
|
CALL Z,H8P_HDLSTATE |
|
|
|
LD A,(H8P_HBTICK) ; ROMWBW TIMER |
|
|
|
INC A |
|
|
|
LD (H8P_HBTICK),A |
|
|
|
CP 10 |
|
|
|
RET NZ |
|
|
|
CALL HB_TICK |
|
|
|
XOR A |
|
|
|
LD (H8P_HBTICK),A |
|
|
|
INC A ; INTERRUPT HANDLED |
|
|
|
RET |
|
|
|
; |
|
|
|
; CHECK FOR KEY PRESS, SAVE RAW VALUE, RETURN STATUS |
|
|
|
; HANDLE FRONT PANEL SPEAKER SOUNDS |
|
|
|
; |
|
|
|
H8P_HORN: |
|
|
|
LD HL,(H8P_HORNDUR) |
|
|
|
LD A,H |
|
|
|
OR L |
|
|
|
LD A,$D0 ; HORN OFF |
|
|
|
RET Z |
|
|
|
DEC HL |
|
|
|
LD (H8P_HORNDUR),HL |
|
|
|
LD A,$50 ; HORN ON |
|
|
|
RET |
|
|
|
; |
|
|
|
H8P_STAT: |
|
|
|
XOR A ; ZERO KEYS PENDING (FOR NOW) |
|
|
|
; HANDLE UP-TIME TIMER |
|
|
|
; |
|
|
|
H8P_TIMER: |
|
|
|
LD HL,(H8P_ONESEC) |
|
|
|
DEC HL |
|
|
|
LD (H8P_ONESEC),HL |
|
|
|
LD A,H |
|
|
|
OR L |
|
|
|
RET NZ |
|
|
|
LD HL,(H8P_UPTIME) |
|
|
|
INC HL |
|
|
|
LD (H8P_UPTIME),HL |
|
|
|
LD HL,500 |
|
|
|
LD (H8P_ONESEC),HL |
|
|
|
CALL H8P_TIMER1 |
|
|
|
LD A,(H8P_STATE) |
|
|
|
OR A |
|
|
|
CALL Z,H8P_TIMER2 |
|
|
|
RET |
|
|
|
; ADVANCE DIGITS |
|
|
|
H8P_TIMER1: |
|
|
|
LD C,9 |
|
|
|
LD HL,H8P_UPTDIG+8 |
|
|
|
CALL H8P_ADVDIG |
|
|
|
RET |
|
|
|
; SHOW DIGITS |
|
|
|
H8P_TIMER2: |
|
|
|
LD DE,H8P_UPTDIG+8 |
|
|
|
LD HL,H8P_SEGBUF+8 |
|
|
|
LD C,9 |
|
|
|
H8P_TIMER3: |
|
|
|
PUSH BC |
|
|
|
PUSH HL |
|
|
|
LD A,C |
|
|
|
CP 7 |
|
|
|
JR Z,H8P_TIMER4 |
|
|
|
CP 4 |
|
|
|
JR Z,H8P_TIMER4 |
|
|
|
JR H8P_TIMER5 |
|
|
|
H8P_TIMER4: |
|
|
|
LD A,$80 |
|
|
|
JR H8P_TIMER6 |
|
|
|
H8P_TIMER5: |
|
|
|
LD HL,H8P_DIGMAP |
|
|
|
LD A,(DE) |
|
|
|
LD C,A |
|
|
|
LD B,0 |
|
|
|
ADD HL,BC |
|
|
|
LD A,(HL) |
|
|
|
H8P_TIMER6: |
|
|
|
POP HL |
|
|
|
LD (HL),A |
|
|
|
DEC HL |
|
|
|
DEC DE |
|
|
|
POP BC |
|
|
|
DEC C |
|
|
|
JR NZ,H8P_TIMER3 |
|
|
|
RET |
|
|
|
H8P_ADVDIG: |
|
|
|
LD A,(HL) ; 000.000.00X |
|
|
|
INC A |
|
|
|
LD (HL),A |
|
|
|
CP 10 ; 0-9 |
|
|
|
RET NZ |
|
|
|
LD (HL),0 |
|
|
|
DEC HL |
|
|
|
LD A,(HL) ; 000.000.0X0 |
|
|
|
INC A |
|
|
|
LD (HL),A |
|
|
|
CP 6 ; 0-5 |
|
|
|
RET NZ |
|
|
|
LD (HL),0 |
|
|
|
DEC HL |
|
|
|
DEC HL |
|
|
|
LD A,(HL) ; 000.00X.000 |
|
|
|
INC A |
|
|
|
LD (HL),A |
|
|
|
CP 10 ; 0-9 |
|
|
|
RET NZ |
|
|
|
LD (HL),0 |
|
|
|
DEC HL |
|
|
|
LD A,(HL) ; 000.0X0.000 |
|
|
|
INC A |
|
|
|
LD (HL),A |
|
|
|
CP 6 ; 0-5 |
|
|
|
RET NZ |
|
|
|
LD (HL),0 |
|
|
|
DEC HL |
|
|
|
DEC HL |
|
|
|
LD A,(HL) ; 00X.000.000 |
|
|
|
INC A |
|
|
|
LD (HL),A |
|
|
|
CP 10 ; 0-9 |
|
|
|
RET NZ |
|
|
|
LD (HL),0 |
|
|
|
DEC HL |
|
|
|
LD A,(HL) ; 0X0.000.000 |
|
|
|
INC A |
|
|
|
LD (HL),A |
|
|
|
CP 10 ; 0-9 |
|
|
|
RET NZ |
|
|
|
LD (HL),0 |
|
|
|
DEC HL |
|
|
|
LD A,(HL) ; X00.000.000 |
|
|
|
INC A |
|
|
|
LD (HL),A |
|
|
|
CP 10 ; 0-9 |
|
|
|
RET NZ |
|
|
|
LD (HL),0 |
|
|
|
RET |
|
|
|
; |
|
|
|
; WAIT FOR A DSKY KEYPRESS AND RETURN |
|
|
|
; CHECK FOR KEY PRESS, SAVE RAW VALUE |
|
|
|
; |
|
|
|
H8P_GETKEY: |
|
|
|
; PUT KEY VALUE IN REGISTER E |
|
|
|
XOR A ; SIGNAL SUCCESS |
|
|
|
H8P_STAT: |
|
|
|
IN A,(H8FPIO) |
|
|
|
LD (H8P_KEYBUF),A |
|
|
|
RET |
|
|
|
; |
|
|
|
; DISPLAY HEX VALUE FROM DE:HL |
|
|
|
; GET KEY AND RESET KEYBUF |
|
|
|
; |
|
|
|
H8P_SHOWHEX: |
|
|
|
LD BC,DSKY_HEXBUF ; POINT TO HEX BUFFER |
|
|
|
CALL ST32 ; STORE 32-BIT BINARY THERE |
|
|
|
LD HL,DSKY_HEXBUF ; FROM: BINARY VALUE (HL) |
|
|
|
LD DE,DSKY_BUF ; TO: SEGMENT BUFFER (DE) |
|
|
|
CALL DSKY_BIN2SEG ; CONVERT |
|
|
|
LD HL,DSKY_BUF ; POINT TO SEGMENT BUFFER |
|
|
|
; AND FALL THRU TO DISPLAY IT |
|
|
|
; |
|
|
|
; DISPLAY BYTE VALUES POINTED TO BY DE. THE INCOMING BYTES ARE IN |
|
|
|
; THE STANDARD ROMWBW SEGMENT ENCODING AND MUST BE TRANSLATED TO THE |
|
|
|
; HEATH ENCODING (SEE ICM.ASM FOR EXAMPLE): |
|
|
|
H8P_GETKEY: |
|
|
|
LD A,(H8P_KEYBUF) |
|
|
|
RET |
|
|
|
; |
|
|
|
H8P_KEYPAD: |
|
|
|
CALL H8P_GETKEY |
|
|
|
LD C,A |
|
|
|
LD A,(H8P_LSTKEY) |
|
|
|
CP C |
|
|
|
RET Z |
|
|
|
LD A,C |
|
|
|
LD (H8P_LSTKEY),A |
|
|
|
CP H8PKEYNONE |
|
|
|
RET Z |
|
|
|
LD HL,$04 |
|
|
|
LD (H8P_HORNDUR),HL |
|
|
|
CP H8PKEYDIV ; / KEY (ALTER) |
|
|
|
JP Z,H8P_KEYPADALT |
|
|
|
CP H8PKEYMUL ; * KEY (CANCEL) |
|
|
|
JP Z,H8P_KEYPADCAN |
|
|
|
CP H8PKEYNUM ; MEM KEY |
|
|
|
JP Z,H8P_KEYPADMEM |
|
|
|
CP H8PKEYDOT ; REG KEY |
|
|
|
JP Z,H8P_KEYPADREG |
|
|
|
CP H8PKEY9 |
|
|
|
JP Z,H8P_KEYPAD9 |
|
|
|
CP H8PKEY8 |
|
|
|
JP Z,H8P_KEYPAD8 |
|
|
|
CP H8PKEY7 |
|
|
|
JP Z,H8P_KEYPAD7 |
|
|
|
CP H8PKEY6 |
|
|
|
JP Z,H8P_KEYPAD6 |
|
|
|
CP H8PKEY5 |
|
|
|
JP Z,H8P_KEYPAD5 |
|
|
|
CP H8PKEY4 |
|
|
|
JP Z,H8P_KEYPAD4 |
|
|
|
CP H8PKEY3 |
|
|
|
JP Z,H8P_KEYPAD3 |
|
|
|
CP H8PKEY2 |
|
|
|
JP Z,H8P_KEYPAD2 |
|
|
|
CP H8PKEY1 |
|
|
|
JP Z,H8P_KEYPAD1 |
|
|
|
CP H8PKEY0 |
|
|
|
JP Z,H8P_KEYPAD0 |
|
|
|
CP H8PKEYPLUS |
|
|
|
JP Z,H8P_KEYPADPLUS |
|
|
|
CP H8PKEYMINUS |
|
|
|
JP Z,H8P_KEYPADMINUS |
|
|
|
RET |
|
|
|
; RESET TIMER |
|
|
|
H8P_KEYPADALT: |
|
|
|
LD A,(H8P_FPENA) |
|
|
|
OR A |
|
|
|
RET Z |
|
|
|
LD A,(H8P_STATE) |
|
|
|
OR A |
|
|
|
RET NZ |
|
|
|
XOR A |
|
|
|
LD C,9 |
|
|
|
LD HL,H8P_UPTDIG |
|
|
|
H8P_KEYPADALTL: |
|
|
|
LD (HL),A |
|
|
|
INC HL |
|
|
|
DEC C |
|
|
|
JR NZ,H8P_KEYPADALTL |
|
|
|
RET |
|
|
|
; ENABLE FRONT PANEL DISPLAY |
|
|
|
H8P_KEYPADCAN: |
|
|
|
LD A,(H8P_FPENA) |
|
|
|
CPL |
|
|
|
LD (H8P_FPENA),A |
|
|
|
RET |
|
|
|
; SET MEM STATE |
|
|
|
H8P_KEYPADMEM: |
|
|
|
LD A,2 |
|
|
|
LD (H8P_STATE),A |
|
|
|
LD (H8P_MEMENTER),A |
|
|
|
XOR A |
|
|
|
LD (H8P_MEMADRIDX),A |
|
|
|
CALL H8P_UPDMEMLOC |
|
|
|
RET |
|
|
|
; SET REG STATE |
|
|
|
H8P_KEYPADREG: |
|
|
|
LD A,1 |
|
|
|
LD (H8P_STATE),A |
|
|
|
XOR A |
|
|
|
LD (H8P_MEMENTER),A |
|
|
|
RET |
|
|
|
; NOTHING |
|
|
|
H8P_KEYPAD9: |
|
|
|
; RET |
|
|
|
; TIMER |
|
|
|
H8P_KEYPAD8: |
|
|
|
LD A,(H8P_STATE) |
|
|
|
CP 2 |
|
|
|
RET Z |
|
|
|
LD A,0 |
|
|
|
LD (H8P_STATE),A |
|
|
|
RET |
|
|
|
; SPEED CONTROL |
|
|
|
H8P_KEYPAD7: |
|
|
|
LD A,(H8P_STATE) |
|
|
|
CP 2 ; MEM MODE |
|
|
|
LD A,7 |
|
|
|
JP Z,H8P_KEYPADDIG |
|
|
|
LD A,3 |
|
|
|
LD (H8P_STATE),A |
|
|
|
RET |
|
|
|
; PC (OUT) |
|
|
|
H8P_KEYPAD6: |
|
|
|
LD A,(H8P_STATE) |
|
|
|
CP 2 ; MEM MODE |
|
|
|
LD A,6 |
|
|
|
JP Z,H8P_KEYPADDIG |
|
|
|
LD A,5 |
|
|
|
LD (H8P_REGNUM),A |
|
|
|
RET |
|
|
|
; HL (IN) |
|
|
|
H8P_KEYPAD5: |
|
|
|
LD A,(H8P_STATE) |
|
|
|
CP 2 ; MEM MODE |
|
|
|
LD A,5 |
|
|
|
JP Z,H8P_KEYPADDIG |
|
|
|
LD A,3 |
|
|
|
LD (H8P_REGNUM),A |
|
|
|
RET |
|
|
|
; DE |
|
|
|
H8P_KEYPAD4: |
|
|
|
LD A,(H8P_STATE) |
|
|
|
CP 2 ; MEM MODE |
|
|
|
LD A,4 |
|
|
|
JP Z,H8P_KEYPADDIG |
|
|
|
LD A,2 |
|
|
|
LD (H8P_REGNUM),A |
|
|
|
RET |
|
|
|
; BC |
|
|
|
H8P_KEYPAD3: |
|
|
|
LD A,(H8P_STATE) |
|
|
|
CP 2 ; MEM MODE |
|
|
|
LD A,3 |
|
|
|
JP Z,H8P_KEYPADDIG |
|
|
|
LD A,1 |
|
|
|
LD (H8P_REGNUM),A |
|
|
|
RET |
|
|
|
; AF |
|
|
|
H8P_KEYPAD2: |
|
|
|
LD A,(H8P_STATE) |
|
|
|
CP 2 ; MEM MODE |
|
|
|
LD A,2 |
|
|
|
JP Z,H8P_KEYPADDIG |
|
|
|
LD A,0 |
|
|
|
LD (H8P_REGNUM),A |
|
|
|
RET |
|
|
|
; SP |
|
|
|
H8P_KEYPAD1: |
|
|
|
LD A,(H8P_STATE) |
|
|
|
CP 2 ; MEM MODE |
|
|
|
LD A,1 |
|
|
|
JP Z,H8P_KEYPADDIG |
|
|
|
LD A,4 |
|
|
|
LD (H8P_REGNUM),A |
|
|
|
RET |
|
|
|
; NOTHING |
|
|
|
H8P_KEYPAD0: |
|
|
|
LD A,(H8P_STATE) |
|
|
|
CP 2 ; MEM MODE |
|
|
|
JP NZ,H8P_KEYPAD8 |
|
|
|
LD A,0 |
|
|
|
; |
|
|
|
H8P_KEYPADDIG: |
|
|
|
LD C,A |
|
|
|
LD A,(H8P_MEMENTER) |
|
|
|
OR A |
|
|
|
JR Z,H8P_KEYPADDIG1 |
|
|
|
LD A,(H8P_MEMADRIDX) |
|
|
|
OR A |
|
|
|
CALL Z,H8P_SETDIG0 |
|
|
|
DEC A |
|
|
|
CALL Z,H8P_SETDIG1 |
|
|
|
DEC A |
|
|
|
CALL Z,H8P_SETDIG2 |
|
|
|
DEC A |
|
|
|
CALL Z,H8P_SETDIG3 |
|
|
|
DEC A |
|
|
|
CALL Z,H8P_SETDIG4 |
|
|
|
DEC A |
|
|
|
CALL Z,H8P_SETDIG5 |
|
|
|
CALL H8P_UPDMEMLOC |
|
|
|
; NEXT MEMORY ADR INDEX |
|
|
|
LD A,(H8P_MEMADRIDX) |
|
|
|
INC A |
|
|
|
LD (H8P_MEMADRIDX),A |
|
|
|
CP 6 |
|
|
|
RET NZ |
|
|
|
XOR A |
|
|
|
LD (H8P_MEMADRIDX),A |
|
|
|
RET |
|
|
|
; CHECK FOR IN/OUT TO PORT |
|
|
|
H8P_KEYPADDIG1: |
|
|
|
LD A,C |
|
|
|
CP 5 ; IN PORT |
|
|
|
JR Z,H8P_KEYPADINP |
|
|
|
CP 6 ; OUT PORT |
|
|
|
JR Z,H8P_KEYPADOUT |
|
|
|
RET |
|
|
|
H8P_KEYPADINP: |
|
|
|
LD BC,(H8P_MEMLOC) |
|
|
|
IN A,(C) |
|
|
|
LD B,A |
|
|
|
LD (H8P_MEMLOC),BC |
|
|
|
JP H8P_UPDMEMLOC |
|
|
|
H8P_KEYPADOUT: |
|
|
|
LD BC,(H8P_MEMLOC) |
|
|
|
LD A,B |
|
|
|
OUT (C),A |
|
|
|
RET |
|
|
|
H8P_UPDMEMLOC: |
|
|
|
LD BC,H8P_MEMLOC |
|
|
|
LD HL,H8P_SEGBUF |
|
|
|
CALL H8P_FILLOCT |
|
|
|
RET |
|
|
|
; C=VAL |
|
|
|
H8P_SETDIG0: |
|
|
|
LD HL,(H8P_MEMLOC) |
|
|
|
LD B,H |
|
|
|
CALL H8P_SETOCTH |
|
|
|
LD H,A |
|
|
|
LD (H8P_MEMLOC),HL |
|
|
|
LD A,$FF |
|
|
|
RET |
|
|
|
H8P_SETDIG1: |
|
|
|
LD HL,(H8P_MEMLOC) |
|
|
|
LD B,H |
|
|
|
CALL H8P_SETOCTM |
|
|
|
LD H,A |
|
|
|
LD (H8P_MEMLOC),HL |
|
|
|
LD A,$FF |
|
|
|
RET |
|
|
|
H8P_SETDIG2: |
|
|
|
LD HL,(H8P_MEMLOC) |
|
|
|
LD B,H |
|
|
|
CALL H8P_SETOCTL |
|
|
|
LD H,A |
|
|
|
LD (H8P_MEMLOC),HL |
|
|
|
LD A,$FF |
|
|
|
RET |
|
|
|
H8P_SETDIG3: |
|
|
|
LD HL,(H8P_MEMLOC) |
|
|
|
LD B,L |
|
|
|
CALL H8P_SETOCTH |
|
|
|
LD L,A |
|
|
|
LD (H8P_MEMLOC),HL |
|
|
|
LD A,$FF |
|
|
|
RET |
|
|
|
H8P_SETDIG4: |
|
|
|
LD HL,(H8P_MEMLOC) |
|
|
|
LD B,L |
|
|
|
CALL H8P_SETOCTM |
|
|
|
LD L,A |
|
|
|
LD (H8P_MEMLOC),HL |
|
|
|
LD A,$FF |
|
|
|
RET |
|
|
|
H8P_SETDIG5: |
|
|
|
LD HL,(H8P_MEMLOC) |
|
|
|
LD B,L |
|
|
|
CALL H8P_SETOCTL |
|
|
|
LD L,A |
|
|
|
LD (H8P_MEMLOC),HL |
|
|
|
XOR A |
|
|
|
LD (H8P_MEMENTER),A |
|
|
|
LD A,$FF |
|
|
|
RET |
|
|
|
H8P_SETDIGD: |
|
|
|
LD A,(H8P_MEMVAL) |
|
|
|
PUSH AF |
|
|
|
CALL H8P_GETOCTH |
|
|
|
LD (H8P_SEGBUF+6),A |
|
|
|
POP AF |
|
|
|
PUSH AF |
|
|
|
CALL H8P_GETOCTM |
|
|
|
LD (H8P_SEGBUF+7),A |
|
|
|
POP AF |
|
|
|
CALL H8P_GETOCTL |
|
|
|
LD (H8P_SEGBUF+8),A |
|
|
|
RET |
|
|
|
; MEM/SPEED INCREASE |
|
|
|
H8P_KEYPADPLUS: |
|
|
|
LD A,(H8P_STATE) |
|
|
|
CP 3 |
|
|
|
JR Z,H8P_KEYPADPLUS3 |
|
|
|
CP 2 |
|
|
|
RET NZ |
|
|
|
LD HL,(H8P_MEMLOC) |
|
|
|
INC HL |
|
|
|
LD (H8P_MEMLOC),HL |
|
|
|
JP H8P_UPDMEMLOC |
|
|
|
H8P_KEYPADPLUS3: |
|
|
|
LD A,(H8P_SPEED) |
|
|
|
OR A |
|
|
|
RET Z |
|
|
|
DEC A |
|
|
|
LD (H8P_SPEED),A |
|
|
|
OUT (H8P_SPDIO),A |
|
|
|
RET |
|
|
|
; MEM/SPEED DECREASE |
|
|
|
H8P_KEYPADMINUS: |
|
|
|
LD A,(H8P_STATE) |
|
|
|
CP 3 |
|
|
|
JR Z,H8P_KEYPADMINUS3 |
|
|
|
CP 2 |
|
|
|
RET NZ |
|
|
|
LD HL,(H8P_MEMLOC) |
|
|
|
DEC HL |
|
|
|
LD (H8P_MEMLOC),HL |
|
|
|
JP H8P_UPDMEMLOC |
|
|
|
H8P_KEYPADMINUS3: |
|
|
|
LD A,(H8P_SPEED) |
|
|
|
CP 3 |
|
|
|
RET Z |
|
|
|
INC A |
|
|
|
LD (H8P_SPEED),A |
|
|
|
OUT (H8P_SPDIO),A |
|
|
|
RET |
|
|
|
; |
|
|
|
; From: To: |
|
|
|
; +--01--+ +--02--+ |
|
|
|
; 20 02 40 04 |
|
|
|
; +--40--+ +--01--+ |
|
|
|
; 10 04 20 08 |
|
|
|
; +--08--+ 80 +--10--+ 80 |
|
|
|
; HANDLE FRONT PANEL STATE |
|
|
|
; |
|
|
|
H8P_SHOWSEG: |
|
|
|
XOR A ; SIGNAL SUCCESS |
|
|
|
H8P_HDLSTATE: |
|
|
|
LD A,(H8P_STATE) |
|
|
|
OR A |
|
|
|
RET Z ; UP-TIME TIMER |
|
|
|
DEC A |
|
|
|
JP Z,H8P_HDLREG ; SHOWING REGISTER VALUES |
|
|
|
DEC A |
|
|
|
JP Z,H8P_HDLMEM ; SHOWING MEMORY LOCATION VALUE |
|
|
|
DEC A |
|
|
|
JP Z,H8P_HDLSPD ; MODIFYING SPEED |
|
|
|
RET |
|
|
|
; |
|
|
|
; UPDATE KEY LEDS (H8 HAS NONE) |
|
|
|
H8P_HDLREG: |
|
|
|
LD A,(H8P_REGNUM) |
|
|
|
LD HL,H8P_REGAF |
|
|
|
OR A |
|
|
|
JP Z,H8P_HDLREGAF |
|
|
|
DEC A |
|
|
|
LD HL,H8P_REGBC |
|
|
|
JP Z,H8P_HDLREGBC |
|
|
|
DEC A |
|
|
|
LD HL,H8P_REGDE |
|
|
|
JP Z,H8P_HDLREGDE |
|
|
|
DEC A |
|
|
|
LD HL,H8P_REGHL |
|
|
|
JP Z,H8P_HDLREGHL |
|
|
|
DEC A |
|
|
|
LD HL,H8P_REGSP |
|
|
|
JP Z,H8P_HDLREGSP |
|
|
|
DEC A |
|
|
|
LD HL,H8P_REGPC |
|
|
|
JP Z,H8P_HDLREGPC |
|
|
|
RET |
|
|
|
H8P_HDLREGAF: |
|
|
|
CALL H8P_UPDLEDS |
|
|
|
LD HL,HBX_INTSTK |
|
|
|
DEC HL |
|
|
|
LD A,(HL) ; (HL)=AF LOW |
|
|
|
LD (H8P_AFVAL),A |
|
|
|
DEC HL |
|
|
|
LD A,(HL) ; (HL)=AF HIGH |
|
|
|
LD (H8P_AFVAL+1),A |
|
|
|
LD BC,H8P_AFVAL |
|
|
|
LD HL,H8P_SEGBUF |
|
|
|
JP H8P_FILLOCT |
|
|
|
H8P_HDLREGBC: |
|
|
|
LD BC,H8P_BCVAL |
|
|
|
CALL H8P_FILLOCT |
|
|
|
JP H8P_UPDLEDS |
|
|
|
H8P_HDLREGDE: |
|
|
|
LD BC,H8P_DEVAL |
|
|
|
CALL H8P_FILLOCT |
|
|
|
JP H8P_UPDLEDS |
|
|
|
H8P_HDLREGHL: |
|
|
|
CALL H8P_UPDLEDS |
|
|
|
LD HL,(HBX_INT_SP) |
|
|
|
LD A,(HL) |
|
|
|
LD (H8P_HLVAL),A |
|
|
|
INC HL |
|
|
|
LD A,(HL) |
|
|
|
LD (H8P_HLVAL+1),A |
|
|
|
LD BC,H8P_HLVAL |
|
|
|
LD HL,H8P_SEGBUF |
|
|
|
JP H8P_FILLOCT |
|
|
|
H8P_HDLREGSP: |
|
|
|
LD BC,HBX_INT_SP |
|
|
|
CALL H8P_FILLOCT |
|
|
|
JP H8P_UPDLEDS |
|
|
|
H8P_HDLREGPC: |
|
|
|
CALL H8P_UPDLEDS |
|
|
|
LD HL,(HBX_INT_SP) ; (HL)=HL LOW |
|
|
|
INC HL ; (HL)=HL HIGH |
|
|
|
INC HL ; (HL)=PC LOW |
|
|
|
LD A,(HL) |
|
|
|
LD (H8P_PCVAL),A |
|
|
|
INC HL ; (HL)=PC HIGH |
|
|
|
LD A,(HL) |
|
|
|
LD (H8P_PCVAL+1),A |
|
|
|
LD BC,H8P_PCVAL |
|
|
|
LD HL,H8P_SEGBUF |
|
|
|
JP H8P_FILLOCT |
|
|
|
H8P_HDLMEM: |
|
|
|
CALL H8P_SETDIGD |
|
|
|
RET |
|
|
|
H8P_HDLSPD: |
|
|
|
LD HL,H8P_SPD16 |
|
|
|
LD A,(H8P_SPEED) |
|
|
|
OR A |
|
|
|
JR Z,H8P_UPDLEDS |
|
|
|
LD HL,H8P_SPD08 |
|
|
|
DEC A |
|
|
|
JR Z,H8P_UPDLEDS |
|
|
|
LD HL,H8P_SPD04 |
|
|
|
DEC A |
|
|
|
JR Z,H8P_UPDLEDS |
|
|
|
LD HL,H8P_SPD02 |
|
|
|
H8P_UPDLEDS: |
|
|
|
LD C,9 |
|
|
|
LD DE,H8P_SEGBUF |
|
|
|
H8P_UPDLEDS1: |
|
|
|
LD A,(HL) |
|
|
|
INC HL |
|
|
|
LD (DE),A |
|
|
|
INC DE |
|
|
|
DEC C |
|
|
|
JR NZ,H8P_UPDLEDS1 |
|
|
|
RET |
|
|
|
; |
|
|
|
H8P_KEYLEDS: |
|
|
|
XOR A ; SIGNAL SUCCESS |
|
|
|
H8P_GETSEGIDX: |
|
|
|
LD A,(H8P_SEGIDX) |
|
|
|
DEC A |
|
|
|
LD (H8P_SEGIDX),A |
|
|
|
LD C,A |
|
|
|
RET NZ |
|
|
|
LD A,9 |
|
|
|
LD (H8P_SEGIDX),A |
|
|
|
LD C,A |
|
|
|
RET |
|
|
|
; |
|
|
|
; SET STATUS LEDS BASED ON BITS IN E |
|
|
|
; A = SEG IDX |
|
|
|
; |
|
|
|
H8P_STATLED: |
|
|
|
XOR A ; SIGNAL SUCCESS |
|
|
|
RET |
|
|
|
; +--02--+ |
|
|
|
; 40 04 |
|
|
|
; +--01--+ |
|
|
|
; 20 08 |
|
|
|
; +--10--+ 80 |
|
|
|
; |
|
|
|
; BEEP THE SPEAKER ON THE H8P |
|
|
|
H8P_GETSEGPAT: |
|
|
|
LD A,C |
|
|
|
AND $0F ; IDX=1 THRU 9 |
|
|
|
DEC A |
|
|
|
LD C,A |
|
|
|
LD B,0 |
|
|
|
LD HL,H8P_SEGBUF |
|
|
|
ADD HL,BC |
|
|
|
LD E,(HL) |
|
|
|
LD A,(H8P_MEMENTER) |
|
|
|
OR A |
|
|
|
JR Z,H8P_GETSEGPATX |
|
|
|
LD A,(H8P_MEMADRIDX) |
|
|
|
CP C |
|
|
|
JR NZ,H8P_GETSEGPATX |
|
|
|
LD A,$80 |
|
|
|
OR E |
|
|
|
LD E,A |
|
|
|
H8P_GETSEGPATX: |
|
|
|
LD A,E |
|
|
|
CPL |
|
|
|
RET |
|
|
|
; BC=MEMLOC, HL=LED BUFFER |
|
|
|
H8P_FILLOCT: |
|
|
|
PUSH HL |
|
|
|
INC BC ; POINT TO HIGH BYTE |
|
|
|
LD A,(BC) |
|
|
|
CALL H8P_GETOCTH |
|
|
|
LD (HL),A |
|
|
|
INC HL |
|
|
|
LD A,(BC) |
|
|
|
CALL H8P_GETOCTM |
|
|
|
LD (HL),A |
|
|
|
INC HL |
|
|
|
LD A,(BC) |
|
|
|
CALL H8P_GETOCTL |
|
|
|
LD (HL),A |
|
|
|
INC HL |
|
|
|
DEC BC ; POINT TO LOW BYTE |
|
|
|
LD A,(BC) |
|
|
|
CALL H8P_GETOCTH |
|
|
|
LD (HL),A |
|
|
|
INC HL |
|
|
|
LD A,(BC) |
|
|
|
CALL H8P_GETOCTM |
|
|
|
LD (HL),A |
|
|
|
INC HL |
|
|
|
LD A,(BC) |
|
|
|
CALL H8P_GETOCTL |
|
|
|
LD (HL),A |
|
|
|
POP HL |
|
|
|
RET |
|
|
|
; HIGH OCTAL BITS |
|
|
|
H8P_GETOCTH: |
|
|
|
AND $C0 |
|
|
|
RRA |
|
|
|
RRA |
|
|
|
RRA |
|
|
|
RRA |
|
|
|
RRA |
|
|
|
RRA |
|
|
|
JR H8P_GETOCTX |
|
|
|
; MEDIUM OCTAL BITS |
|
|
|
H8P_GETOCTM: |
|
|
|
AND $38 |
|
|
|
RRA |
|
|
|
RRA |
|
|
|
RRA |
|
|
|
JR H8P_GETOCTX |
|
|
|
; LOW OCTAL BITS |
|
|
|
H8P_GETOCTL: |
|
|
|
AND $07 |
|
|
|
H8P_GETOCTX: |
|
|
|
PUSH HL |
|
|
|
LD E,A |
|
|
|
LD D,0 |
|
|
|
LD HL,H8P_DIGMAP |
|
|
|
ADD HL,DE |
|
|
|
LD A,(HL) ; VALUE CONVERTED TO LED SEGMENT PATTERN |
|
|
|
POP HL |
|
|
|
RET |
|
|
|
; B=CURVAL, C=NEWVAL |
|
|
|
H8P_SETOCTH: |
|
|
|
LD A,C |
|
|
|
AND $03 |
|
|
|
RLA |
|
|
|
RLA |
|
|
|
RLA |
|
|
|
RLA |
|
|
|
RLA |
|
|
|
RLA |
|
|
|
LD C,A |
|
|
|
LD A,B |
|
|
|
AND $3F |
|
|
|
OR C |
|
|
|
RET |
|
|
|
H8P_SETOCTM: |
|
|
|
LD A,C |
|
|
|
AND $07 |
|
|
|
RLA |
|
|
|
RLA |
|
|
|
RLA |
|
|
|
LD C,A |
|
|
|
LD A,B |
|
|
|
AND $C7 |
|
|
|
OR C |
|
|
|
RET |
|
|
|
H8P_SETOCTL: |
|
|
|
LD A,C |
|
|
|
AND $07 |
|
|
|
LD C,A |
|
|
|
LD A,B |
|
|
|
AND $F8 |
|
|
|
OR C |
|
|
|
CALL H8P_BEEP |
|
|
|
RET |
|
|
|
; |
|
|
|
H8P_BEEP: |
|
|
|
POP BC |
|
|
|
XOR A ; SIGNAL SUCCESS |
|
|
|
PUSH HL |
|
|
|
LD HL,16 |
|
|
|
LD (H8P_HORNDUR),HL |
|
|
|
POP HL |
|
|
|
RET |
|
|
|
; |
|
|
|
; DEVICE INFORMATION |
|
|
|
; |
|
|
|
H8P_DEVICE: |
|
|
|
LD D,DSKYDEV_H8P ; D := DEVICE TYPE |
|
|
|
; LD D,DSKYDEV_H8P ; D := DEVICE TYPE |
|
|
|
LD E,0 ; E := PHYSICAL DEVICE NUMBER |
|
|
|
LD H,0 ; H := MODE |
|
|
|
LD L,0 ; L := BASE I/O ADDRESS |
|
|
|
LD L,H8FPIO ; L := BASE I/O ADDRESS |
|
|
|
XOR A ; SIGNAL SUCCESS |
|
|
|
RET |
|
|
|
; |
|
|
|
;_KEYMAP_TABLE_____________________________________________________________________________________________________________ |
|
|
|
; |
|
|
|
H8P_KEYMAP: ; *** NEEDS TO BE UPDATED *** |
|
|
|
; POS $00 $01 $02 $03 $04 $05 $06 $07 |
|
|
|
; KEY [0] [1] [2] [3] [4] [5] [6] [7] |
|
|
|
.DB $0D, $04, $0C, $14, $03, $0B, $13, $02 |
|
|
|
; |
|
|
|
; POS $08 $09 $0A $0B $0C $0D $0E $0F |
|
|
|
; KEY [8] [9] [A] [B] [C] [D] [E] [F] |
|
|
|
.DB $0A, $12, $01, $09, $11, $00, $08, $10 |
|
|
|
; DIGITS TO LED PATTERNS |
|
|
|
; +--02--+ |
|
|
|
; 40 04 |
|
|
|
; +--01--+ |
|
|
|
; 20 08 |
|
|
|
; +--10--+ 80 |
|
|
|
; |
|
|
|
; POS $10 $11 $12 $13 $14 $15 $16 $17 |
|
|
|
; KEY [FW] [BK] [CL] [EN] [DE] [EX] [GO] [BO] |
|
|
|
.DB $05, $15, $1D, $1C, $1B, $1A, $19, $18 |
|
|
|
|
|
|
|
; POS $18 $19 $1A $1B |
|
|
|
; KEY [F4] [F3] [F2] [F1] |
|
|
|
.DB $23, $22, $21, $20 |
|
|
|
H8P_DIGMAP: |
|
|
|
; 0 1 2 3 4 5 6 7 |
|
|
|
.DB $7E, $0C, $37, $1F, $4D, $5B, $7B, $0E |
|
|
|
; 8 9 A B C D E F |
|
|
|
.DB $7F, $5F, $6F, $79, $72, $3D, $73, $63 |
|
|
|
; |
|
|
|
H8P_REGNUM: |
|
|
|
.DB 0 |
|
|
|
H8P_REGAF: |
|
|
|
.DB $00, $00, $00, $00, $00, $00, $00, $6F, $63 |
|
|
|
H8P_REGBC: |
|
|
|
.DB $00, $00, $00, $00, $00, $00, $00, $79, $72 |
|
|
|
H8P_REGDE: |
|
|
|
.DB $00, $00, $00, $00, $00, $00, $00, $3D, $73 |
|
|
|
H8P_REGHL: |
|
|
|
.DB $00, $00, $00, $00, $00, $00, $00, $6D, $70 |
|
|
|
H8P_REGSP: |
|
|
|
.DB $00, $00, $00, $00, $00, $00, $00, $5B, $67 |
|
|
|
H8P_REGPC: |
|
|
|
.DB $00, $00, $00, $00, $00, $00, $00, $67, $72 |
|
|
|
H8P_SPD16: |
|
|
|
.DB $00, $00, $00, $00, $0C, $7B, $5B, $67, $3D |
|
|
|
H8P_SPD08: |
|
|
|
.DB $00, $00, $00, $00, $00, $7F, $5B, $67, $3D |
|
|
|
H8P_SPD04: |
|
|
|
.DB $00, $00, $00, $00, $00, $4D, $5B, $67, $3D |
|
|
|
H8P_SPD02: |
|
|
|
.DB $00, $00, $00, $00, $00, $37, $5B, $67, $3D |
|
|
|
H8P_MEMADRIDX: |
|
|
|
.DB 0 |
|
|
|
H8P_MEMENTER: |
|
|
|
.DB 0 |
|
|
|
H8P_AFVAL: |
|
|
|
.DW 0 |
|
|
|
H8P_BCVAL: |
|
|
|
.DW 0 |
|
|
|
H8P_DEVAL: |
|
|
|
.DW 0 |
|
|
|
H8P_HLVAL: |
|
|
|
.DW 0 |
|
|
|
H8P_PCVAL: |
|
|
|
.DW 0 |
|
|
|
; |
|
|
|
H8P_STATE: |
|
|
|
.DB 00 |
|
|
|
H8P_STTIMER: |
|
|
|
.DB 00 |
|
|
|
H8P_FPENA: |
|
|
|
.DB $FF |
|
|
|
H8P_SEGIDX: |
|
|
|
.DB 09 |
|
|
|
H8P_HBTICK: |
|
|
|
.DB 00 |
|
|
|
H8P_KEYBUF: |
|
|
|
.DB 00 |
|
|
|
H8P_LSTKEY: |
|
|
|
.DB 00 |
|
|
|
H8P_SEGBUF: |
|
|
|
.DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF |
|
|
|
H8P_HORNDUR: |
|
|
|
.DW $0080 |
|
|
|
H8P_ONESEC: |
|
|
|
.DW 500 |
|
|
|
H8P_UPTIME: |
|
|
|
.DW 0 |
|
|
|
H8P_UPTDIG: |
|
|
|
.DB 0,0,0,0,0,0,0,0,0 |
|
|
|
|