|
|
@ -95,10 +95,18 @@ LPT_INIT: |
|
|
LD IY,LPT_CFG ; POINT TO START OF CFG TABLE |
|
|
LD IY,LPT_CFG ; POINT TO START OF CFG TABLE |
|
|
LPT_INIT0: |
|
|
LPT_INIT0: |
|
|
PUSH BC ; SAVE LOOP CONTROL |
|
|
PUSH BC ; SAVE LOOP CONTROL |
|
|
|
|
|
CALL LPT_PRTCFG ; PRINT CONFIG |
|
|
CALL LPT_INITUNIT ; HAND OFF TO UNIT INIT CODE |
|
|
CALL LPT_INITUNIT ; HAND OFF TO UNIT INIT CODE |
|
|
POP BC ; RESTORE LOOP CONTROL |
|
|
POP BC ; RESTORE LOOP CONTROL |
|
|
; |
|
|
; |
|
|
LD A,(IY+1) ; GET THE LPT TYPE DETECTED |
|
|
|
|
|
|
|
|
JR Z,LPT_INIT1 ; IF DETECTED, CONTINUE INIT |
|
|
|
|
|
CALL PC_SPACE ; FORMATTING |
|
|
|
|
|
LD DE,LPT_STR_NOLPT ; NO LPT MESSAGE |
|
|
|
|
|
CALL WRITESTR ; DISPLAY IT |
|
|
|
|
|
JR LPT_INIT2 ; AND LOOP AS NEEDED |
|
|
|
|
|
; |
|
|
|
|
|
LPT_INIT1: |
|
|
|
|
|
LD A,(IY+1) ; GET THE LPT TYPE |
|
|
OR A ; SET FLAGS |
|
|
OR A ; SET FLAGS |
|
|
JR Z,LPT_INIT2 ; SKIP IT IF NOTHING FOUND |
|
|
JR Z,LPT_INIT2 ; SKIP IT IF NOTHING FOUND |
|
|
; |
|
|
; |
|
|
@ -107,7 +115,6 @@ LPT_INIT0: |
|
|
POP DE ; ... TO DE |
|
|
POP DE ; ... TO DE |
|
|
LD BC,LPT_FNTBL ; BC := FUNCTION TABLE ADDRESS |
|
|
LD BC,LPT_FNTBL ; BC := FUNCTION TABLE ADDRESS |
|
|
CALL NZ,CIO_ADDENT ; ADD ENTRY IF LPT FOUND, BC:DE |
|
|
CALL NZ,CIO_ADDENT ; ADD ENTRY IF LPT FOUND, BC:DE |
|
|
CALL LPT_PRTCFG ; PRINT IF NOT ZERO |
|
|
|
|
|
POP BC ; RESTORE LOOP CONTROL |
|
|
POP BC ; RESTORE LOOP CONTROL |
|
|
; |
|
|
; |
|
|
LPT_INIT2: |
|
|
LPT_INIT2: |
|
|
@ -123,9 +130,7 @@ LPT_INIT3: |
|
|
; |
|
|
; |
|
|
LPT_INITUNIT: |
|
|
LPT_INITUNIT: |
|
|
CALL LPT_DETECT ; DETERMINE LPT TYPE |
|
|
CALL LPT_DETECT ; DETERMINE LPT TYPE |
|
|
LD (IY+1),A ; SAVE IN CONFIG TABLE |
|
|
|
|
|
OR A ; SET FLAGS |
|
|
|
|
|
RET Z ; ABORT IF NOTHING THERE |
|
|
|
|
|
|
|
|
RET NZ ; ABORT IF NOTHING THERE |
|
|
; |
|
|
; |
|
|
; UPDATE WORKING LPT DEVICE NUM |
|
|
; UPDATE WORKING LPT DEVICE NUM |
|
|
LD HL,LPT_DEV ; POINT TO CURRENT DEVICE NUM |
|
|
LD HL,LPT_DEV ; POINT TO CURRENT DEVICE NUM |
|
|
@ -326,15 +331,7 @@ LPT_DETECT: |
|
|
; |
|
|
; |
|
|
LPT_DETECT: |
|
|
LPT_DETECT: |
|
|
LD C,(IY+3) ; BASE PORT ADDRESS |
|
|
LD C,(IY+3) ; BASE PORT ADDRESS |
|
|
CALL LPT_DETECT2 ; CHECK IT |
|
|
|
|
|
JR Z,LPT_DETECT1 ; FOUND IT, RECORD IT |
|
|
|
|
|
LD A,LPTMODE_NONE ; NOTHING FOUND |
|
|
|
|
|
RET ; DONE |
|
|
|
|
|
; |
|
|
|
|
|
LPT_DETECT1: |
|
|
|
|
|
; LPT FOUND, RECORD IT |
|
|
|
|
|
LD A,LPTMODE_SPP ; RETURN CHIP TYPE |
|
|
|
|
|
RET ; DONE |
|
|
|
|
|
|
|
|
JR LPT_DETECT2 ; CHECK IT |
|
|
; |
|
|
; |
|
|
LPT_DETECT2: |
|
|
LPT_DETECT2: |
|
|
; LOOK FOR LPT AT BASE PORT ADDRESS IN C |
|
|
; LOOK FOR LPT AT BASE PORT ADDRESS IN C |
|
|
@ -394,20 +391,13 @@ LPT_DETECT: |
|
|
CALL PRTHEXBYTE |
|
|
CALL PRTHEXBYTE |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
CP $A5 ; CHECK FOR TEST VALUE |
|
|
CP $A5 ; CHECK FOR TEST VALUE |
|
|
JR Z,LPT_DETECT1 ; FOUND IT |
|
|
|
|
|
LD A,LPTMODE_NONE ; NOT FOUND |
|
|
|
|
|
RET |
|
|
|
|
|
; |
|
|
|
|
|
LPT_DETECT1: |
|
|
|
|
|
; LPT FOUND, RECORD IT |
|
|
|
|
|
LD A,LPTMODE_MG014 ; RETURN CHIP TYPE |
|
|
|
|
|
RET ; DONE |
|
|
|
|
|
|
|
|
RET ; ZF SET IF DETECTED |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
; |
|
|
; |
|
|
#IF (LPTMODE == LPTMODE_S100) |
|
|
#IF (LPTMODE == LPTMODE_S100) |
|
|
LPT_DETECT: |
|
|
LPT_DETECT: |
|
|
; PORT ALWAYS EXISTS ON FPGA |
|
|
; PORT ALWAYS EXISTS ON FPGA |
|
|
LD A,LPTMODE_S100 ; RETURN CHIP TYPE |
|
|
|
|
|
|
|
|
XOR A ; SIGNAL SUCCESS |
|
|
RET ; DONE |
|
|
RET ; DONE |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
; |
|
|
; |
|
|
@ -417,7 +407,7 @@ LPT_PRTCFG: |
|
|
; ANNOUNCE PORT |
|
|
; ANNOUNCE PORT |
|
|
CALL NEWLINE ; FORMATTING |
|
|
CALL NEWLINE ; FORMATTING |
|
|
PRTS("LPT$") ; FORMATTING |
|
|
PRTS("LPT$") ; FORMATTING |
|
|
LD A,(IY) ; DEVICE NUM |
|
|
|
|
|
|
|
|
LD A,(IY+2) ; DEVICE NUM |
|
|
CALL PRTDECB ; PRINT DEVICE NUM |
|
|
CALL PRTDECB ; PRINT DEVICE NUM |
|
|
PRTS(": IO=0x$") ; FORMATTING |
|
|
PRTS(": IO=0x$") ; FORMATTING |
|
|
LD A,(IY+3) ; GET BASE PORT |
|
|
LD A,(IY+3) ; GET BASE PORT |
|
|
@ -452,11 +442,13 @@ LPT_TYPE_MAP: |
|
|
.DW LPT_STR_MG014 |
|
|
.DW LPT_STR_MG014 |
|
|
.DW LPT_STR_S100 |
|
|
.DW LPT_STR_S100 |
|
|
; |
|
|
; |
|
|
LPT_STR_NONE .DB "<NOT PRESENT>$" |
|
|
|
|
|
|
|
|
LPT_STR_NONE .DB "???$" |
|
|
LPT_STR_SPP .DB "SPP$" |
|
|
LPT_STR_SPP .DB "SPP$" |
|
|
LPT_STR_MG014 .DB "MG014$" |
|
|
LPT_STR_MG014 .DB "MG014$" |
|
|
LPT_STR_S100 .DB "S100$" |
|
|
LPT_STR_S100 .DB "S100$" |
|
|
; |
|
|
; |
|
|
|
|
|
LPT_STR_NOLPT .DB "NOT PRESENT$" |
|
|
|
|
|
; |
|
|
; WORKING VARIABLES |
|
|
; WORKING VARIABLES |
|
|
; |
|
|
; |
|
|
LPT_DEV .DB 0 ; DEVICE NUM USED DURING INIT |
|
|
LPT_DEV .DB 0 ; DEVICE NUM USED DURING INIT |
|
|
@ -468,7 +460,7 @@ LPT_CFG: |
|
|
LPT0_CFG: |
|
|
LPT0_CFG: |
|
|
; LPT MODULE A CONFIG |
|
|
; LPT MODULE A CONFIG |
|
|
.DB 0 ; DEVICE NUMBER (SET DURING INIT) |
|
|
.DB 0 ; DEVICE NUMBER (SET DURING INIT) |
|
|
.DB 0 ; LPT TYPE (SET DURING INIT) |
|
|
|
|
|
|
|
|
.DB LPTMODE ; LPT MODE |
|
|
.DB 0 ; MODULE ID |
|
|
.DB 0 ; MODULE ID |
|
|
.DB LPT0BASE ; BASE PORT |
|
|
.DB LPT0BASE ; BASE PORT |
|
|
.DW 0 ; LINE CONFIGURATION |
|
|
.DW 0 ; LINE CONFIGURATION |
|
|
@ -494,7 +486,7 @@ LPT_CFGSIZ .EQU $ - LPT_CFG ; SIZE OF ONE CFG TABLE ENTRY |
|
|
LPT1_CFG: |
|
|
LPT1_CFG: |
|
|
; LPT MODULE B CONFIG |
|
|
; LPT MODULE B CONFIG |
|
|
.DB 0 ; DEVICE NUMBER (SET DURING INIT) |
|
|
.DB 0 ; DEVICE NUMBER (SET DURING INIT) |
|
|
.DB 0 ; LPT TYPE (SET DURING INIT) |
|
|
|
|
|
|
|
|
.DB LPTMODE ; LPT MODE |
|
|
.DB 1 ; MODULE ID |
|
|
.DB 1 ; MODULE ID |
|
|
.DB LPT1BASE ; BASE PORT |
|
|
.DB LPT1BASE ; BASE PORT |
|
|
.DW 0 ; LINE CONFIGURATION |
|
|
.DW 0 ; LINE CONFIGURATION |
|
|
|