Antoine Vignau 426b6fab2f i'm fEDD up v2.3
The source code release
2024-10-03 23:33:21 +02:00

279 lines
5.7 KiB
ArmAsm

*
* I'm fEDD up ;-)
*
* (c) 2012, Brutal Deluxe Software
*
*---------------------------
LDOS32 = L4000+$6800
*----------------------------
* THE DISK COPY PART
*----------------------------
doDSK32 jsr doFILE
lda fileNAME ; empty filename
bne ddoDSK2
sec
jmp theEND ; mainLOOP
ddoDSK2 jsr resetSTEP ; only full track copy
jsr initEDD
lda #fileD13
jsr createFILE
*---------- Main copy loop
ddoDSK4 jsr MTRON ; motor on
lda #>L4000
sta dpPTR
]lp lda STARTTRK ; move arm
jsr ARMV
jsr showPHASE
jsr ddskTRACK ; read track
jsr K7
bcs ddoDSK9
lda dpPTR
clc
adc #$0D ; $0D00 bytes more
sta dpPTR
jsr NTRKCALC ; calc next track
sta STARTTRK
*---------- Exit condition 1: end of disk
bcs ddoDSK7
*---------- Exit condition 2: buffer full
lda dpPTR
cmp #>LDOS32 ; until end of buffer
bne ]lp
ddoDSK7 jsr MTROFF
lda dpPTR
sec
sbc #>L4000
tay
lda tempFILE ; save Y chunk
jsr saveFILE2
bcs ddoDSK9
lda CTRK ; exit condition 1 end
cmp ENDTRK ; means did we read
bcs ddoDSK8 ; the last track?
jmp ddoDSK4
ddoDSK8 clc
ddoDSK9 php
jsr MTROFF
plp
jmp theEND
*ddoDSK9 jsr MTROFF
*
* jsr BELL
* jmp mainFREE
*tblD32inter hex 000A0704010B0805020C090603
tblD32inter hex 0306090C0205080B0104070A00
ds \
*----------
ddskTRACK = *
ldx #13-1
stx dpSECTORS
ldy dpPTR
]lp tya
clc
adc tblD32inter,x
sta tblDSKptr,x
dex
bpl ]lp
lda #<L4000
sta dpBUFFER
*----------
* Read header
dreadHEADER CLC
dreadDATA PHP
ldx CSLT
dread1 LDA $C08C,X
BPL dread1
lsr
cmp #$6A ; #$D5
BNE dread1
]lp LDA $C08C,X
BPL ]lp
CMP #$AA
BNE dread1 ; read2
]lp LDA $C08C,X
BPL ]lp
CMP #$B5
BEQ ddoHEADER
PLP
BCC dreadHEADER
EOR #$AD
BEQ ddoDATA
BNE dreadHEADER
* Read header
ddoHEADER LDY #4
]lp LDA $C08C,X ; skip 4*4 vol/track nibbles
BPL ]lp
DEY
BNE ]lp
]lp LDA $C08C,X
BPL ]lp
ROL
STA dpNIBBLE
]lp LDA $C08C,X
BPL ]lp
AND dpNIBBLE
and #$0f ; force if needed...
PLP
tax
lda tblDSKptr,x
beq dreadHEADER ; already read ?
sta dpBUFFER+1
lda #0 ; mark as read
sta tblDSKptr,x
sec
bcs dreadDATA
* Read data
ddoDATA LDY #$9A
lda #0 ; patch v1.2
ddoDATA1 STY dpNIBBLE
]lp LDY $C08C,X
BPL ]lp
EOR LBAAB-$AB,Y
LDY dpNIBBLE
DEY
STA LBC00,Y
BNE ddoDATA1
LB934 STY dpNIBBLE
]lp LDY $C08C,X
BPL ]lp
EOR LBAAB-$AB,Y
LDY dpNIBBLE
STA LBB00,Y
INY
BNE LB934
*LB946 LDY $C08C,X
* BPL LB946
* CMP LBAAB-$AB,Y
* BNE LB963
*-----------
* DENIBBLIZE
*-----------
DENIBBLIZE LDX #$32
LDY #$00
LB9C5 LDA LBC00,X
LSR
LSR
LSR
STA dpNIBBLE27
LSR
STA dpNIBBLE
LSR
ORA LBB00,X
STA (dpBUFFER),Y
INY
LDA LBC00+$33,X
LSR
LSR
LSR
LSR
ROL dpNIBBLE27
LSR
ROL dpNIBBLE
ORA LBB00+$33,X
STA (dpBUFFER),Y
INY
LDA LBC00+$66,X
LSR
LSR
LSR
LSR
ROL dpNIBBLE27
LSR
ROL dpNIBBLE
ORA LBB00+$66,X
STA (dpBUFFER),Y
INY
LDA dpNIBBLE
AND #$07
LB9FF ORA LBB00+$99,X
STA (dpBUFFER),Y
INY
LDA dpNIBBLE27
AND #$07
ORA LBB00+$CC,X
STA (dpBUFFER),Y
INY
DEX
BPL LB9C5
LDA LBC00+$99
LSR
LSR
LSR
ORA LBB00+$FF
STA (dpBUFFER),Y
dec dpSECTORS
bmi ddskTRACK9
jmp dreadHEADER
ddskTRACK9 rts
ds \
*---------- Tables are aligned ;-)
* BC9A.BCFF
LBAAB HEX 00010810180203040506202830070938
HEX 400A4850580B0C0D0E0F111213141516
HEX 17191A1B1C1D1E212223246068252670
HEX 7827808890292A2B2C2D2E2F31323398
HEX A034A8B0B8353637393AC0C8D03B3CD8
HEX E03EE8F0F8