more comments

This commit is contained in:
Antoine Vignau 2024-03-13 11:24:18 +01:00
parent 98c7fa0ed5
commit 9335055a75
1 changed files with 185 additions and 133 deletions

View File

@ -14,88 +14,95 @@ CSWH = $37
A1L = $3C A1L = $3C
A1H = $3D A1H = $3D
KBD EQU $C000 KBD = $C000
KBDSTROBE EQU $C010 KBDSTROBE = $C010
PRBL2 EQU $F94A PRBL2 = $F94A
HOME EQU $FC58 HOME = $FC58
WAIT EQU $FCA8 WAIT = $FCA8
RDCHAR EQU $FD35 RDCHAR = $FD35
GETLN EQU $FD6A GETLN = $FD6A
CROUT EQU $FD8E CROUT = $FD8E
PRBYTE EQU $FDDA PRBYTE = $FDDA
COUT EQU $FDED COUT = $FDED
WRITE EQU $FECD COUT1 = $FDF0
READ EQU $FEFD WRITE = $FECD
BELL EQU $FF3A READ = $FEFD
BELL = $FF3A
L1000 = $1000 L1000 = $1000
L5000 = $5000 ; Where the VTOC is loaded L5000 = $5000 ; Where the VTOC is loaded
*----------------------------------- *-----------------------------------
L5100 JMP L510A L5100 JMP L510A ; read entry point
LDY $8034 LDY $8034 ; write entry point
LDA #$02 LDA #$02
BNE L510C BNE L510C
L510A LDA #$01 ; Read command L510A LDA #$01 ; Read command
L510C PHA L510C PHA
LDX #$14 LDX #$14 ; copy default IOB table
L510F LDA IOB_DFT,X L510F LDA IOB_DFT,X
STA IOB,X STA IOB,X
DEX DEX
BNE L510F BNE L510F
PLA PLA
STA IOB_COMMAND STA IOB_COMMAND
JSR L5259
JSR resetCOUT
JSR HOME JSR HOME
LDA IOB_COMMAND LDA IOB_COMMAND
LSR LSR
BNE L5131 BNE L5131 ; go write
JSR L54E1 JSR L54E1 ; go read
JSR CROUT JSR CROUT
JMP L514D JMP L514D
L5131 LDY #$0A L5131 LDY #$0A ; COPY TAPE -> DISK
JSR PRINTSTRING JSR PRINTSTRING
JSR CROUT JSR CROUT
LDY #$25 LDY #$25 ; wait
L513B LDA #$FF L513B LDA #$FF
JSR WAIT JSR WAIT
DEY DEY
BNE L513B BNE L513B
LDY #$1A
LDY #$1A ; DISK NAME
JSR PRINTSTRING JSR PRINTSTRING
LDY #$1E LDY #$1E ; :
JSR PRINTSTRING JSR PRINTSTRING
L514D LDY #$1C
L514D LDY #$1C ; The disk name
JSR PRINTSTRING JSR PRINTSTRING
JSR L52AA
JSR L52AA ; handle VTOC
LDA #$01 LDA #$01
STA L55FB STA L55FB
JSR CROUT JSR CROUT
LDY #$0C LDY #$0C ; TK/SC
JSR PRINTSTRING JSR PRINTSTRING
L5162 JSR L51D8 L5162 JSR L51D8 ; read/write buffer
JSR L51A5 JSR L51A5 ; write/read it
LDA IOB_TRACK
LDA IOB_TRACK ; are we done?
BMI L5175 BMI L5175
CLC CLC
ADC IOB_SECTOR ADC IOB_SECTOR
CMP #$00 CMP #$00
BNE L5162 BNE L5162
L5175 LDA IOB_COMMAND L5175 LDA IOB_COMMAND
LSR LSR
BNE L517E BNE L517E ; go write
JMP L554E JMP L554E ; go verify/read
L517E JSR CROUT L517E JSR CROUT
LDY #$08 LDY #$08 ; COPY DONE
L5183 JSR CROUT L5183 JSR CROUT
JSR PRINTSTRING JSR PRINTSTRING
JSR L518F JSR L518F ; wait for key
JMP $03D0 JMP $03D0 ; return to DOS
L518F BIT KBDSTROBE L518F BIT KBDSTROBE
L5192 LDY #$07 L5192 LDY #$07
@ -108,66 +115,85 @@ L5194 LDA #$FF
BPL L5192 BPL L5192
RTS RTS
*----------
L51A5 LDA IOB_COMMAND L51A5 LDA IOB_COMMAND
LSR LSR
BNE L51DE BNE L51DE ; go write
L51AB LDY #$00 L51AB LDY #$00
L51AD LDX #$03
*-----------------------------------
doTAPECMD LDX #$03 ; move tape parms to A1/A2
L51AF LDA L52FC,Y L51AF LDA L52FC,Y
STA A1L,X STA A1L,X
INY INY
DEX DEX
BPL L51AF BPL L51AF
LDA IOB_COMMAND
LDA IOB_COMMAND ; either read from or write to tape
AND #$01 AND #$01
BNE L51D5 BNE L51D5
JSR L5250 JSR setCOUT ; modify COUT
JSR READ JSR READ ; read from tape
PHP PHP
JSR L5259 JSR resetCOUT ; reset COUT
PLP PLP
BEQ L51D4 BEQ L51D4
JSR CROUT JSR CROUT
LDY #$18 LDY #$18 ; TAPE READ ERROR
JMP L52A2 JMP L52A2
L51D4 RTS L51D4 RTS
L51D5 JMP WRITE L51D5 JMP WRITE ; write to tape
*-----------------------------------
L51D8 LDA IOB_COMMAND L51D8 LDA IOB_COMMAND
LSR LSR
BNE L51AB BNE L51AB ; go write
L51DE LDA #>L1000
L51DE LDA #>L1000 ; set buffer at $1000
STA IOB_BUFFER+1 STA IOB_BUFFER+1
STA A1H STA A1H
LDA #<L1000 LDA #<L1000
STA IOB_BUFFER STA IOB_BUFFER
STA A1L STA A1L
LDA IOB_COMMAND
LDA IOB_COMMAND ; command?
LSR LSR
BNE L5206 BNE L5206
LDA #$20
STA L55F7 *-- Read
LDA #$20 ; read means clear $1000..$2FFF
STA nbPAGES
LDY #$00 LDY #$00
TYA TYA
L51FA STA ($3C),Y L51FA STA (A1L),Y
INY INY
BNE L51FA BNE L51FA
INC A1H INC A1H
DEC L55F7 DEC nbPAGES ; page--
BNE L51FA BNE L51FA
*-- Write means do not erase buffer
L5206 LDA #$20 L5206 LDA #$20
STA L55F7 STA nbPAGES
LDA L55FB LDA L55FB ; check pass
BEQ L5215 BEQ L5215
DEC L55FB DEC L55FB ; tell we've been there
BEQ L522F BEQ L522F ; handle first case
L5215 JSR L52D5
L5215 JSR L52D5 ; get sector usage
LDA IOB_TRACK LDA IOB_TRACK
SEC SEC
SBC #$00 SBC #$00
BPL L522F BPL L522F
STA IOB_TRACK STA IOB_TRACK
LDY L55F7
LDY nbPAGES ; wait again
L5226 LDA #$D7 L5226 LDA #$D7
JSR WAIT JSR WAIT
DEY DEY
@ -175,31 +201,37 @@ L5226 LDA #$D7
RTS RTS
L522F JSR GO_RWTS L522F JSR GO_RWTS
LDA IOB_TRACK LDA IOB_TRACK ; show T
JSR PRBYTE JSR PRBYTE
LDX #$01 LDX #$01
JSR PRBL2 JSR PRBL2
LDA IOB_SECTOR LDA IOB_SECTOR ; show S
JSR PRBYTE JSR PRBYTE
LDA #$00 LDA #$00
STA $24 STA $24
INC IOB_BUFFER+1 INC IOB_BUFFER+1
DEC L55F7 DEC nbPAGES ; nb pages
BNE L5215 BNE L5215
RTS RTS
L5250 LDA #<L5262 *---------- Redirect COUT vector
setCOUT LDA #<L5262
STA CSWL STA CSWL
LDA #>L5262 LDA #>L5262
STA CSWH STA CSWH
RTS RTS
L5259 LDA #$F0 *---------- Reset COUT vector
resetCOUT LDA #<COUT1
STA CSWL STA CSWL
LDA #$FD LDA #>COUT1
STA CSWH STA CSWH
RTS RTS
*---------- My COUT routine
L5262 CMP #$87 L5262 CMP #$87
BEQ L526A BEQ L526A
PLA PLA
@ -224,52 +256,66 @@ L5277 INY
*----------------------------------- *-----------------------------------
GO_RWTS LDA #>IOB GO_RWTS LDA #>IOB ; execute a RWTS call
LDY #<IOB LDY #<IOB
JSR $03D9 JSR $03D9
BCC L5290 BCC L5290
JSR L5291 JSR L5291
L5290 RTS L5290 RTS
*---------- Handle error
L5291 LDA IOB_ERRCODE L5291 LDA IOB_ERRCODE
LDY #$0E LDY #$0E ; DISK WRITE PROTECTED
CMP #$10 CMP #$10 ;
BEQ L52A2 BEQ L52A2
LDY #$10 LDY #$10 ; DISK READ ERROR
CMP #$80 CMP #$80 ;
BEQ L52A2 BEQ L52A2
LDY #$12 LDY #$12 ; DISK DRIVE ERROR
L52A2 JSR PRINTSTRING L52A2 JSR PRINTSTRING
LDY #$16 LDY #$16 ; COPY ABORT
JMP L5183 JMP L5183
*----------------------------------- *-----------------------------------
* See the DOS 3.3 manual, page 132
L52AA LDA #$23 L52AA LDA #$23 ; last track
NOP NOP
STA IOB_TRACK STA IOB_TRACK
ASL ASL ; *2
ASL ASL ; *4
CLC CLC
ADC #$38 ADC #$38 ; C4
STA L55F9 STA L55F9
L52B8 LDA #$00 L52B8 LDA #$00
STA L55F8 STA L55F8
LDA L55F9 LDA L55F9 ; C4 - 4 = C0 => T22 bitmap
SEC SEC
SBC #$04 SBC #$04
TAX TAX
STX L55F9 STX L55F9
STX L55FA STX L55FA
DEC IOB_TRACK DEC IOB_TRACK
BMI L52FB BMI L52FB
LDA #$10
LDA #$10 ; last sector
NOP NOP
STA IOB_SECTOR STA IOB_SECTOR
L52D5 LDX L55FA
*---------- The VTOC is at $5000
* Bitmap starts at $5038
* Each bit set means a used sector
* Byte 1 Byte 2
* Bit 76543210 76543210
* Sector FEDCBA98 76543210
L52D5 LDX L55FA ; index within T22..
DEC IOB_SECTOR DEC IOB_SECTOR
BMI L52B8 BMI L52B8 ; next track please
L52DD CLC
L52DD CLC ; return bit sector usage within bitmap
LDA L55F8 LDA L55F8
BNE L52E4 BNE L52E4
SEC SEC
@ -280,37 +326,37 @@ L52E4 ROR
L52EB STA L55F8 L52EB STA L55F8
LDA L55F8 LDA L55F8
BEQ L52DD BEQ L52DD
AND $5000,X AND $5000,X ; The VTOC lies at $5000
NOP NOP
NOP NOP
STX L55FA STX L55FA
L52FB RTS L52FB RTS
*---------- Read/Write Tape commands *---------- Read/Write Tape commands
* Put at A1/A2 ($3C..$3F) * Put at A1/A2 ($3C..$3F): FROM..TO
* Code puts it inverted * Code puts it inverted
L52FC DB $2F ; 0 1000/3000 L52FC DB $2F ; 0 1000..2FFF
DB $FF DB $FF
DB $10 DB $10
DB $00 DB $00
DB $4F ; 4 3000/5000 DB $4F ; 4 3000..4FFF
DB $FF DB $FF
DB $30 DB $30
DB $00 DB $00
DB $54 ; 8 5000/5461 DB $54 ; 8 5000..5460
DB $60 DB $60
DB $50 DB $50
DB $00 DB $00
DB $34 ; C 3000/3461 DB $34 ; C 3000..3460
DB $60 DB $60
DB $30 DB $30
DB $00 DB $00
DB $54 ; 10 53FE/543F DB $54 ; 10 53FE..543E
DB $3E DB $3E
DB $53 DB $53
DB $FE DB $FE
DB $30 ; 14 3000/3041 DB $30 ; 14 3000..3040
DB $40 DB $40
DB $30 DB $30
DB $00 DB $00
@ -339,43 +385,43 @@ IOB_DFT DB $01
*---------- Pointers to strings (all inverted...) *---------- Pointers to strings (all inverted...)
L5329 DB >L53C3 ; 0 DISK-O-TAPE/PASCAL L5329 DB >L53C3 ; 0 DISK-O-TAPE/PASCAL
L532A DB <L53C3 L532A DB <L53C3
DB >L543C ; 1 PLEASE INSERT DISK TO BE COPIED DB >L543C ; 2 PLEASE INSERT DISK TO BE COPIED
DB <L543C DB <L543C
DB >L5418 ; 2 COPYRIGHT DB >L5418 ; 4 COPYRIGHT
DB <L5418 DB <L5418
DB >L5498 ; 3 PLEASE REWIND TAPE... DB >L5498 ; 6 PLEASE REWIND TAPE...
DB <L5498 DB <L5498
DB >L536A ; 4 COPY DONE DB >L536A ; 8 COPY DONE
DB <L536A DB <L536A
DB >L5374 ; 5 COPY TAPE -> DISK DB >L5374 ; A COPY TAPE -> DISK
DB <L5374 DB <L5374
DB >L5386 ; 6 TK/SC DB >L5386 ; C TK/SC
DB <L5386 DB <L5386
DB >L538C ; 7 DISK WRITE PROTECTED DB >L538C ; E DISK WRITE PROTECTED
DB <L538C DB <L538C
DB >L53A1 ; 8 DISK READ ERROR DB >L53A1 ; 10 DISK READ ERROR
DB <L53A1 DB <L53A1
DB >L53B1 ; 9 DISK DRIVE ERROR DB >L53B1 ; 12 DISK DRIVE ERROR
DB <L53B1 DB <L53B1
DB >L545C ; A COPY DISK -> TAPE DB >L545C ; 14 COPY DISK -> TAPE
DB <L545C DB <L545C
DB >L534F ; B COPY ABORT DB >L534F ; 16 COPY ABORT
DB <L534F DB <L534F
DB >L535A ; C TAPE READ ERROR DB >L535A ; 18 TAPE READ ERROR
DB <L535A DB <L535A
DB >L53D6 ; D DISK NAME DB >L53D6 ; 1A DISK NAME
DB <L53D6 DB <L53D6
DB >L53DF ; E " " DB >L53DF ; 1C " "
DB <L53DF DB <L53DF
DB >L53C2 ; F : DB >L53C2 ; 1E :
DB <L53C2 DB <L53C2
DB >L546E ; 10 ERROR DURING DB >L546E ; 20 ERROR DURING
DB <L546E DB <L546E
DB >L547B ; 11 TAPE VERIFY DB >L547B ; 22 TAPE VERIFY
DB <L547B DB <L547B
DB >L5488 ; 12 VERIFY COMPLETE DB >L5488 ; 24 VERIFY COMPLETE
DB >L5488 DB >L5488
L534F ASC "COPY ABORT"0D L534F ASC "COPY ABORT"0D
@ -428,40 +474,40 @@ L54DD DB $00 ; DCT
MX %11 MX %11
L54E1 LDY #$00 L54E1 LDY #$00 ; DISK-O-TAPE PASCAL
JSR PRINTSTRING JSR PRINTSTRING
LDY #$04 LDY #$04 ; COPYRIGHT
JSR PRINTSTRING JSR PRINTSTRING
JSR CROUT JSR CROUT
LDY #$02 LDY #$02 ; PLEASE INSERT DISK TO BE COPIED
JSR PRINTSTRING JSR PRINTSTRING
JSR CROUT JSR CROUT
LDY #$1A LDY #$1A ; DISK NAME
JSR PRINTSTRING JSR PRINTSTRING
LDA #$BF LDA #$BF ; cursor
STA |$0033 STA |$0033
JSR GETLN JSR GETLN
CPX #$1D CPX #$1D ; length of string
BCC L5509 BCC L5509
LDX #$1D LDX #$1D ; put a final CR
L5509 LDA #$0D L5509 LDA #$0D
STA L53E0,X STA L53E0,X
L550E LDA $0200,X L550E LDA $0200,X ; copy disk name
STA L53DF,X STA L53DF,X
DEX DEX
BPL L550E BPL L550E
JSR CROUT JSR CROUT
LDY #$06 LDY #$06 ; PLEASE REWIND TAPE
JSR PRINTSTRING JSR PRINTSTRING
JSR RDCHAR JSR RDCHAR
JSR CROUT JSR CROUT
LDY #$14 LDY #$14 ; COPY DISK -> TAPE
JSR PRINTSTRING JSR PRINTSTRING
LDY #$10 LDY #$10 ; 53FE..543E -> 200.240R 5000.5460R 5103G + COPYRIGHT (C) 1980 BY DANN MCCREARY
JSR L51AD JSR doTAPECMD
JSR L5537 ; read VTOC JSR L5537 ; read VTOC
LDY #$08 LDY #$08 ;
JMP L51AD JMP doTAPECMD
*---------- Read (write?) VTOC *---------- Read (write?) VTOC
@ -478,30 +524,30 @@ L5537 LDA #$00
*---------- *----------
L554E JSR HOME L554E JSR HOME
LDY #$22 LDY #$22 ; TAPE VERIFY
JSR PRINTSTRING JSR PRINTSTRING
LDY #$06 LDY #$06 ; PLEASE REWIND TAPE...
JSR PRINTSTRING JSR PRINTSTRING
JSR L518F JSR L518F
LDA #$01 LDA #$01 ; read
STA IOB_COMMAND STA IOB_COMMAND
JSR L5537 JSR L5537
LDY #$14 LDY #$14 ; 3000..3040
JSR L55B9 JSR L55B9
LDY #$0C LDY #$0C ; 3000..3460
JSR L55B9 JSR L55B9
JSR L52AA JSR L52AA
LDA #$01 LDA #$01
STA L55FB STA L55FB
JSR CROUT JSR CROUT
LDY #$1C LDY #$1C ; " "
JSR PRINTSTRING JSR PRINTSTRING
LDY #$0C LDY #$0C ; TK/SC
JSR PRINTSTRING JSR PRINTSTRING
L5585 LDA #$01 L5585 LDA #$01 ; read
STA IOB_COMMAND STA IOB_COMMAND
JSR L51DE JSR L51DE
LDY #$04 LDY #$04 ; 3000..4FFF
JSR L55B9 JSR L55B9
LDA IOB_TRACK LDA IOB_TRACK
BMI L559F BMI L559F
@ -510,7 +556,7 @@ L5585 LDA #$01
CMP #$00 CMP #$00
BNE L5585 BNE L5585
L559F JSR CROUT L559F JSR CROUT
LDY #$24 LDY #$24 ; VERIFY COMPLETE
JMP L5183 JMP L5183
L55A7 LDX #$07 L55A7 LDX #$07
@ -526,18 +572,18 @@ L55AF LDA L52FC,Y
RTS RTS
L55B9 STY L55FE L55B9 STY L55FE
LDA #$02 LDA #$02 ; write
STA IOB_COMMAND STA IOB_COMMAND
JSR L51AD JSR doTAPECMD
LDY L55FE LDY L55FE
DEY DEY
DEY DEY
JSR L55A7 JSR L55A7
JSR L55E4 JSR L55E4
LDY #$00 LDY #$00
JSR $FE36 JSR $FE36 ; ROM entry point VFY for verify
PHP PHP
JSR L5259 JSR resetCOUT
PLP PLP
BCS L55E3 BCS L55E3
JSR CROUT JSR CROUT
@ -545,12 +591,16 @@ L55B9 STY L55FE
JMP L52A2 JMP L52A2
L55E3 RTS L55E3 RTS
*---------- Set my COUT vector
L55E4 LDA #<L55ED L55E4 LDA #<L55ED
STA CSWL STA CSWL
LDA #>L55ED LDA #>L55ED
STA CSWH STA CSWH
RTS RTS
*---------- My second COUT routine
L55ED CMP #$87 L55ED CMP #$87
BEQ L55F5 BEQ L55F5
PLA PLA
@ -560,7 +610,9 @@ L55ED CMP #$87
L55F5 CLC L55F5 CLC
RTS RTS
L55F7 DB $00 *----------
nbPAGES DB $00
L55F8 DB $00 L55F8 DB $00
L55F9 DB $00 L55F9 DB $00
L55FA DB $00 L55FA DB $00