From 5d912a7320bc9d49c7bd1eb28c264b2c7dc52abb Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Tue, 21 Oct 2025 22:22:07 +1000 Subject: [PATCH] always error if VERIFY --- SP__48.ASM | 156 ++++++++++++++++++++++------------------------------- 1 file changed, 63 insertions(+), 93 deletions(-) diff --git a/SP__48.ASM b/SP__48.ASM index 4e9258e..dbdea77 100644 --- a/SP__48.ASM +++ b/SP__48.ASM @@ -7,7 +7,7 @@ ; The Spectrum ROMs are copyright Amstrad, who have kindly given permission ; to reverse engineer and publish ROM disassemblies. - DEFINE NEW_TAP_PROC +; DEFINE NEW_TAP_PROC ; ===== ; NOTES ; ===== @@ -1397,10 +1397,10 @@ L04AA: CALL L24FB ; routine SCANNING to evaluate expression. ELSE ;--------------------------------------------------------------------- NEW_TAP: ; достаём параметры ; ставим SYS_PAGE - PUSH AF + ;RL E ; CF - verify/read + EX AF,AF' ; AF ------------------v ; - LD A,#0F ; make the border white and mic off. - OUT (BorderColor),A ; output to port. + ; LD C,SLOT3 IN B,(C) @@ -1410,13 +1410,13 @@ NEW_TAP: ; 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 + ; INC A + ; RET Z ; error, end TAP + ; DEC A + OUT (SLOT2),A + LD L,A + LD A,#0F ; make the border white and mic off. JP NEW_TAP2.MAIN ; _mInfoBLOCK #04C2-$,#FF @@ -1931,93 +1931,47 @@ L05ED: INC B ; increment the time-out counter. L0556: NEW_TAP2: LD HL,L053F ; Address: SA/LD-RET PUSH HL ; is saved on stack as terminating routine. - RET NC ; !FIXIT не поддерживается Verify + RET NC ; .next_blk: DI EXX PUSH BC PUSH DE PUSH HL - ;LD L,1 ; маркер блока пропуск/чтение - 0/1 CALL NEW_TAP ; EX AF,AF' ; AF ------------------v LD A,SYS_PAGE OUT (SLOT3),A - LD (SYS_PAGE.TAP_RAM_POINT),HL - EXX + EX AF,AF' ; AF ------------------^ + JR C,.save_HL + JR NZ,.no_save_HL +.save_HL: LD (SYS_PAGE.TAP_RAM_POINT),HL +.no_save_HL: EXX OUT (C),B POP HL POP DE - POP BC +.exit: POP BC EXX -.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 - ; -.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) +.MAIN: ; ; AF ------------------v + ;OUT (SLOT2),A + ; LD L,A + ; LD A,#0F ; make the border white and mic off. + OUT (BorderColor),A ; output to port. LD H, high SYS_PAGE.RAM_TABLE LD A,(HL) - LD (SYS_PAGE.TAP_RAM_BLK),A - 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 + SET 7,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 + ; обработка блока TAP ; берём длину блока LD A,(HL) INC HL - ; LD B,(HL) INC HL - ; LD C,(HL) INC HL SET 6,H @@ -2025,11 +1979,14 @@ NEW_TAP2: LD HL,L053F ; Address: SA/LD-RET EXX OUT (C),B RES 5,C + PUSH AF IN A,(SLOT2) OUT (C),H + CP #FF + JR Z,.exit LD H,A SET 5,C - LD L,1 ; маркер блока пропуск/чтение - 0/1 + LD L,1 ; маркер блока пропуск/чтение - 0/1 EXX ; проверяем тип блока и требуемый блок POP AF @@ -2043,15 +2000,12 @@ NEW_TAP2: LD HL,L053F ; Address: SA/LD-RET ; EXX ; ZF = 0 если нужный блок + EX AF,AF' ; AF ------------------v LD A,H + EX AF,AF' ; AF ------------------^ 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 ; проверяем соответствие размера блока запрашиваемому @@ -2064,14 +2018,30 @@ NEW_TAP2: LD HL,L053F ; Address: SA/LD-RET RET NZ ;!FIXIT сделать перемотку блока ; .normSize: INC BC ; с учётом байта контрольной суммы в конце блока TAP -.LoopTAP: LD A,H - OR L - CALL Z,.SetNewPage - JR C,.error_end_tap +.LoopTAP: BIT 7,H + JR NZ,.ok_HL ; - EX AF,AF' +.SetNewPage: LD A,SYS_PAGE + OUT (SLOT3),A + LD A,#C0 + OR H + LD H,A + EX AF,AF' ; AF ------------------v + ; A = current page of ram block + LD D, high SYS_PAGE.RAM_TABLE + LD E,A + LD A,(DE) + LD (SYS_PAGE.TAP_RAM_BLK),A + EXX + OUT (C),B + EXX + CP #FF + RET Z ; error + EX AF,AF' ; AF ------------------^ + ; +.ok_HL: EX AF,AF' ; AF ------------------v OUT (SLOT3),A - EX AF,AF' + EX AF,AF' ; AF ------------------^ LD A,(HL) CPI EXX @@ -2084,21 +2054,21 @@ NEW_TAP2: LD HL,L053F ; Address: SA/LD-RET AND A JR Z,.LoopTAP ; skip write EXX - ;!FIXIT добавить тут Verify - ;LD A,H - ;XOR (IX) - ;RET NZ - ; - LD (IX),H + ;RR E ; CF - verify/read + ;JR C,.noVerify + ;LD A,(IX) + ;XOR H + ;EXX + ; RET NZ + ;EXX +.noVerify: LD (IX),H + ;RL E ; CF - verify/read EXX INC IX JR .LoopTAP - ;======================================================= - - - + ; _mInfoBLOCK #0605-$,#FF - ENDIF + ENDIF ;======================================================= ;------------------------------------------------------------------------------