tap fixes

This commit is contained in:
Tolik 2025-10-21 00:37:14 +10:00
parent 8246c09cf5
commit 029da1a946
2 changed files with 173 additions and 116 deletions

View File

@ -1395,28 +1395,31 @@ L04AA: CALL L24FB ; routine SCANNING to evaluate expression.
RET ; return.
ELSE ;---------------------------------------------------------------------
NEW_TAP.MAIN: ; ¤®áâ ñ¬ ¯ à ¬¥âàë
.MAIN: ; áâ ¢¨¬ SYS_PAGE
PUSH AF
LD C,SLOT3
IN B,(C)
LD A,SYS_PAGE
OUT (C),A
; ¡¥àñ¬ 㪠§ â¥«ì ­  ⥪ã饥 ¯®«®¦¥­¨¥ ¢ ¡«®ª¥ ¨ ¢â몠¥¬ ¡«®ª
EXX
; LD HL,(SYS_PAGE.TAP_RAM_BLK)
; LD H, high SYS_PAGE.RAM_TABLE
; LD A,(HL)
LD A,(SYS_PAGE.TAP_RAM_BLK)
;!TODO check error - 0 or FF
LD HL,(SYS_PAGE.TAP_RAM_POINT)
EX AF,AF'
NEW_TAP: ; ¤®áâ ñ¬ ¯ à ¬¥âàë
; áâ ¢¨¬ SYS_PAGE
PUSH AF
;
LD A,#0F ; make the border white and mic off.
OUT (BorderColor),A ; output to port.
;
LD C,SLOT3
IN B,(C)
IN A,(SLOT2)
LD H,A
.skip: LD A,SYS_PAGE
OUT (C),A
; ¡¥àñ¬ 㪠§ â¥«ì ­  ⥪ã饥 ¯®«®¦¥­¨¥ ¢ ¡«®ª¥ ¨ ¢â몠¥¬ ¡«®ª
EXX
; LD HL,(SYS_PAGE.TAP_FULL_SIZE)
; LD A,(SYS_PAGE.TAP_FULL_SIZE + 2)
; OR H
; IN A,(SLOT2)
; LD C,A
LD A,(SYS_PAGE.TAP_RAM_BLK)
INC A
JP NEW_TAP2.MAIN
;
OUT (C),B
POP AF
JP NEW_TAP.MAIN2
BLOCK #04C2-$,#FF
_mInfoBLOCK #04C2-$,#FF
ENDIF
;------------------------------------------------------------------------------
@ -1926,121 +1929,175 @@ L05ED: INC B ; increment the time-out counter.
ELSE ;---------------------------------------------------------------------
L0556:
NEW_TAP: DI
;JR NC,.Error ; ­¥ ¯®¤¤¥à¦¨¢ ¥âáï Verify
RET NC
NEW_TAP2: LD HL,L053F ; Address: SA/LD-RET
PUSH HL ; is saved on stack as terminating routine.
RET NC ; !FIXIT ­¥ ¯®¤¤¥à¦¨¢ ¥âáï Verify
;
.next_blk: DI
EXX
PUSH BC
PUSH DE
PUSH HL
EXX
CALL NEW_TAP.MAIN
;LD L,1 ; ¬ àª¥à ¡«®ª  ¯à®¯ãáª/ç⥭¨¥ - 0/1
CALL NEW_TAP
;
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
INC HL
LD (SYS_PAGE.TAP_RAM_POINT),HL
EX AF,AF' ; AF ------------------v
LD A,SYS_PAGE
OUT (SLOT3),A
LD (SYS_PAGE.TAP_RAM_POINT),HL
EXX
OUT (C),B
POP HL
POP DE
POP BC
EXX
LD DE,0
OUT (C),B
EX AF,AF'
EI
.shared_Exit: EX AF,AF' ; AF ------------------^
;LD DE,0
;LD A,1
RET
;
;!FIXIT ᤥ« âì ¯¥à¥¬®âªã ¡«®ª 
.error_size: POP AF
.error_end_tap: XOR A
INC A
RET
;
.MAIN2: PUSH DE ; à §¬¥à ¤ ­­ëå
; ®¡à ¡®âª  ¡«®ª  TAP
EX AF,AF'
OUT (SLOT3),A
; ¡¥àñ¬ ¤«¨­ã ¡«®ª 
EXX
LD A,(HL)
INC HL
LD D,(HL)
INC HL
LD E,(HL)
INC HL
EX AF,AF'
; ¯à®¢¥à塞 ⨯ ¡«®ª  ¨ âà¥¡ã¥¬ë© ¡«®ª
CP E
EX AF,AF'
LD E,A
EX AF,AF'
DEC DE
DEC DE
EXX
JR NZ,.skipThatBlock
.skipThatBlock: ;!FIXIT
; ¢®ááâ ­ ¢«¨¢ ¥¬ áâà ­¨æã ¯®«ì§®¢ â¥«ï
EX AF,AF'
IN A,(SLOT3)
EX AF,AF'
OUT (C),B
; ¯à®¢¥à塞 ᮮ⢥âá⢨¥ à §¬¥à  ¡«®ª  § ¯à è¨¢ ¥¬®¬ã
EXX
POP BC
EX DE,HL
AND A
SBC HL,BC
EX DE,HL
SCF
CCF
RET NZ
;
;EXX
.LoopTAP: EX AF,AF'
OUT (SLOT3),A
EX AF,AF'
LD A,(HL)
;CPI
INC HL
DEC BC
EXX
OUT (C),B
EXX
LD (IX),A
INC IX
LD A,H
OR L
JR NZ,.NoSetNewPage
;
;;;;;;;;;;;;;;;;;;;;
LD A,SYS_PAGE
OUT (SLOT3),A
;
LD HL,#C000
EXX
.SetNewPage: LD A,SYS_PAGE
OUT (SLOT3),A
EX AF,AF' ; AF ------------------v
; A = current page of ram block
LD HL,(SYS_PAGE.TAP_RAM_BLK)
LD H, high SYS_PAGE.RAM_TABLE
EX AF,AF'
LD A,(HL)
LD (SYS_PAGE.TAP_RAM_BLK),A
OUT (C),B
LD HL,#C000
EXX
OUT (C),B
EXX
CP #FF
JR NZ,.shared_Exit
; error
EX AF,AF' ; AF ------------------^
SCF
RET ; error
;
.MAIN: ;=======================================================
JP Z,.error_size
DEC A
;;;;;
OUT (SLOT2),A
LD L,A
LD H, high SYS_PAGE.RAM_TABLE
LD A,(HL)
;
LD HL,(SYS_PAGE.TAP_RAM_POINT)
RES 6,H
OUT (SLOT3),A
;IN A,(SLOT2)
;;;;;
;EX AF,AF' ; AF ------------------v
; EXX
; OUT (C),B
; EXX
; ;
; POP AF
; ; ®¡à ¡®âª  ¡«®ª  TAP
; EX AF,AF' ; AF ------------------v
; OUT (SLOT3),A
; ¡¥àñ¬ ¤«¨­ã ¡«®ª 
LD A,(HL)
INC HL
;
LD B,(HL)
INC HL
;
LD C,(HL)
INC HL
SET 6,H
EX AF,AF' ; AF ------------------^
EXX
OUT (C),B
RES 5,C
IN A,(SLOT2)
OUT (C),H
LD H,A
SET 5,C
LD L,1 ; ¬ àª¥à ¡«®ª  ¯à®¯ãáª/ç⥭¨¥ - 0/1
EXX
; ¯à®¢¥à塞 ⨯ ¡«®ª  ¨ âà¥¡ã¥¬ë© ¡«®ª
POP AF
CP C
; ZF = 0 ¥á«¨ ­ã¦­ë© ¡«®ª
EX AF,AF' ; AF ------------------v
LD C,A
EX AF,AF' ; AF ------------------^
DEC BC
DEC BC
;
EXX
CP #FF
JR NZ,.NotEnd
;
EX AF,AF;
LD A,B
OR C
RET NZ
EX AF,AF;
.NotEnd: EX AF,AF'
;;;;;;;;;;;;;;;;;;;;
;
.NoSetNewPage: LD A,B
OR C
JR NZ,.LoopTAP
; ZF = 0 ¥á«¨ ­ã¦­ë© ¡«®ª
LD A,H
JR Z,.ThatBlock
LD L,0 ; ¯à®¯ã᪠¡«®ª 
;LD E,A ; âà¥¡ã¥¬ë© ¡«®ª
.ThatBlock: EXX
; ¢®ááâ ­ ¢«¨¢ ¥¬ áâà ­¨æã ¯®«ì§®¢ â¥«ï
; EX AF,AF'
; IN A,(SLOT3)
EX AF,AF'
; ZF = 0 ¥á«¨ ­ã¦­ë© ¡«®ª
JR NZ,.normSize
; ¯à®¢¥à塞 ᮮ⢥âá⢨¥ à §¬¥à  ¡«®ª  § ¯à è¨¢ ¥¬®¬ã
EX HL,DE ; ( ¤à¥á ¢ à ¬¡«®ª¥ TAP) <-> (à §¬¥à ¢å®¤­®©)
AND A
SBC HL,BC ; (à §¬¥à ¢å®¤­®©) - (à §¬¥à ¨§ â ¯)
EX HL,DE ; (à §¬¥à ¤ ­­ëå) <-> ( ¤à¥á ¢ à ¬¡«®ª¥ TAP)
SCF
CCF
RET NZ ;!FIXIT ᤥ« âì ¯¥à¥¬®âªã ¡«®ª 
;
SCF
RET
.normSize: INC BC ; á ãçñ⮬ ¡ ©â  ª®­â஫쭮© áã¬¬ë ¢ ª®­æ¥ ¡«®ª  TAP
.LoopTAP: LD A,H
OR L
CALL Z,.SetNewPage
JR C,.error_end_tap
;
BLOCK #0605-$,#FF
EX AF,AF'
OUT (SLOT3),A
EX AF,AF'
LD A,(HL)
CPI
EXX
OUT (C),B
LD H,A
LD A,L
EXX
SCF
RET PO
AND A
JR Z,.LoopTAP ; skip write
EXX
;!FIXIT ¤®¡ ¢¨âì âãâ Verify
;LD A,H
;XOR (IX)
;RET NZ
;
LD (IX),H
EXX
INC IX
JR .LoopTAP
;=======================================================
_mInfoBLOCK #0605-$,#FF
ENDIF
;------------------------------------------------------------------------------

@ -1 +1 @@
Subproject commit a9cc74a9eba4044c35c930159bda0b0dde5d429b
Subproject commit 4da18d54c12e0f2ff4183be7a1cbf5882da1bd4f