Browse Source

eZ80 Compatibility Enhancements

See Issue #400
master v3.5.0-dev.87
Wayne Warthen 1 year ago
parent
commit
fb9f9774d7
  1. 2
      Source/HBIOS/ez80cpudrv.asm
  2. 1
      Source/HBIOS/fd.asm
  3. 15
      Source/HBIOS/ide.asm
  4. 16
      Source/HBIOS/imm.asm
  5. 5
      Source/HBIOS/kbd.asm
  6. 17
      Source/HBIOS/lcd.asm
  7. 17
      Source/HBIOS/lpt.asm
  8. 16
      Source/HBIOS/ppa.asm
  9. 8
      Source/HBIOS/util.asm
  10. 2
      Source/ver.inc
  11. 2
      Source/ver.lib

2
Source/HBIOS/ez80cpudrv.asm

@ -234,6 +234,8 @@ DELAY:
RET RET
VDELAY: VDELAY:
EZ80_DELAY
EZ80_DELAY
EZ80_DELAY EZ80_DELAY
DEC DE DEC DE
LD A,D LD A,D

1
Source/HBIOS/fd.asm

@ -914,6 +914,7 @@ FD_DETECT2:
; A FLOATING BUS. ; A FLOATING BUS.
CALL DLY32 ; WAIT A BIT CALL DLY32 ; WAIT A BIT
LD C,FDC_MSR ; POINT TO MSR PORT LD C,FDC_MSR ; POINT TO MSR PORT
EZ80_IO
IN A,(C) ; READ USING (C) FORM OF INPUT IN A,(C) ; READ USING (C) FORM OF INPUT
;CALL PC_SPACE ; *DEBUG* ;CALL PC_SPACE ; *DEBUG*
;CALL PRTHEXBYTE ; *DEBUG* ;CALL PRTHEXBYTE ; *DEBUG*

15
Source/HBIOS/ide.asm

@ -1598,8 +1598,19 @@ IDE_WAIT001:
LD C,(IY+IDE_IOBASE) LD C,(IY+IDE_IOBASE)
LD B,8 ; NUMBER OF REGISTERS TO CHECK LD B,8 ; NUMBER OF REGISTERS TO CHECK
IDE_WAIT002: IDE_WAIT002:
EZ80_IO
IN A,(C) ; GET REGISTER VALUE
; THE EZ80_IO ROUTINE SEEMS TO ALWAYS RETURN $00 FOR UNOCCUPIED
; PORTS. THAT CAUSES AN INORDINATE DELAY HERE, SO WE HANDLE
; 16 BIT I/O OURSELVES.
;;;EZ80_IO
;;;IN A,(C) ; GET REGISTER VALUE
PUSH BC ; SAVE LOOP CONTROL
LD B,$FF ; MSB FOR I/O
IN A,(C) ; READ PORT
POP BC ; RESTORE LOOP CONTROL
;CALL PC_SPACE ;CALL PC_SPACE
;CALL PRTHEXBYTE ;CALL PRTHEXBYTE
OR A ; SET FLAGS OR A ; SET FLAGS

16
Source/HBIOS/imm.asm

@ -239,6 +239,7 @@ IMM_DETECT:
ADD A,IMM_IOSETUP ; BUMP TO SETUP PORT ADD A,IMM_IOSETUP ; BUMP TO SETUP PORT
LD C,A ; MOVE TO C FOR I/O LD C,A ; MOVE TO C FOR I/O
LD A,$82 ; CONFIG A OUT, B IN, C OUT LD A,$82 ; CONFIG A OUT, B IN, C OUT
EZ80_IO
OUT (C),A ; DO IT OUT (C),A ; DO IT
CALL DELAY ; BRIEF DELAY FOR GOOD MEASURE CALL DELAY ; BRIEF DELAY FOR GOOD MEASURE
#ENDIF #ENDIF
@ -479,6 +480,7 @@ IMM_GEOM:
; ;
IMM_WRITEDATA: IMM_WRITEDATA:
LD C,(IY+IMM_IOBASE) ; DATA PORT IS AT IOBASE LD C,(IY+IMM_IOBASE) ; DATA PORT IS AT IOBASE
EZ80_IO
OUT (C),A ; WRITE THE BYTE OUT (C),A ; WRITE THE BYTE
;CALL DELAY ; IS THIS NEEDED??? ;CALL DELAY ; IS THIS NEEDED???
RET ; DONE RET ; DONE
@ -501,6 +503,7 @@ IMM_WRITECTRL:
LD C,(IY+IMM_IOBASE) ; GET BASE IO ADDRESS LD C,(IY+IMM_IOBASE) ; GET BASE IO ADDRESS
INC C ; BUMP TO CONTROL PORT INC C ; BUMP TO CONTROL PORT
INC C INC C
EZ80_IO
OUT (C),A ; WRITE TO CONTROL PORT OUT (C),A ; WRITE TO CONTROL PORT
;CALL DELAY ; IS THIS NEEDED? ;CALL DELAY ; IS THIS NEEDED?
RET ; DONE RET ; DONE
@ -519,6 +522,7 @@ IMM_WRITECTRL:
IMM_READSTATUS: IMM_READSTATUS:
LD C,(IY+IMM_IOBASE) ; IOBASE TO C LD C,(IY+IMM_IOBASE) ; IOBASE TO C
INC C ; BUMP TO STATUS PORT INC C ; BUMP TO STATUS PORT
EZ80_IO
IN A,(C) ; READ IT IN A,(C) ; READ IT
; ;
#IF (IMMMODE == IMMMODE_MG014) #IF (IMMMODE == IMMMODE_MG014)
@ -963,9 +967,11 @@ IMM_GETBLOCK:
; ;
IMM_GETBLOCK1: IMM_GETBLOCK1:
EXX ; ALT REGS EXX ; ALT REGS
EZ80_IO
OUT (C),D ; SEND FIRST CLOCK OUT (C),D ; SEND FIRST CLOCK
IMM_GETBLOCK_A .EQU $+1
EZ80_IO
IN A,($FF) ; GET LOW NIBBLE IN A,($FF) ; GET LOW NIBBLE
IMM_GETBLOCK_A .EQU $-1
#IF (IMMMODE == IMMMODE_MG014) #IF (IMMMODE == IMMMODE_MG014)
AND $0F ; RELEVANT BITS ONLY AND $0F ; RELEVANT BITS ONLY
ADD A,MG014_STATMAPLO & $FF ; LOW BYTE OF MAP PTR ADD A,MG014_STATMAPLO & $FF ; LOW BYTE OF MAP PTR
@ -981,9 +987,11 @@ IMM_GETBLOCK_A .EQU $+1
RLCA ; MOVE TO LOW NIBBLE RLCA ; MOVE TO LOW NIBBLE
LD L,A ; SAVE NIBBLE IN L LD L,A ; SAVE NIBBLE IN L
#ENDIF #ENDIF
EZ80_IO
OUT (C),E ; SEND SECOND CLOCK OUT (C),E ; SEND SECOND CLOCK
IMM_GETBLOCK_B .EQU $+1
EZ80_IO
IN A,($FF) ; GET HIGH NIBBLE IN A,($FF) ; GET HIGH NIBBLE
IMM_GETBLOCK_B .EQU $-1
#IF (IMMMODE == IMMMODE_MG014) #IF (IMMMODE == IMMMODE_MG014)
AND $0F ; RELEVANT BITS ONLY AND $0F ; RELEVANT BITS ONLY
ADD A,MG014_STATMAPHI & $FF ; HIGH BYTE OF MAP PTR ADD A,MG014_STATMAPHI & $FF ; HIGH BYTE OF MAP PTR
@ -1079,13 +1087,17 @@ IMM_PUTBLOCK:
IMM_PUTBLOCK1: IMM_PUTBLOCK1:
LD A,(DE) ; GET NEXT BYTE LD A,(DE) ; GET NEXT BYTE
IMM_PUTBLOCK_A .EQU $+1 IMM_PUTBLOCK_A .EQU $+1
EZ80_IO
OUT ($FF),A ; PUT ON BUS OUT ($FF),A ; PUT ON BUS
INC DE ; INCREMENT BUF POS INC DE ; INCREMENT BUF POS
EZ80_IO
OUT (C),H ; FIRST CLOCK OUT (C),H ; FIRST CLOCK
LD A,(DE) ; GET NEXT BYTE LD A,(DE) ; GET NEXT BYTE
IMM_PUTBLOCK_B .EQU $+1 IMM_PUTBLOCK_B .EQU $+1
EZ80_IO
OUT ($FF),A ; PUT ON BUS OUT ($FF),A ; PUT ON BUS
INC DE ; INCREMENT BUF POS INC DE ; INCREMENT BUF POS
EZ80_IO
OUT (C),L ; SECOND CLOCK OUT (C),L ; SECOND CLOCK
DJNZ IMM_PUTBLOCK1 ; LOOP DJNZ IMM_PUTBLOCK1 ; LOOP
RET ; DONE RET ; DONE

5
Source/HBIOS/kbd.asm

@ -169,6 +169,7 @@ KBD_IST:
; A=0, Z SET FOR NOTHING PENDING, OTHERWISE DATA PENDING ; A=0, Z SET FOR NOTHING PENDING, OTHERWISE DATA PENDING
; ;
LD C,(IY+KBD_ST) ; STATUS PORT LD C,(IY+KBD_ST) ; STATUS PORT
EZ80_IO
IN A,(C) ; GET STATUS IN A,(C) ; GET STATUS
AND $01 ; ISOLATE INPUT PENDING BIT AND $01 ; ISOLATE INPUT PENDING BIT
RET RET
@ -180,6 +181,7 @@ KBD_OST:
; A=0, Z SET FOR NOT READY, OTHERWISE READY TO WRITE ; A=0, Z SET FOR NOT READY, OTHERWISE READY TO WRITE
; ;
LD C,(IY+KBD_ST) ; STATUS PORT LD C,(IY+KBD_ST) ; STATUS PORT
EZ80_IO
IN A,(C) ; GET STATUS IN A,(C) ; GET STATUS
AND $02 ; ISOLATE OUTPUT EMPTY BIT AND $02 ; ISOLATE OUTPUT EMPTY BIT
XOR $02 ; FLIP IT FOR APPROPRIATE RETURN VALUES XOR $02 ; FLIP IT FOR APPROPRIATE RETURN VALUES
@ -210,6 +212,7 @@ KBD_PUTCMD1:
CALL PRTHEXBYTE CALL PRTHEXBYTE
#ENDIF #ENDIF
LD C,(IY+KBD_CMD) ; COMMAND PORT LD C,(IY+KBD_CMD) ; COMMAND PORT
EZ80_IO
OUT (C),A ; WRITE IT OUT (C),A ; WRITE IT
KBD_PUTCMD2: KBD_PUTCMD2:
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
@ -239,6 +242,7 @@ KBD_PUTDATA1:
CALL PRTHEXBYTE CALL PRTHEXBYTE
#ENDIF #ENDIF
LD C,(IY+KBD_DAT) ; DATA PORT LD C,(IY+KBD_DAT) ; DATA PORT
EZ80_IO
OUT (C),A ; WRITE IT OUT (C),A ; WRITE IT
KBD_PUTDATA2: KBD_PUTDATA2:
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
@ -259,6 +263,7 @@ KBD_GETDATA0:
RET RET
KBD_GETDATA1: KBD_GETDATA1:
LD C,(IY+KBD_DAT) ; DATA PORT LD C,(IY+KBD_DAT) ; DATA PORT
EZ80_IO
IN A,(C) ; GET THE DATA VALUE IN A,(C) ; GET THE DATA VALUE
#IF (KBDTRACE >= 2) #IF (KBDTRACE >= 2)
PUSH AF PUSH AF

17
Source/HBIOS/lcd.asm

@ -42,14 +42,17 @@ LCD_PREINIT:
; RESET LCD CONTROLLER, DELAYS ARE FIXED, BUSY FLAG ; RESET LCD CONTROLLER, DELAYS ARE FIXED, BUSY FLAG
; CANNOT BE USED YET, CONTROLLER MAY NOT EXIST! ; CANNOT BE USED YET, CONTROLLER MAY NOT EXIST!
LD A,LCD_FUNC_SET | %11000 LD A,LCD_FUNC_SET | %11000
EZ80_IO
OUT (LCD_FUNC),A OUT (LCD_FUNC),A
LD DE,50000/16 ; WAIT >40MS, WE USE 50MS LD DE,50000/16 ; WAIT >40MS, WE USE 50MS
CALL VDELAY ; DO IT CALL VDELAY ; DO IT
LD A,LCD_FUNC_SET | %11000 LD A,LCD_FUNC_SET | %11000
EZ80_IO
OUT (LCD_FUNC),A OUT (LCD_FUNC),A
LD DE,5000/16 ; WAIT >4.1MS, WE USE 5MS LD DE,5000/16 ; WAIT >4.1MS, WE USE 5MS
CALL VDELAY ; DO IT CALL VDELAY ; DO IT
LD A,LCD_FUNC_SET | %11000 LD A,LCD_FUNC_SET | %11000
EZ80_IO
OUT (LCD_FUNC),A OUT (LCD_FUNC),A
LD DE,5000/16 ; WAIT >4.1MS, WE USE 5MS LD DE,5000/16 ; WAIT >4.1MS, WE USE 5MS
CALL VDELAY ; DO IT CALL VDELAY ; DO IT
@ -78,7 +81,7 @@ LCD_PREINIT:
CALL LCD_GOTORC CALL LCD_GOTORC
LD HL,LCD_CPU LD HL,LCD_CPU
LD A,(HB_CPUTYPE) ; GET CPU TYPE LD A,(HB_CPUTYPE) ; GET CPU TYPE
RRCA ; WORD OFFSET
RLCA ; WORD OFFSET
CALL ADDHLA ; ADD OFFSET CALL ADDHLA ; ADD OFFSET
LD E,(HL) ; GET LSB LD E,(HL) ; GET LSB
INC HL ; BUMP INC HL ; BUMP
@ -316,14 +319,18 @@ LCD_DETECT_Z:
LCD_DETECT_PASS: LCD_DETECT_PASS:
CALL LCD_DELAY ; WAIT CALL LCD_DELAY ; WAIT
LD A,LCD_FUNC_DDADR LD A,LCD_FUNC_DDADR
EZ80_IO
OUT (LCD_FUNC),A ; POINT TO FIRST BYTE OUT (LCD_FUNC),A ; POINT TO FIRST BYTE
CALL LCD_DELAY ; WAIT CALL LCD_DELAY ; WAIT
LD A,C ; TEST VALUE LD A,C ; TEST VALUE
EZ80_IO
OUT (LCD_DATA),A ; WRITE IT OUT (LCD_DATA),A ; WRITE IT
CALL LCD_DELAY ; WAIT CALL LCD_DELAY ; WAIT
LD A,LCD_FUNC_DDADR LD A,LCD_FUNC_DDADR
EZ80_IO
OUT (LCD_FUNC),A ; POINT TO FIRST BYTE OUT (LCD_FUNC),A ; POINT TO FIRST BYTE
CALL LCD_DELAY CALL LCD_DELAY
EZ80_IO
IN A,(LCD_DATA) ; GET VALUE IN A,(LCD_DATA) ; GET VALUE
CP C ; AS WRITTEN? CP C ; AS WRITTEN?
RET RET
@ -340,10 +347,12 @@ LCD_DELAY:
LCD_OUTF: LCD_OUTF:
PUSH AF ; SAVE CODE PUSH AF ; SAVE CODE
LCD_OUTF1: LCD_OUTF1:
EZ80_IO
IN A,(LCD_STAT) ; GET STATUS IN A,(LCD_STAT) ; GET STATUS
AND $80 ; ISOLATE BUSY FLAG AND $80 ; ISOLATE BUSY FLAG
JR NZ,LCD_OUTF1 ; LOOP TILL NOT BUSY JR NZ,LCD_OUTF1 ; LOOP TILL NOT BUSY
POP AF ; RECOVER CODE POP AF ; RECOVER CODE
EZ80_IO
OUT (LCD_FUNC),A ; SEND IT OUT (LCD_FUNC),A ; SEND IT
RET ; DONE RET ; DONE
; ;
@ -363,10 +372,12 @@ LCD_OUTFS:
LCD_OUTD: LCD_OUTD:
PUSH AF ; SAVE BYTE PUSH AF ; SAVE BYTE
LCD_OUTD1: LCD_OUTD1:
EZ80_IO
IN A,(LCD_STAT) ; GET STATUS IN A,(LCD_STAT) ; GET STATUS
AND $80 ; ISOLATE BUSY FLAG AND $80 ; ISOLATE BUSY FLAG
JR NZ,LCD_OUTD1 ; LOOP TILL NOT BUSY JR NZ,LCD_OUTD1 ; LOOP TILL NOT BUSY
POP AF ; RECOVER BYTE POP AF ; RECOVER BYTE
EZ80_IO
OUT (LCD_DATA),A ; SEND IT OUT (LCD_DATA),A ; SEND IT
RET ; DONE RET ; DONE
; ;
@ -397,10 +408,12 @@ LCD_OUTDS:
; GET DATA BYTE INTO A ; GET DATA BYTE INTO A
; ;
LCD_IND: LCD_IND:
EZ80_IO
IN A,(LCD_STAT) ; GET STATUS IN A,(LCD_STAT) ; GET STATUS
AND $80 ; ISOLATE BUSY FLAG AND $80 ; ISOLATE BUSY FLAG
JR NZ,LCD_IND ; LOOP TILL NOT BUSY JR NZ,LCD_IND ; LOOP TILL NOT BUSY
POP AF ; RECOVER BYTE POP AF ; RECOVER BYTE
EZ80_IO
IN A,(LCD_DATA) ; GET IT IN A,(LCD_DATA) ; GET IT
RET ; DONE RET ; DONE
; ;
@ -488,7 +501,7 @@ LCD_CPU_Z180 .DB "Z180",0
LCD_CPU_Z180K .DB "Z180-K",0 LCD_CPU_Z180K .DB "Z180-K",0
LCD_CPU_Z180N .DB "Z180-N",0 LCD_CPU_Z180N .DB "Z180-N",0
LCD_CPU_Z280 .DB "Z280",0 LCD_CPU_Z280 .DB "Z280",0
LCD_CPU_EZ80 .DB "EZ80",0
LCD_CPU_EZ80 .DB "eZ80",0
; ;
LCD_MSGTBL: LCD_MSGTBL:
.DW LCD_MSG_LDR_SEL .DW LCD_MSG_LDR_SEL

17
Source/HBIOS/lpt.asm

@ -168,6 +168,7 @@ LPT_OUT:
CALL LPT_OST ; READY TO SEND? CALL LPT_OST ; READY TO SEND?
JR Z,LPT_OUT ; LOOP IF NOT JR Z,LPT_OUT ; LOOP IF NOT
LD C,(IY+3) ; PORT 0 (DATA) LD C,(IY+3) ; PORT 0 (DATA)
EZ80_IO
OUT (C),E ; OUTPUT DATA TO PORT OUT (C),E ; OUTPUT DATA TO PORT
#IF (LPTMODE == LPTMODE_SPP) #IF (LPTMODE == LPTMODE_SPP)
LD A,%00001101 ; SELECT & STROBE, LEDS OFF LD A,%00001101 ; SELECT & STROBE, LEDS OFF
@ -185,6 +186,7 @@ LPT_OUT:
#IF (LPTMODE == LPTMODE_S100) #IF (LPTMODE == LPTMODE_S100)
DEC C ; PUT CONTROL PORT IN C DEC C ; PUT CONTROL PORT IN C
#ENDIF #ENDIF
EZ80_IO
OUT (C),A ; OUTPUT DATA TO PORT OUT (C),A ; OUTPUT DATA TO PORT
CALL DELAY CALL DELAY
#IF (LPTMODE == LPTMODE_SPP) #IF (LPTMODE == LPTMODE_SPP)
@ -196,6 +198,7 @@ LPT_OUT:
#IF (LPTMODE == LPTMODE_S100) #IF (LPTMODE == LPTMODE_S100)
LD A,%11111111 ; STROBE LD A,%11111111 ; STROBE
#ENDIF #ENDIF
EZ80_IO
OUT (C),A ; OUTPUT DATA TO PORT OUT (C),A ; OUTPUT DATA TO PORT
CALL DELAY CALL DELAY
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
@ -218,6 +221,7 @@ LPT_OST:
#IF (LPTMODE == LPTMODE_S100) #IF (LPTMODE == LPTMODE_S100)
DEC C ; SELECT STATUS PORT DEC C ; SELECT STATUS PORT
#ENDIF #ENDIF
EZ80_IO
IN A,(C) ; GET STATUS INFO IN A,(C) ; GET STATUS INFO
#IF (LPTMODE == LPTMODE_SPP) #IF (LPTMODE == LPTMODE_SPP)
AND %10000000 ; ISOLATE /BUSY AND %10000000 ; ISOLATE /BUSY
@ -245,13 +249,16 @@ LPT_INITDEVX:
; ;
LD C,(IY+3) ; PORT 0 (DATA) LD C,(IY+3) ; PORT 0 (DATA)
XOR A ; CLEAR ACCUM XOR A ; CLEAR ACCUM
EZ80_IO
OUT (C),A ; SEND IT OUT (C),A ; SEND IT
INC C ; BUMP TO INC C ; BUMP TO
INC C ; ... PORT 2 INC C ; ... PORT 2
LD A,%00001000 ; SELECT AND ASSERT RESET, LEDS OFF LD A,%00001000 ; SELECT AND ASSERT RESET, LEDS OFF
EZ80_IO
OUT (C),A ; SEND IT OUT (C),A ; SEND IT
CALL LDELAY ; HALF SECOND DELAY CALL LDELAY ; HALF SECOND DELAY
LD A,%00001100 ; SELECT AND DEASSERT RESET, LEDS OFF LD A,%00001100 ; SELECT AND DEASSERT RESET, LEDS OFF
EZ80_IO
OUT (C),A ; SEND IT OUT (C),A ; SEND IT
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
RET ; RETURN RET ; RETURN
@ -263,12 +270,15 @@ LPT_INITDEVX:
ADD A,3 ; BUMP TO CONTROL PORT ADD A,3 ; BUMP TO CONTROL PORT
LD C,A ; MOVE TO C FOR I/O LD C,A ; MOVE TO C FOR I/O
LD A,$82 ; CONFIG A OUT, B IN, C OUT LD A,$82 ; CONFIG A OUT, B IN, C OUT
EZ80_IO
OUT (C),A ; DO IT OUT (C),A ; DO IT
DEC C ; OUTPUT PORT DEC C ; OUTPUT PORT
LD A,$81 ; STROBE OFF, SELECT ON, RES ON, LED ON LD A,$81 ; STROBE OFF, SELECT ON, RES ON, LED ON
EZ80_IO
OUT (C),A ; SEND IT OUT (C),A ; SEND IT
CALL LDELAY ; HALF SECOND DELAY CALL LDELAY ; HALF SECOND DELAY
LD A,$05 ; STROBE OFF, SELECT ON, RES OFF, LED OFF LD A,$05 ; STROBE OFF, SELECT ON, RES OFF, LED OFF
EZ80_IO
OUT (C),A ; SEND IT OUT (C),A ; SEND IT
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
RET ; RETURN RET ; RETURN
@ -278,6 +288,7 @@ LPT_INITDEVX:
LD C,(IY+3) ; BASE PORT LD C,(IY+3) ; BASE PORT
DEC C ; DEC TO CONTROL PORT DEC C ; DEC TO CONTROL PORT
LD A,$FF ; INIT VALUE LD A,$FF ; INIT VALUE
EZ80_IO
OUT (C),A ; DO IT OUT (C),A ; DO IT
RET ; RETURN RET ; RETURN
#ENDIF #ENDIF
@ -330,6 +341,7 @@ LPT_DETECT2:
INC C ; PORT C FOR I/O INC C ; PORT C FOR I/O
INC C ; ... INC C ; ...
XOR A ; DEFAULT VALUE (TRI-STATE OFF) XOR A ; DEFAULT VALUE (TRI-STATE OFF)
EZ80_IO
OUT (C),A ; SEND IT OUT (C),A ; SEND IT
; ;
;IN A,(C) ; READ IT ;IN A,(C) ; READ IT
@ -345,7 +357,9 @@ LPT_DETECT2:
DEC C ; BACK TO BASE PORT DEC C ; BACK TO BASE PORT
DEC C ; ... DEC C ; ...
LD A,$A5 ; TEST VALUE LD A,$A5 ; TEST VALUE
EZ80_IO
OUT (C),A ; SEND IT OUT (C),A ; SEND IT
EZ80_IO
IN A,(C) ; READ IT BACK IN A,(C) ; READ IT BACK
CP $A5 ; CORRECT? CP $A5 ; CORRECT?
RET ; RETURN (ZF SET CORRECTLY) RET ; RETURN (ZF SET CORRECTLY)
@ -366,11 +380,14 @@ LPT_DETECT:
ADD A,3 ; BUMP TO CONTROL PORT ADD A,3 ; BUMP TO CONTROL PORT
LD C,A ; PUT IN C LD C,A ; PUT IN C
LD A,$80 ; SET PORT A TO WRITE LD A,$80 ; SET PORT A TO WRITE
EZ80_IO
OUT (C),A ; WRITE IT OUT (C),A ; WRITE IT
; ;
LD C,(IY+3) ; PPI PORT A LD C,(IY+3) ; PPI PORT A
LD A,$A5 ; TEST VALUE LD A,$A5 ; TEST VALUE
EZ80_IO
OUT (C),A ; PUSH VALUE TO PORT OUT (C),A ; PUSH VALUE TO PORT
EZ80_IO
IN A,(C) ; GET PORT VALUE IN A,(C) ; GET PORT VALUE
#IF (LPTTRACE >= 3) #IF (LPTTRACE >= 3)
CALL PC_SPACE CALL PC_SPACE

16
Source/HBIOS/ppa.asm

@ -243,6 +243,7 @@ PPA_DETECT:
ADD A,PPA_IOSETUP ; BUMP TO SETUP PORT ADD A,PPA_IOSETUP ; BUMP TO SETUP PORT
LD C,A ; MOVE TO C FOR I/O LD C,A ; MOVE TO C FOR I/O
LD A,$82 ; CONFIG A OUT, B IN, C OUT LD A,$82 ; CONFIG A OUT, B IN, C OUT
EZ80_IO
OUT (C),A ; DO IT OUT (C),A ; DO IT
CALL DELAY ; BRIEF DELAY FOR GOOD MEASURE CALL DELAY ; BRIEF DELAY FOR GOOD MEASURE
#ENDIF #ENDIF
@ -476,6 +477,7 @@ PPA_GEOM:
; ;
PPA_WRITEDATA: PPA_WRITEDATA:
LD C,(IY+PPA_IOBASE) ; DATA PORT IS AT IOBASE LD C,(IY+PPA_IOBASE) ; DATA PORT IS AT IOBASE
EZ80_IO
OUT (C),A ; WRITE THE BYTE OUT (C),A ; WRITE THE BYTE
;CALL DELAY ; IS THIS NEEDED??? ;CALL DELAY ; IS THIS NEEDED???
RET ; DONE RET ; DONE
@ -493,6 +495,7 @@ PPA_WRITECTRL:
LD C,(IY+PPA_IOBASE) ; GET BASE IO ADDRESS LD C,(IY+PPA_IOBASE) ; GET BASE IO ADDRESS
INC C ; BUMP TO CONTROL PORT INC C ; BUMP TO CONTROL PORT
INC C INC C
EZ80_IO
OUT (C),A ; WRITE TO CONTROL PORT OUT (C),A ; WRITE TO CONTROL PORT
;CALL DELAY ; IS THIS NEEDED? ;CALL DELAY ; IS THIS NEEDED?
RET ; DONE RET ; DONE
@ -511,6 +514,7 @@ PPA_WRITECTRL:
PPA_READSTATUS: PPA_READSTATUS:
LD C,(IY+PPA_IOBASE) ; IOBASE TO C LD C,(IY+PPA_IOBASE) ; IOBASE TO C
INC C ; BUMP TO STATUS PORT INC C ; BUMP TO STATUS PORT
EZ80_IO
IN A,(C) ; READ IT IN A,(C) ; READ IT
; ;
#IF (PPAMODE == PPAMODE_MG014 #IF (PPAMODE == PPAMODE_MG014
@ -855,9 +859,11 @@ PPA_GETBLOCK:
; ;
PPA_GETBLOCK1: PPA_GETBLOCK1:
EXX ; ALT REGS EXX ; ALT REGS
EZ80_IO
OUT (C),D ; SEND FIRST CLOCK OUT (C),D ; SEND FIRST CLOCK
PPA_GETBLOCK_A .EQU $+1
EZ80_IO
IN A,($FF) ; GET HIGH NIBBLE IN A,($FF) ; GET HIGH NIBBLE
PPA_GETBLOCK_A .EQU $-1
#IF (PPAMODE == PPAMODE_MG014) #IF (PPAMODE == PPAMODE_MG014)
AND $0F ; RELEVANT BITS ONLY AND $0F ; RELEVANT BITS ONLY
ADD A,MG014_STATMAPHI & $FF ; HIGH BYTE OF MAP PTR ADD A,MG014_STATMAPHI & $FF ; HIGH BYTE OF MAP PTR
@ -869,9 +875,11 @@ PPA_GETBLOCK_A .EQU $+1
AND $F0 ; RELEVANT BITS ONLY AND $F0 ; RELEVANT BITS ONLY
LD L,A ; SAVE NIBBLE IN L LD L,A ; SAVE NIBBLE IN L
#ENDIF #ENDIF
EZ80_IO
OUT (C),E ; SEND SECOND CLOCK OUT (C),E ; SEND SECOND CLOCK
PPA_GETBLOCK_B .EQU $+1
EZ80_IO
IN A,($FF) ; GET LOW NIBBLE IN A,($FF) ; GET LOW NIBBLE
PPA_GETBLOCK_B .EQU $-1
#IF (PPAMODE == PPAMODE_MG014) #IF (PPAMODE == PPAMODE_MG014)
AND $0F ; RELEVANT BITS ONLY AND $0F ; RELEVANT BITS ONLY
ADD A,MG014_STATMAPLO & $FF ; LOW BYTE OF MAP PTR ADD A,MG014_STATMAPLO & $FF ; LOW BYTE OF MAP PTR
@ -964,9 +972,12 @@ PPA_PUTBLOCK:
PPA_PUTBLOCK1: PPA_PUTBLOCK1:
LD A,(DE) ; GET NEXT BYTE LD A,(DE) ; GET NEXT BYTE
PPA_PUTBLOCK_A .EQU $+1 PPA_PUTBLOCK_A .EQU $+1
EZ80_IO
OUT ($FF),A ; PUT ON BUS OUT ($FF),A ; PUT ON BUS
INC DE ; INCREMENT BUF POS INC DE ; INCREMENT BUF POS
EZ80_IO
OUT (C),H ; FIRST CLOCK OUT (C),H ; FIRST CLOCK
EZ80_IO
OUT (C),L ; SECOND CLOCK OUT (C),L ; SECOND CLOCK
DJNZ PPA_PUTBLOCK1 ; LOOP DJNZ PPA_PUTBLOCK1 ; LOOP
RET ; DONE RET ; DONE
@ -1147,6 +1158,7 @@ PPA_INITDEV:
ADD A,PPA_IOSETUP ; BUMP TO SETUP PORT ADD A,PPA_IOSETUP ; BUMP TO SETUP PORT
LD C,A ; MOVE TO C FOR I/O LD C,A ; MOVE TO C FOR I/O
LD A,$82 ; CONFIG A OUT, B IN, C OUT LD A,$82 ; CONFIG A OUT, B IN, C OUT
EZ80_IO
OUT (C),A ; DO IT OUT (C),A ; DO IT
CALL DELAY ; SHORT DELAY FOR BUS SETTLE CALL DELAY ; SHORT DELAY FOR BUS SETTLE
#ENDIF #ENDIF

8
Source/HBIOS/util.asm

@ -684,7 +684,13 @@ DLY16: CALL DLY8 ; 432 400
DLY8: CALL DLY4 ; 216 200 DLY8: CALL DLY4 ; 216 200
DLY4: CALL DLY2 ; 108 100 DLY4: CALL DLY2 ; 108 100
DLY2: CALL DLY1 ; 54 50 DLY2: CALL DLY1 ; 54 50
DLY1: RET ; 27 25
DLY1:
#IF (CPUFAM == CPU_EZ80)
NOP
NOP
NOP
#ENDIF
RET ; 27 25
; ;
; MULTIPLY 8-BIT VALUES ; MULTIPLY 8-BIT VALUES
; IN: MULTIPLY H BY E ; IN: MULTIPLY H BY E

2
Source/ver.inc

@ -2,7 +2,7 @@
#DEFINE RMN 5 #DEFINE RMN 5
#DEFINE RUP 0 #DEFINE RUP 0
#DEFINE RTP 0 #DEFINE RTP 0
#DEFINE BIOSVER "3.5.0-dev.86"
#DEFINE BIOSVER "3.5.0-dev.87"
#define rmj RMJ #define rmj RMJ
#define rmn RMN #define rmn RMN
#define rup RUP #define rup RUP

2
Source/ver.lib

@ -3,5 +3,5 @@ rmn equ 5
rup equ 0 rup equ 0
rtp equ 0 rtp equ 0
biosver macro biosver macro
db "3.5.0-dev.86"
db "3.5.0-dev.87"
endm endm

Loading…
Cancel
Save