;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; Spectacle Editor ; ; Started am 5:12 27/5/84 ; ; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; ; cRight EQU #12 JumpTable EQU #99 CreateFile EQU #61 AddBlock EQU #69 PurgeFile EQU #6F sData EQU #6800 ORG #A000 ENT XOR A LD (cPage),A CALL InitVDU CALL InitKeys CALL FormatDisp CALL PrintData CALL StartDOS CALL Restore CALL ExitDOS Loop CALL InLine LD A,(DE) CP "." JR Z Loop CP ":" JR NZ Loop INC DE LD A,(DE) INC DE LD HL,CommTab CALL JumpTable JR Loop CommTab DEFB "S" DEFW Save DEFB "L" DEFW Load DEFB "M" DEFW Exit DEFB "D" DEFW Select DEFB "C" DEFW Compress DEFB #FF Exit POP AF RET Compress CALL PauseTR CALL Restore LD HL,sData LD B,200 XOR A Comp0 CALL #123 INC HL DJNZ Comp0 LD IY,sData LD HL,sData+200 LD (pStart),HL LD (pEnd),HL LD A,60 LD (cTrack),A CompLp LD A,0 cTrack EQU $-1 LD DE,(pEnd) PUSH IY POP HL LD A,E CALL #123 INC HL LD A,D CALL #123 INC IY:INC IY CALL PauseTR LD A,(cTrack) CALL CompRead CALL CompIt ; CALL CompDisp LD A,(cTrack) INC A LD (cTrack),A CP 60+#32 JR NZ CompLp RET CompRead RRCA LD (FileNo),A CALL StartDOS CALL PauseTR CRer XOR A LD (ErrorF),A LD HL,DiskBuffer CALL ReadTrack JR C CRx LD A,(ErrorF) OR A JR NZ CRer CRx CALL ExitDOS RET CompIt LD A,(cTrack) SUB 60 LD (cPage),A LD HL,DiskBuffer+40 LD IX,CompBuffer CALL CompLine LD BC,40 ADD HL,BC LD B,21 CompILp CALL CompLine DJNZ CompILp LD (IX),0 LD HL,DiskBuffer LD IX,CompBuffer CompL1 LD B,0 CompL2 LD A,(IX) OR A JR Z CompL7 CP #20 JR Z CompL3 LD A,B OR A JR NZ CompL4 LD A,(IX) INC IX CALL DumpChar JR CompL2 CompL3 INC B INC IX JR CompL2 CompL4 LD A,(IX) CP #D JR NZ CompL5 LD (HL),A INC IX INC HL JR CompL1 CompL5 LD A,B CP #0D JR NC CompL6 LD (HL),A INC HL LD A,(IX) INC IX CALL DumpChar JR CompL1 CompL6 LD (HL),#E INC HL LD (HL),A INC HL LD A,(IX) INC IX CALL DumpChar JR CompL1 DumpChar CP "|" JR NZ DC1 LD (HL),#F INC HL LD A,(IX) INC IX DC1 LD (HL),A INC HL RET CompL7 DEC HL LD A,(HL) CP #D JR Z CompL7 INC HL LD (HL),0 LD DE,DiskBuffer OR A SBC HL,DE LD (lPage),HL CALL PrintData LD HL,(pEnd) LD DE,DiskBuffer CompL8 LD A,(DE) INC DE CALL #123 ;LD (HL),A INC HL OR A JR NZ CompL8 LD (pEnd),HL RET CompLine PUSH BC LD B,40 CLLp LD A,(HL) LD (IX),A INC HL INC IX DJNZ CLLp POP BC CP #20 RET NZ LD (IX-1),#D RET CompDisp LD IX,(CurAdd) LD HL,#C201 LD (CurAdd),HL LD HL,DiskBuffer CDlp LD A,(HL) CALL Print40 OR A JR Z CD1 INC HL JR CDlp CD1 LD (CurAdd),IX RET Load LD (hDE),DE CALL FormatDisp CALL PrintData CALL StartDOS Ldlp XOR A LD (ErrorF),A CALL PauseTR LD HL,DiskBuffer LD DE,(hDE) CALL TrackRead JR C Ld1 LD A,(ErrorF) OR A JR NZ Ldlp LD IX,(CurAdd) LD HL,#C201 LD (CurAdd),HL LD HL,DiskBuffer Ldlp1 LD A,(HL) CALL Print40 OR A JR Z Ld1 INC HL JR Ldlp1 Ld1 LD (CurAdd),IX CALL ExitDOS RET hDE DEFW 0 Save CALL ReadHex8 RET C CP 100 RET NC ADD A,60 RRCA LD (FileNo),A LD IX,(CurAdd) LD HL,DiskBuffer LD IY,#C200 LD B,24 Sv0 PUSH BC LD (CurAdd),IY PUSH HL CALL SCAN POP HL LD DE,Buffer+1 LD B,40 Sv1 LD A,(DE) LD (HL),A INC HL INC DE DJNZ Sv1 INC IYH INC IYH POP BC DJNZ Sv0 LD (HL),0 CALL StartDOS Sv2 XOR A LD (ErrorF),A CALL Restore CALL PauseTR LD HL,DiskBuffer CALL TrackWrite JR C Sv3 LD A,(ErrorF) OR A JR NZ Sv2 Sv3 CALL ExitDOS RET RET PrintData LD IX,DataTable PDlp LD A,(IX) BIT 0,A JR NZ PD4 LD B,A INC IX LD L,(IX) INC IX LD H,(IX) INC IX LD (CurAdd),HL PD1 LD A,(IX) INC IX CALL Print OR A JR NZ PD1 LD L,(IX) INC IX LD H,(IX) INC IX LD A,(HL) INC HL LD H,(HL) LD L,A BIT 1,B JR Z PD2 CALL WriteHex16 JR PD3 PD2 LD A,L CALL WriteHex8 PD3 JR PDlp PD4 LD A,#D JP Print FormatDisp CALL PrintStr DEFB #C,#20,0 LD A,"." LD B,40 CALL nChars LD C,24 FDlp CALL PrintStr DEFB #D,#11,".",0 LD A,cRight LD B,40 CALL nChars LD A,"." CALL Print DEC C JR NZ FDlp CALL PrintStr DEFB #D,0 LD A,"." LD B,40 CALL nChars CALL PrintStr DEFB #D,#D,#11 DEFB ":",#D,#11 DEFB ":",#D,#11 DEFB ":",#D,#11 DEFB ":",#D,#11 DEFB ":",0 RET nChars CALL Print DJNZ nChars RET DataTable DEFB #00 DEFW #F400 DEFM /: Current Page = / DEFB 0 DEFW cPage DEFB #02 DEFW #F41C DEFM /Page Length = / DEFB 0 DEFW lPage DEFB #02 DEFW #F600 DEFM /: Start of Data = / DEFB 0 DEFW pStart DEFB #02 DEFW #F61C DEFM /End of Data = / DEFB 0 DEFW pEnd DEFB #01 SkipTN INC DE SkipSpc LD A,(DE) CP " " RET NZ INC DE JR SkipSpc ReadHex8 PUSH HL CALL ReadHex16 PUSH AF LD A,H OR A JR Z RH8 POP AF SCF LD A,L POP HL RET RH8 POP AF LD A,L POP HL RET ReadHexBC16 PUSH HL CALL ReadHex16 LD B,H:LD C,L POP HL RET ReadHex16 CALL SkipSpc LD A,(DE) OR A SCF RET Z LD HL,0 RHlp LD A,(DE) CP " " JR Z RHend OR A JR Z RHend CALL ValidHex CCF RET NC ADD HL,HL:RET C ADD HL,HL:RET C ADD HL,HL:RET C ADD HL,HL:RET C ADD A,L LD L,A INC DE JR RHlp RHend XOR A ; NZ , NC INC A RET ValidHex SUB "0" RET C CP 10 CCF RET NC SUB 7 CP 10 RET C CP 16 CCF RET WriteHex8 CALL WriteHexDig WriteHexDig RRCA:RRCA:RRCA:RRCA PUSH AF AND #0F ADD A,"0" CP "9"+1 JR C WHD1 ADD A,7 WHD1 CALL Print POP AF RET WriteHex16 PUSH AF LD A,H CALL WriteHex8 LD A,L CALL WriteHex8 POP AF RET InitKeys LD HL,KeyCounts LD DE,KeyCounts+1 LD BC,63 LD (HL),MinScans LDIR LD HL,110 LD (RepSpeed1),HL LD HL,10 LD (RepSpeed2),HL LD HL,KeyBuffer LD B,32 IKlp LD (HL),0 INC HL DJNZ IKlp DEC HL LD (pKeyBuffer),HL XOR A LD (StopDefF),A LD A,#FF OUT (#27),A LD A,#0F OUT (#27),A RET ReadKey PUSH IX PUSH HL PUSH DE PUSH BC PUSH AF LD HL,TimeOut LD (Count),HL RK0 EX AF,AF' PUSH AF LD HL,(pKeyBuffer) LD A,(HL) OR A JR NZ RK1b CALL ReadKeys DEC A LD B,A CALL GetShiftOff ADD A,B LD E,A LD D,0 LD HL,KTab0 ADD HL,DE POP AF EX AF,AF' LD BC,#0825 IN A,(C) BIT 1,A LD A,0 JR NZ ReadKey1 LD A,#40 ReadKey1 XOR (HL) CP 7 JR Z RK2t CP 9 JR Z RK2s CP #A JR Z RK2f LD B,A LD A,(StopDefF) OR A JR Z RK1a LD HL,(pKBuff) LD (HL),B INC HL LD (pKBuff),HL LD (HL),0 RK1a POP AF LD A,B POP BC POP DE POP HL POP IX RET RK1b POP AF EX AF,AF' LD HL,(pKeyBuffer) POP AF LD A,(HL) INC HL LD (pKeyBuffer),HL POP BC POP DE POP HL POP IX RET RK2t LD HL,KeyBuffer LD (pKeyBuffer),HL JP RK0 RK2s LD HL,KeyBuffer LD (pKBuff),HL LD (HL),0 LD A,1 LD (StopDefF),A LD HL,Dummy LD (pKeyBuffer),HL JP RK0 Dummy NOP RK2f XOR A LD (StopDefF),A JP RK0 ReadKeys LD A,1 LD (CursorSpeed),A LD (CursorType),A ReadKeyLp CALL CursorInv CALL ScanKeys JR NZ RKNewKey LD A,(CurrKey) OR A JR Z ReadKeyLp LD HL,(CurrKeyAddr) BIT 6,(HL) JR Z RKCancelOld LD HL,(RepDel) DEC HL LD (RepDel),HL LD A,L OR H JR NZ ReadKeyLp LD HL,(RepSpeed2) RK1 LD (RepDel),HL RKExit CALL CursorOff LD A,(CurrKey) RET RKNewKey LD (CurrKey),A LD HL,(RepSpeed1) LD (CurrKeyAddr),IX JR RK1 RKCancelOld XOR A LD (CurrKey),A JR ReadKeyLp ScanKeys LD BC,#4025 LD HL,KeyCounts+#3F LD E,0 ScanKeyLp DEC B IN A,(C) BIT 0,A CALL Z SKPressed CALL NZ SKNotPressed DEC HL INC B DEC B JR NZ ScanKeyLp LD A,E OR A RET SKPressed EX AF,AF' LD A,(HL) AND #3F CP MinScans JR Z SKP1 INC (HL) EX AF,AF' RET SKP1 BIT 6,(HL) JR NZ SKexit LD A,E OR A JR NZ SKexit SET 6,(HL) PUSH HL POP IX CALL CalcKeyPos LD E,A SKexit EX AF,AF' RET SKNotPressed EX AF,AF' LD A,(HL) AND #3F JR Z SKNP1 DEC (HL) EX AF,AF' RET SKNP1 RES 6,(HL) EX AF,AF' RET CalcKeyPos PUSH DE LD DE,KeyCounts-1 OR A SBC HL,DE LD A,L ADD HL,DE POP DE RET GetShiftOff LD A,#0C IN A,(#25) LD C,A LD A,#10 IN A,(#25) XOR C BIT 1,A JR NZ GSO1 XOR A RET GSO1 LD A,64 RET CursorOff LD A,(CursorType) OR A RET NZ JP FlipCursor CursorInv LD A,(CursorSpeed) DEC A LD (CursorSpeed),A RET NZ LD A,FlashRate LD (CursorSpeed),A LD A,(CursorType) XOR #01 LD (CursorType),A LD HL,(Count) DEC HL LD (Count),HL LD A,H OR L JP NZ FlipCursor LD A,#01:OUT (#22),A CALL ScanIt LD HL,TimeOut LD (Count),HL LD A,#21:OUT (#22),A JP FlipCursor ScanIt LD BC,#25 SIa IN A,(C) OR #FC INC A RET NZ INC B JR SIa KTab0 DEFM /8IK,9OL./ DEFM !0P;/-[' ! DEFB "=","]",#15,#14,"'",#D,#20,#16 DEFB #11,#08,"\",#12,#00,#13,0,0 DEFB #1B,#07,#0F,#00 DEFM /1QAZ/ DEFM /2WSX3EDC/ DEFM /4RFV5TGB/ DEFM /6YHN7UJM/ DEFM /*ik<(ol>/ DEFM !)p:?_{" ! DEFB "+","}",#15,#14,"~",#0D,#20,#16 DEFB #11,#08,"|",#12,#0C,#13,0,0 DEFB #1B,#07,#0F,#00 DEFM /!qaz/ DEFM /@wsx#edc/ DEFM /$rfv%tgb/ DEFM /^yhn&ujm/ CharSet EQU #1D00 PrintStr EX (SP),HL PrtS1 LD A,(HL) CALL Print INC HL OR A JR NZ PrtS1 EX (SP),HL RET InitVDU XOR A LD A,#80 OUT (#23),A LD A,#21 OUT (#22),A LD HL,PControl LD (PrintVector),HL LD A,#C JR Print Print40 PUSH AF PUSH BC:PUSH DE:PUSH HL:PUSH IX LD E,A LD A,41 JR Pr1 Print PUSH AF PUSH BC:PUSH DE:PUSH HL:PUSH IX LD E,A LD A,#40 Pr1 LD (Width),A LD BC,VDU0 IN A,(C):LD (BC),A:OUT (C),C INC C IN A,(C):LD (BC),A:OUT (C),C INC C IN A,(C):LD (BC),A:OUT (C),C INC C IN A,(C):LD (BC),A:OUT (C),C OUT (#29),A LD A,E CP #20 JP NC PC1 LD HL,(PrintVector) JP (HL) PC1 SUB #20 LD L,A:LD H,0 ADD HL,HL:ADD HL,HL:ADD HL,HL LD DE,CharSet ADD HL,DE PUSH HL:POP IX LD HL,(CurAdd) LD B,8 LD DE,#40 PAccLp LD A,(IX) LD (HL),A INC IX ADD HL,DE DJNZ PAccLp OR A SBC HL,DE LD A,#FF OUT (0),A OUT (1),A OUT (2),A OUT (3),A JP MoveCRight ; Pop blocks PExit1a LD HL,PControl LD (PrintVector),HL PExit1 LD BC,VDU0 LD A,(BC):OUT (C),A:INC C LD A,(BC):OUT (C),A:INC C LD A,(BC):OUT (C),A:INC C LD A,(BC):OUT (C),A OUT (#28),A POP IX:POP HL:POP DE:POP BC POP AF RET PopBlocks LD BC,VDU0 LD A,(BC):OUT (C),A:INC C LD A,(BC):OUT (C),A:INC C LD A,(BC):OUT (C),A:INC C LD A,(BC):OUT (C),A OUT (#28),A RET PushBlocks LD BC,VDU0 IN A,(C):LD (BC),A:OUT (C),C INC C IN A,(C):LD (BC),A:OUT (C),C INC C IN A,(C):LD (BC),A:OUT (C),C INC C IN A,(C):LD (BC),A:OUT (C),C OUT (#29),A RET PControl ADD A,A LD L,A:LD H,0 LD DE,PVectors ADD HL,DE LD A,(HL) INC HL LD H,(HL) LD L,A JP (HL) BordChange LD HL,BordAlter LD (PrintVector),HL JP PExit1 BordAlter AND #7 LD (Border),A LD B,A IN A,(#22) AND #F8 OR B OUT (#22),A JP PExit1a InkChange LD HL,InkAlter LD (PrintVector),HL JP PExit1 InkAlter AND #7 LD (Ink),A CALL ResetAttr JP PExit1a PapChange LD HL,PapAlter LD (PrintVector),HL JP PExit1 PapAlter AND #7 LD (Paper),A CALL ResetAttr JP PExit1a ResetAttr LD A,(Paper) ADD A,A ADD A,A ADD A,A LD B,A LD A,(Ink) OR B LD (CurrAttr),A RET PVectors DEFW PExit1 ; 0 DEFW PExit1 ; 1 DEFW PExit1 ; 2 DEFW PExit1 ; 3 DEFW BordChange ; 4 DEFW PapChange ; 5 DEFW InkChange ; 6 DEFW PExit1 ; 7 ;UDK DEFW PDelete ; 8 DEFW PExit1 ; 9 ;UDK DEFW PExit1 ; A ;UDK DEFW PExit1 ; B DEFW PCLS ; C DEFW PReturn ; D DEFW PExit1 ; E DEFW PExit1 ; F DEFW PExit1 ; 10 DEFW MoveCLeft ; 11 DEFW MoveCRight ; 12 DEFW MoveCUp ; 13 DEFW MoveCDown ; 14 DEFW RemoveSp ; 15 DEFW InsertSp ; 16 DEFW PStart ; 17 DEFW PCCR ; 18 DEFW PExit1 ; 19 DEFW PExit1 ; 1A DEFW PEsc ; 1B DEFW PExit1 ; 1C DEFW PExit1 ; 1D DEFW 0;PExit1 ; 1E DEFW 0;PExit1 ; 1F PCLS CALL VDUBlocks XOR A CALL FillScreen LD HL,#C000 LD (CurAdd),HL LD HL,#FE00 LD (BottLine),HL XOR A OUT (#20),A OUT (#21),A JP PExit1 FillScreen LD HL,#C000 FSlp LD (HL),A:INC L LD (HL),A:INC L LD (HL),A:INC L LD (HL),A:INC L LD (HL),A:INC L LD (HL),A:INC L LD (HL),A:INC L LD (HL),A:INC L LD (HL),A:INC L LD (HL),A:INC L LD (HL),A:INC L LD (HL),A:INC L LD (HL),A:INC L LD (HL),A:INC L LD (HL),A:INC L LD (HL),A:INC L JP NZ FSlp INC H JP NZ FSlp RET VDUBlocks PUSH AF XOR A:OUT (0),A INC A:OUT (1),A INC A:OUT (2),A INC A:OUT (3),A POP AF RET ClearLine LD HL,(CurAdd) LD A,L:AND #C0:LD L,A LD A,H:OR #C0:LD H,A LD (CurAdd),HL LD D,H:LD E,L INC DE LD BC,#1FF LD (HL),0 LDIR RET MoveCRight LD A,(CurAdd) INC A CP 42 Width EQU $-1 JR Z PReturn LD (CurAdd),A JP PExit1 PReturn LD HL,(CurAdd) LD A,L:AND #C0:LD L,A LD A,H:OR #C0:LD H,A INC L LD (CurAdd),HL ; JR Z Scroll MoveCDown LD HL,(CurAdd) LD DE,#200 ADD HL,DE LD A,H:OR #C0:LD H,A LD (CurAdd),HL JP PExit1 MoveCLeft CALL BackCur JP PExit1 BackCur LD A,(CurAdd) DEC A AND #3F LD (CurAdd),A CP #3F RET NZ CurUp LD HL,(CurAdd) LD DE,0-#200 ADD HL,DE LD A,H:OR #C0:LD H,A LD (CurAdd),HL RET MoveCUp CALL CurUp JP PExit1 PEsc CALL ClearLine JP PExit1 InsertSp LD HL,(CurAdd) LD A,L CP #3F JP Z KillChar OR #3F LD E,A LD D,H PUSH DE:POP IX LD A,#3F SUB L LD C,A LD B,0 PUSH BC:POP IY LD B,8 ISpLp PUSH BC PUSH IX:POP HL LD D,H:LD E,L DEC HL PUSH IY:POP BC LDDR XOR A:LD (DE),A LD C,#40 ADD IX,BC POP BC DJNZ ISpLp JP PExit1 RemoveSp LD A,(CurAdd) CP #3F JP Z KillChar LD IX,(CurAdd) LD HL,(CurAdd) LD A,#3F SUB L LD C,A LD B,0 PUSH BC:POP IY LD B,8 RSpLp PUSH BC PUSH IX:POP DE LD L,E:LD H,D INC L PUSH IY:POP BC LDIR XOR A:LD (DE),A LD C,#40 ADD IX,BC POP BC DJNZ RSpLp JP PExit1 PDelete CALL BackCur KillChar LD HL,(CurAdd) XOR A LD B,8 LD DE,#40 PDLp LD (HL),A ADD HL,DE DJNZ PDLp JP PExit1 PCCR LD A,(CurAdd) OR A JP NZ PReturn JP PExit1 PStart LD A,(CurAdd) AND #C0 LD (CurAdd),A JP PExit1 FlipCursor PUSH AF:PUSH DE:PUSH HL LD HL,(CurAdd) LD DE,#1C0 ADD HL,DE CALL PushBlocks LD A,(HL):XOR #7E:LD (HL),A CALL PopBlocks POP HL:POP DE:POP AF RET InLine CALL ReadKey CP #D JR Z ENT1 CALL Print JR InLine ENT1 CALL SCAN LD DE,Buffer+63 LD B,63 ENT1a LD A,(DE) CP " " JR NZ ENT2 DEC DE DJNZ ENT1a ENT2 INC DE XOR A LD (DE),A LD DE,Buffer LD A,#D JP Print SCAN CALL PushBlocks LD DE,(CurAdd) LD A,E:AND #C0:LD E,A LD HL,Buffer LD B,64 SCANLp PUSH BC:PUSH DE:PUSH HL CALL FindCharDE POP HL:POP DE:POP BC LD (HL),A JR Z SCANx INC HL INC E DJNZ SCANLp LD (HL),0 SCANx JP PopBlocks FindCharDE INC D LD HL,CharSet+4 ;Scan middle line LD BC,#2008 ScanLp PUSH BC LD A,(DE) CP (HL) JR Z Scan1 Scan1x LD B,0 ADD HL,BC ;BC = 8 POP BC INC B LD A,B CP #80 JR NZ ScanLp XOR A RET Scan1 PUSH DE PUSH HL EX DE,HL LD A,E:AND #F8:LD E,A DEC H LD B,8 Scan1Lp LD A,(DE) CP (HL) JR NZ Scan1Fail INC DE PUSH BC LD BC,#40 ADD HL,BC POP BC DJNZ Scan1Lp POP HL:POP DE POP BC LD A,B OR A RET Scan1Fail POP HL POP DE JR Scan1x StartDOS CALL PUSHBlocks CALL SetUpFDC CALL GrabWS RET C CALL SetUpBlocks XOR A LD (ErrorF),A RET Select CALL ReadHex8 RET C CP 4 CCF RET C RRCA:RRCA:RRCA LD B,A IN A,(#16) AND #9F OR B OUT (#16),A LD (DriveFlag),A OR A RET SetUpFDC LD A,#92 : OUT (#17),A LD A,(DriveFlag) AND #60 OR #0C OUT (#16),A LD A,#D0 : OUT (#18),A RET Restore CALL PauseTR LD A,#08 OUT (#18),A OR A RET PauseTR PUSH IX:PUSH IX:POP IX:POP IX WaitTR PUSH AF WaitTR1 IN A,(#18) BIT 0,A JR NZ WaitTR1 POP AF RET SideSel0 PUSH AF CALL WaitTR IN A,(#16) AND #EF OUT (#16),A POP AF RET SideSel1 PUSH AF CALL WaitTR IN A,(#16) OR #10 OUT (#16),A POP AF RET SeekAcc BIT 7,A RES 7,A CALL Z SideSel0 CALL NZ SideSel1 SeekH PUSH AF CALL PauseTR OUT (#1B),A LD A,#18 OUT (#18),A POP AF RET TrackRead CALL ReadHex8 RET C CP 100 RET NC ADD A,60 RRCA LD (FileNo),A ; CALL Restore ReadTrack LD A,(FileNo) CALL SeekAcc CALL POPBlocks CALL PauseTR CALL Read4K CALL SetUpBlocks OR A RET TrackWrite CALL Restore LD A,(FileNo) CALL SeekAcc CALL POPBlocks CALL PauseTR CALL Write4K CALL Veri4K CALL SetUpBlocks OR A RET Write4K LD A,2:CALL WriteSec LD A,3:CALL WriteSec LD A,4:CALL WriteSec LD A,5:JR WriteSec Write256 LD A,1 WriteSec CALL WaitTR OUT (#1A),A LD A,(ErrorF) OR A RET NZ WrSec1 LD A,#A0 OUT (#18),A CALL WriteData IN A,(#18) AND #DC RET Z LD A,4:LD (ErrorF),A RET Read4K LD A,2:CALL ReadSec LD A,3:CALL ReadSec LD A,4:CALL ReadSec LD A,5 ReadSec CALL WaitTR OUT (#1A),A LD A,(ErrorF) OR A RET NZ LD A,#80 OUT (#18),A CALL ReadData IN A,(#18) AND #9C RET Z LD A,2 LD (ErrorF),A RET VeriSec CALL WaitTR OUT (#1A),A LD A,(ErrorF) OR A RET NZ LD A,#80 OUT (#18),A CALL VerifyData IN A,(#18) AND #9C RET Z LD A,2 LD (ErrorF),A RET Veri4K LD A,2:CALL VeriSec LD A,3:CALL VeriSec LD A,4:CALL VeriSec LD A,5:CALL VeriSec RET ReadData LD BC,0 ReadData1 DEC HL JR rwait read IN A,(#1B) LD (HL),A rwait IN A,(#14) OR A JR Z rwait JP M readend CPI JP V read read1 IN A,(#1B) VerifyData EQU $ rwait1 IN A,(#14) OR A JR Z rwait1 JP P read1 RET readend INC HL RET WriteData EQU $ write LD C,(HL) wwait IN A,(#14) OR A JR Z wwait LD A,C OUT (#1B),A JP M wend INC HL JP write wend RET DOSWSName DEFM /DOS WS.TEMP/ NOP GrabWS LD DE,DOSWSName CALL CreateFile JR C GrabFail LD (WSDesc),A LD C,A LD B,4 LD HL,WSList GrabLp PUSH HL PUSH BC LD A,C CALL AddBlock POP BC POP HL JR C GrabFail LD (HL),A INC HL DJNZ GrabLp OR A RET GrabFail CALL PrintStr DEFB #D,#1B DEFM /RFS fail !/ DEFB #D,0 SCF RET ExitDOS LD A,(WSDesc) LD D,A LD E,A CALL PurgeFile CALL POPBlocks RET PUSHBlocks LD HL,OldBlocks LD BC,#0400 PUSHlp IN A,(C) LD (HL),A INC HL INC C DJNZ PUSHlp RET POPBlocks PUSH HL PUSH BC PUSH AF LD HL,OldBlocks LD BC,#0400 POPlp LD A,(HL) OUT (C),A INC HL INC C DJNZ POPlp POP AF POP BC POP HL RET SetUpBlocks PUSH HL PUSH BC PUSH AF LD HL,WSList LD BC,#0400 SUBlp LD A,(HL) OUT (C),A INC HL INC C DJNZ SUBlp POP AF POP BC POP HL RET ORG ($!#FF)+1 VDU0 DEFS 1 ; Must be paged ! VDU1 DEFS 1 VDU2 DEFS 1 VDU3 DEFS 1 CurrKey DEFS 1 CurrKeyAddr DEFS 2 RepDel DEFS 2 RepSpeed1 DEFS 2 RepSpeed2 DEFS 2 pKeyBuffer DEFS 2 pKBuff DEFS 2 StopDefF DEFS 1 KeyBuffer DEFS 60 CursorType DEFS 1 CursorSpeed DEFS 1 Count DEFS 2 TimeOut EQU 2000 KeyCounts DEFS 64 MinScans EQU 9 CurrAttr DEFS 1 CurAdd DEFS 2 BottLine DEFS 2 PrintVector DEFS 2 PrintLines DEFS 1 Buffer DEFS 65 FlashRate EQU 60 Border DEFB 0 Ink DEFB 2 Paper DEFB 0 cPage DEFB 0 pPages DEFW 0 lPage DEFW 0 DiskBuffer DEFS #1000 ErrorF DEFS 1 DriveFlag DEFS 1 pStart DEFS 2 pEnd DEFS 2 Offset DEFS 2 FileNo DEFS 1 pDirEnt DEFS 2 pTrackRec DEFS 2 WSDesc DEFS 1 WSList DEFS 4 OldBlocks DEFS 4 pRec DEFS 2 CompBuffer DEFS 24*40+24 RecMap EQU #E000 RecMap1 EQU #E000+160