Files
Pawel Kalinowski a76fb48c15 archive drop
2023-05-25 08:57:40 -04:00

1570 lines
54 KiB
Plaintext

;MICRO SPARTA DOS 3.0s
;START ADDR = 1FFD
;END ADDR = 28C9
*=$1FFD
.OPT noList
acktimeout = $a
readtimeout = 2
STACKP = $0318
CRITIC = $42
DRETRY = $02BD
CASFLG = $030F
CRETRY = $029C
CASINI = $02
BOOT = $09
DOSVEC = $0a
DOSINI = $0c
APPMHI = $0e
IRQENS = $10
ICBALZ = $24
ICBAHZ = $25
ICPTLZ = $26
ICPTHZ = $27
ICBLLZ = $28
ICBLHZ = $29
CheckSUM = $30
SecLen = $31
SecBuffer = $32
CRETRYZ = $34
TransmitError =$35
Looperka = $36
StackCopy = $37
SAVMSC = $58
; Adres bufora przechowywania Aktualnie obrabianego sektora zawierajacego
; katalog
CurrentDirBuf = $CA
; Adres (w buforze CurrentDirBuff, ale bezwzgledny) poczatku informacji
; o obrabianym pliku (skok co $17)
CurrentFileInfoBuff = $D0
; Aders bufora mapy sektorow aktualnego katalogu
DirMapSect = $D2
VSERIN = $020a
COLPF2S = $02c6
COLBAKS = $02c8
COLDST = $0244
MEMTOP = $02e5
MEMLO = $02e7
KBCODES = $02fc
DDEVIC = $0300
DUNIT = $0301
DCOMND = $0302
DBUFA = $0304
DBYT = $0308
DAUX1 = $030a
DAUX2 = $030b
ICCMD = $0342
ICBUFA = $0344
;ICBUFA+1 = $0345
ICBUFL = $0348
;ICBUFL+1 = $0349
ICAX1 = $034a
ICAX2 = $034b
AUDF3 = $d204
AUDF4 = $d206
AUDC4 = $d207
AUDCTL = $d208
SKSTRES = $d20a
SEROUT = $D20d
SERIN = $D20d
IRQEN = $D20e
IRQST = $D20e
SKSTAT = $d20f
SKCTL = $d20f
PBCTL = $d303
JCIOMAIN = $e456
JSIOINT = $e459
JTESTROM = $e471
JRESETWM = $e474
JRESETCD = $e477
offset1 = movedproc-$0700
offset2 = TopDriveMovedProc-$0a00
START
JMP mainprog ;1FFD 4C 70 21
; procedura ladujaca, ktora zostanie przepisana pod adres $0700 po wybraniu programu
; do wczytania (wszystkie skoki bezwzgledne i samomodyfikacje "-offset1" !!!)
movedproc
data00
.WORD $0000 ;2000 00 00
label17
TXA ;2002 8A
PHA ;2003 48
LDA ICBLHZ ;2004 A5 29
PHA ;2006 48
JSR [label08-offset1] ;2007 20 82 07
PLA ;200A 68
STA ICBLHZ ;200B 85 29
PLA ;200D 68
TAX ;200E AA
label31
LDA [blokDanychIO1-offset1]+8 ;200F AD B4 07
STA ICBLLZ ;2012 85 28
JSR [label09-offset1] ;2014 20 77 07
AND ICBALZ ;2017 25 24
CMP #$FF ;2019 C9 FF
BNE label10 ;201B D0 03
JSR [label09-offset1] ;201D 20 77 07
label10
JSR [label11-offset1] ;2020 20 C9 07
SBC ICBALZ ;2023 E5 24
EOR #$FF ;2025 49 FF
STA ICPTLZ ;2027 85 26
PHP ;2029 08
JSR [label11-offset1] ;202A 20 C9 07
PLP ;202D 28
SBC ICBAHZ ;202E E5 25
EOR #$FF ;2030 49 FF
STA ICPTHZ ;2032 85 27
SEC ;2034 38
WhatIsIt
BCS label12 ;2035 B0 0D ; tu wstawiany jest raz (na poczatku) rozkaz LDA ($0D),Y ktory tylko wylacza skok !!!
DEC [WhatIsIt-offset1] ;2037 CE 35 07 ; Przywraca poprzednia postac BCS z poprzedniego wiersza!!
LDA ICBALZ ;203A A5 24 ; Czyli TO wykona sie tylko RAZ
STA $02E0 ;203C 8D E0 02 ; Wpisujac adres startu programu jako adres pierwszego bloku
LDA ICBAHZ ;203F A5 25 ; na wypadek gdyby plik nie konczyl sie blokiem
STA $02E1 ;2041 8D E1 02 ; z adresem startu (bywa i tak).
label12
LDA #<[Jrts-offset1] ;2044 A9 D6
STA $02E2 ;2046 8D E2 02
LDA #>[Jrts-offset1] ;2049 A9 07
STA $02E3 ;204B 8D E3 02
LDY #$00 ;204E A0 00
label16
INC ICBLHZ ;2050 E6 29
BEQ label13 ;2052 F0 19
CPX ICBLLZ ;2054 E4 28
BEQ label14 ;2056 F0 1A
LDA [data01-offset1],X ;2058 BD 00 08
INX ;205B E8
label19
STA (ICBALZ),Y ;205C 91 24
INY ;205E C8
BNE label15 ;205F D0 02
INC ICBAHZ ;2061 E6 25
label15
INC ICPTLZ ;2063 E6 26
BNE label16 ;2065 D0 E9
INC ICPTHZ ;2067 E6 27
BNE label16 ;2069 D0 E5
BEQ label17 ;206B F0 95
label13
JSR [label18-offset1] ;206D 20 B6 07
BCS label19 ;2070 B0 EA
label14
JSR [label20-offset1] ;2072 20 D7 07
BCS label19 ;2075 B0 E5
label09
JSR [label11-offset1] ;2077 20 C9 07
STA ICBALZ ;207A 85 24
JSR [label11-offset1] ;207C 20 C9 07
STA ICBAHZ ;207F 85 25
RTS ;2081 60
label08
JMP ($02E2) ;2082 6C E2 02
label21
JMP JTESTROM ;2085 4C 71 E4
label25
LDX #$09 ;2088 A2 09
.BYTE $2c ; rozkaz BIT powodujacy ominiecie nastepnyc dwoch bajtow ...
label26
LDX #$08 ;208B A2 08
STX [blokDanychIO1-offset1]+5 ;208D 8E B1 07
STY DAUX1 ;2090 8C 0A 03
STA DAUX2 ;2093 8D 0B 03
ORA DAUX1 ;2096 0D 0A 03
BEQ label21 ;2099 F0 EA
label99
LDX #$09 ;209B A2 09
label22
LDA [blokDanychIO1-offset1],X ;209D BD AC 07
STA DDEVIC,X ;20A0 9D 00 03
DEX ;20A3 CA
BPL label22 ;20A4 10 F7
SioJMP
JSR JSIOINT ;20A6 20 59 E4
BMI label99 ;20A9 30 F0
RTS ;20AB 60
blokDanychIO1 ;20AC
.BYTE $31,$01,$52,$40,$00,$08,$0A,$00,$80,$00
label18
INC [data00-offset1] ;20B6 EE 00 07
BNE label23 ;20B9 D0 12
INC [data00-offset1]+1 ;20BB EE 01 07
BNE label23 ;20BE D0 0D
LDA #>[JTESTROM-1] ;20C0 A9 E4
PHA ;20C2 48
LDA #<[JTESTROM-1] ;20C3 A9 70
PHA ;20C5 48
JMP ($02E0) ;20C6 6C E0 02
label11
INC ICBLHZ ;20C9 E6 29
BEQ label18 ;20CB F0 E9
label23
CPX ICBLLZ ;20CD E4 28
BEQ label20 ;20CF F0 06
label27
LDA [data01-offset1],X ;20D1 BD 00 08
INX ;20D4 E8
SEC ;20D5 38
Jrts
RTS ;20D6 60
label20
TYA ;20D7 98
PHA ;20D8 48
LDX $0902 ;20D9 AE 02 09
CPX ICBLLZ ;20DC E4 28
BNE label24 ;20DE D0 0B
LDY $0900 ;20E0 AC 00 09
LDA $0901 ;20E3 AD 01 09
JSR [label25-offset1] ;20E6 20 88 07
LDX #$04 ;20E9 A2 04
label24
LDA $0900,X ;20EB BD 00 09
TAY ;20EE A8
LDA $0901,X ;20EF BD 01 09
INX ;20F2 E8
INX ;20F3 E8
STX $0902 ;20F4 8E 02 09
JSR [label26-offset1] ;20F7 20 8B 07
PLA ;20FA 68
TAY ;20FB A8
LDX #$00 ;20FC A2 00
BEQ label27 ;20FE F0 D1
data01
.WORD $0000 ;2100 00 00
LoadStart
LDY MEMLO ;2102 AC E7 02
LDA MEMLO+1 ;2105 AD E8 02
STA [label28-offset1]+2 ;2108 8D 0F 08
label29
LDA #$00 ;210B A9 00
label28
STA $0900,Y ;210D 99 00 09
INY ;2110 C8
BNE label28 ;2111 D0 FA
INC [label28-offset1]+2 ;2113 EE 0F 08
LDA [label28-offset1]+2 ;2116 AD 0F 08
CMP MEMTOP+1 ;2119 CD E6 02
BCC label29 ;211C 90 ED
LDA MEMTOP+1 ;211E AD E6 02
STA [label30-offset1]+2 ;2121 8D 2B 08
LDY MEMTOP ;2124 AC E5 02
LDA #$00 ;2127 A9 00
label30
STA $8000,Y ;2129 99 00 80
DEY ;212C 88
CPY #$FF ;212D C0 FF
BNE label30 ;212F D0 F8
LDA [data01-offset1]+1 ;2131 AD 01 08
LDY [data01-offset1] ;2134 AC 00 08
JSR [label25-offset1] ;2137 20 88 07
LDA #$04 ;213A A9 04
STA $0902 ;213C 8D 02 09
LDA [data02-offset1] ;213F AD 52 08
STA ICBLHZ ;2142 85 29
LDA #$FF ;2144 A9 FF
STA KBCODES ;2146 8D FC 02
INC [WhatIsIt-offset1] ;2149 EE 35 07 !!!!!!!!! Miejmy nadzieje ze to sie nie wykonuje, ale chyba jednak tak!
LDX [blokDanychIO1-offset1]+8 ;214C AE B4 07
JMP [label31-offset1] ;214F 4C 0F 07
data02
.BYTE $00 ;2152 00
CzyTopDrive
.BYTE $00 ; Jesli >0 to transmisja w trybie TopDrive ;2153 00 00
;CzySpeedy
; .byte $00 ; To samo dla trybu Speedy/HDI
CzyHappyUS
.BYTE $00 ; To samo dla Happy i US-Doubler
; Rozkaz DCB odczytujacy blok PERCOM (12b) pod $2900
blokDanychIO2
.BYTE $31,$01,$4E,$40
.WORD FirstSectorBuff
.BYTE$07,$00,$0C,$00 ;2155 31 01
ORA ($00,X) ;215F 01 00
; Zamiana 4 mlodszych bitow z A na liczbe Hex w Ascii (tez w A)
bin2AsciiHex
AND #$0F ;2161 29 0F
ORA #$30 ;2163 09 30
CMP #$3A ;2165 C9 3A
BCC labelka ;2167 90 03
CLC ;2169 18
ADC #$07 ;216A 69 07
labelka
RTS ;216C 60
Edriver
.BYTE "E:",$9b ;216D 45 3A
mainprog
LDX #$00 ;2170 A2 00
JSR CloseX ;2172 20 61 28
BMI ErrorDisplay ;2175 30 5A
LDX #$00 ;2177 A2 00
LDA #$03 ;2179 A9 03
STA ICCMD,X ;217B 9D 42 03
LDA #$0C ;217E A9 0C
STA ICAX1,X ;2180 9D 4A 03
STA ICBUFL,X ;2183 9D 48 03
LDA #$00 ;2186 A9 00
STA ICAX2,X ;2188 9D 4B 03
STA ICBUFL+1,X ;218B 9D 49 03
LDA #<Edriver ;218E A9 6D
STA ICBUFA,X ;2190 9D 44 03
LDA #>Edriver ;2193 A9 21
STA ICBUFA+1,X ;2195 9D 45 03
JSR JCIOMAIN ;2198 20 56 E4
BMI ErrorDisplay ;219B 30 34
LDA #$C4 ;219D A9 C4
STA COLPF2S ;219F 8D C6 02
STA COLBAKS ;21A2 8D C8 02
LDA #$01 ;21A5 A9 01
STA CzyTopDrive ;21A7 8D 53 21
; STA CzySpeedy ;21AA 8D 54 21
STA CzyHappyUS
LDA SKSTAT ;21AD AD 0F D2
AND #$08 ;21B0 29 08
BNE NoRunShift ; czy SHIFT w czasie bootowania ? ;21B2 D0 08
; tu jest 0 w A
; STA CzySpeedy ; jesli tak to wylaczamy przyspieszacze. ;21B4 8D 54 21
STA CzyTopDrive ;21B7 8D 53 21
STA CzyHappyUS
BEQ ReadMainDir ;21BA F0 52
; Odczyt bloku PERCOM procedura przeznaczona dla Top Drive (bo znacznik ustawiony)
NoRunShift
LDY #<blokDanychIO2 ;21BC A0 55
LDX #>blokDanychIO2 ;21BE A2 21
JSR Table2DCB ;21C0 20 4D 28
JSR GoSIO ;21C3 20 18 28
BPL ReadMainDir ;21C6 10 46
; jesli PERCOM sie nie odczytal to nie mamy TopDrive
LDA #$00 ;21C8 A9 00
STA CzyTopDrive ;21CA 8D 53 21
;sprawdzamy jeszcze Happy/US-Doubler
LDY #<blokDanychIO6
LDX #>blokDanychIO6
JSR Table2DCB
JSR JSIOINT
BPL ReadMainDir
; jezeli predkosc sie nie odczytala to brak Happy/US
; ustawienie standardowej predkosci
LDA #$28
STA HappySpeed
LDA #$00
STA CzyHappyUS
BEQ ReadMainDir ;21CD F0 3F
Error148
LDY #$94 ;21CF A0 94
ErrorDisplay
TYA ;21D1 98
PHA ;21D2 48
JSR Close1 ;21D3 20 5F 28
PLA ;21D6 68
PHA ;21D7 48
LSR A ;21D8 4A
LSR A ;21D9 4A
LSR A ;21DA 4A
LSR A ;21DB 4A
JSR bin2AsciiHex ;21DC 20 61 21
STA ErrorNumHex ;21DF 8D F8 21
PLA ;21E2 68
JSR bin2AsciiHex ;21E3 20 61 21
STA ErrorNumHex+1 ;21E6 8D F9 21
JSR PrintXY ;21E9 20 88 27
.BYTE $00,$00 ;21EC 00
;21ED 00
.BYTE $7d ;21EE 7D 45 52
.BYTE "ERROR - $"
ErrorNumHex
.BYTE "00",$00 ;21F8 30
;21F9 30 00
LDA #$FF ;21FB A9 FF
STA KBCODES ;21FD 8D FC 02
WaitKloop
LDX KBCODES ;2200 AE FC 02
INX ;2203 E8
BEQ WaitKloop ;2204 F0 FA
LDA #$FF ;2206 A9 FF
STA KBCODES ;2208 8D FC 02
; ------------------
; na wypadek wybrania nieistniejacej stacji
; po bledzie prechodzimy na D1
LDA #$01
JSR SeTDriveNR
; -----------------
JMP mainprog ;220B 4C 70 21
ReadMainDir
LDX #>FirstSectorBuff ;220E A2 29
LDY #<FirstSectorBuff ;2210 A0 00
JSR ReadFirstSect ;2212 20 3A 27
; Sprawdzenie wersji DOSa pod ktora formatowany byl dysk
LDA FirstSectorBuff+$20 ;2215 AD 20 29
CMP #$11 ;2218 C9 11
BEQ SpartaDisk ;221A F0 04
CMP #$20 ;221C C9 20
BNE Error148 ;221E D0 AF
SpartaDisk
LDX #$00 ;2220 A2 00
; pobranie dlugosci sektora ($00 lub $80)
LDA FirstSectorBuff+$1F ;2222 AD 1F 29
STA blokDanychIO1+8 ;2225 8D B4 20
BNE label38 ;2228 D0 01
INX ;222A E8
label38
STX blokDanychIO1+9 ;222B 8E B5 20
; pobranie numeru pierwszego sektora mapy sektorow glownego katalogu
LDY FirstSectorBuff+$09 ;222E AC 09 29
LDX FirstSectorBuff+$0A ;2231 AE 0A 29
label02
STY DirMapSect ;2234 84 D2
STX DirMapSect+1 ;2236 86 D3
LDA #>DirSectorBuff ;2238 A9 2A
STA CurrentFileInfoBuff+1 ;223A 85 D1
STA CurrentDirBuf+1 ;223C 85 CB
LDA #<DirSectorBuff ;223E A9 80
STA CurrentFileInfoBuff ;2240 85 D0
STA CurrentDirBuf ;2242 85 CA
LDA #$00 ;2244 A9 00
STA $D4 ;2246 85 D4
STA $D5 ;2248 85 D5
LDA #$17 ;224A A9 17
JSR label39 ;224C 20 5C 26
LDA CurrentFileInfoBuff ;224F A5 D0
STA $CC ;2251 85 CC
LDA CurrentFileInfoBuff+1 ;2253 A5 D1
STA $CD ;2255 85 CD
LDA #$00 ;2257 A9 00
STA $D7 ;2259 85 D7
STA $D8 ;225B 85 D8
LDA CurrentDirBuf ;225D A5 CA
STA CurrentFileInfoBuff ;225F 85 D0
LDA CurrentDirBuf+1 ;2261 A5 CB
STA CurrentFileInfoBuff+1 ;2263 85 D1
label46
LDA CurrentFileInfoBuff+1 ;2265 A5 D1
CMP $CD ;2267 C5 CD
BCC label40 ;2269 90 08
BNE label41 ;226B D0 71
LDA CurrentFileInfoBuff ;226D A5 D0
CMP $CC ;226F C5 CC
BCS label41 ;2271 B0 6B
label40
LDY #$00 ;2273 A0 00
LDA (CurrentFileInfoBuff),Y ;2275 B1 D0
AND #$38 ;2277 29 38
CMP #$08 ;2279 C9 08
BNE label42 ;227B D0 1C
LDY #$10 ;227D A0 10
LDX #$0A ;227F A2 0A
label43
LDA (CurrentFileInfoBuff),Y ;2281 B1 D0
CMP ProgName,X ;2283 DD 8E 22
BNE label42 ;2286 D0 11
DEY ;2288 88
DEX ;2289 CA
BPL label43 ;228A 10 F5
BMI label44 ;228C 30 19
ProgName
.BYTE "MSDOS DAT" ;228E 4D 53 44
label42
LDA CurrentFileInfoBuff ;2299 A5 D0
CLC ;229B 18
ADC #$17 ;229C 69 17
STA CurrentFileInfoBuff ;229E 85 D0
BCC label45 ;22A0 90 02
INC CurrentFileInfoBuff+1 ;22A2 E6 D1
label45
JMP label46 ;22A4 4C 65 22
label44
LDY #$01 ;22A7 A0 01
LDA (CurrentFileInfoBuff),Y ;22A9 B1 D0
STA DirMapSect ;22AB 85 D2
INY ;22AD C8
LDA (CurrentFileInfoBuff),Y ;22AE B1 D0
STA DirMapSect+1 ;22B0 85 D3
INY ;22B2 C8
LDA (CurrentFileInfoBuff),Y ;22B3 B1 D0
STA $D4 ;22B5 85 D4
INY ;22B7 C8
LDA (CurrentFileInfoBuff),Y ;22B8 B1 D0
STA $D5 ;22BA 85 D5
INY ;22BC C8
LDA (CurrentFileInfoBuff),Y ;22BD B1 D0
BEQ label47 ;22BF F0 06
LDA #$FF ;22C1 A9 FF
STA $D4 ;22C3 85 D4
STA $D5 ;22C5 85 D5
label47
LDA $CC ;22C7 A5 CC
STA CurrentFileInfoBuff ;22C9 85 D0
LDA $CD ;22CB A5 CD
STA CurrentFileInfoBuff+1 ;22CD 85 D1
LDA #$2E ;22CF A9 2E
JSR label39 ;22D1 20 5C 26
LDA CurrentFileInfoBuff ;22D4 A5 D0
STA $CE ;22D6 85 CE
LDA CurrentFileInfoBuff+1 ;22D8 A5 D1
STA $CF ;22DA 85 CF
INC $D8 ;22DC E6 D8
label41
LDA #$00 ;22DE A9 00
STA $D6 ;22E0 85 D6
LDA CurrentDirBuf ;22E2 A5 CA
CLC ;22E4 18
ADC #$17 ;22E5 69 17
STA CurrentFileInfoBuff ;22E7 85 D0
LDA CurrentDirBuf+1 ;22E9 A5 CB
ADC #$00 ;22EB 69 00
STA CurrentFileInfoBuff+1 ;22ED 85 D1
label71
JSR PrintXY ;22EF 20 88 27
.BYTE $00,$00 ;22F2 00
.BYTE $7d ;22F4 7D A0 CD
.BYTE +$80," Drv: D"
DriveDisp1 ; "
.BYTE +$80,"1: MSDOS 3.1 by BEWESOFT 93-2007 " ; w inversie
.BYTE $00 ;231D 00
JSR PrintXY ;231E 20 88 27
.BYTE $01,$16 ;2321 01 16
.BYTE +$80,"SPACE"
.BYTE ":Continue "
.BYTE +$80,"SHIFT"
.BYTE "+...No High Speed" ;2323 D3
.BYTE $00 ;2349 00
JSR PrintXY ;234A 20 88 27
.BYTE $02,$17
.BYTE +$80,"ESC"
.BYTE ":All files "
.BYTE +$80,">"
.BYTE ":Main Dir. "
.BYTE +$80,"<"
.BYTE ":UP-DIR."
.BYTE $00 ;2374 00
LDA #$00 ;2375 A9 00
STA $D9 ;2377 85 D9
label68
LDA CurrentFileInfoBuff+1 ;2379 A5 D1
CMP $CD ;237B C5 CD
BCC label48 ;237D 90 08
BNE label49 ;237F D0 55
LDA CurrentFileInfoBuff ;2381 A5 D0
CMP $CC ;2383 C5 CC
BCS label49 ;2385 B0 4F
label48
LDY #$00 ;2387 A0 00
LDA (CurrentFileInfoBuff),Y ;2389 B1 D0
BEQ label49 ;238B F0 49
LDX #$22 ;238D A2 22
LDA #$20 ; spacja ;238F A9 20
label50
STA GameName,X ;2391 9D 34 24
DEX ;2394 CA
BPL label50 ;2395 10 FA
LDY #$10 ;2397 A0 10
LDX #$0A ;2399 A2 0A
label51
LDA (CurrentFileInfoBuff),Y ;239B B1 D0
STA GameName,X ;239D 9D 34 24
DEY ;23A0 88
DEX ;23A1 CA
BPL label51 ;23A2 10 F7
LDA $D9 ;23A4 A5 D9
CLC ;23A6 18
ADC #$41 ; literka "A" ;23A7 69 41
STA GameKeySymbol ;23A9 8D 31 24
LDA $D8 ;23AC A5 D8
BNE label52 ;23AE D0 2C
LDY #$00 ;23B0 A0 00
; status sprawdzanego pliku
LDA (CurrentFileInfoBuff),Y ;23B2 B1 D0
AND #$19 ;23B4 29 19
CMP #$09 ;23B6 C9 09
; sprawdzamy czy Nie skasowany, zabezpieczony i "w uzyciu"
BEQ label53 ;23B8 F0 08
LDX $D7 ;23BA A6 D7
BEQ label54 ;23BC F0 1B
CMP #$08 ;23BE C9 08
BNE label54 ;23C0 D0 17
label53
; jeszcze raz status sprawdzanego pliku
LDA (CurrentFileInfoBuff),Y ;23C2 B1 D0
AND #$20 ;23C4 29 20
; sprawdzenie czy to podkatalog jesni nie 'label55' (czyli plik)
BEQ label55 ;23C6 F0 0B
; obsluga wyswietlenia nazwy podlatalogu (dopisanie "<SUB-DIR>")
LDX #$08 ;23C8 A2 08
label56
LDA SubDirText,X ;23CA BD 0C 25
STA [GameName+12] ;23CD 9D 40 24
DEX ;23D0 CA
BPL label56 ;23D1 10 F7
label55
JMP label57 ;23D3 4C 24 24
label49
JMP label58 ;23D6 4C BF 24
label54
JMP label59 ;23D9 4C 7C 24
label52
LDY #$00 ;23DC A0 00
LDA (CurrentFileInfoBuff),Y ;23DE B1 D0
AND #$18 ;23E0 29 18
CMP #$08 ;23E2 C9 08
BNE label54 ;23E4 D0 F3
LDA $CC ;23E6 A5 CC
STA $D4 ;23E8 85 D4
LDA $CD ;23EA A5 CD
STA $D5 ;23EC 85 D5
label65
LDA $D5 ;23EE A5 D5
CMP $CF ;23F0 C5 CF
BCC label60 ;23F2 90 08
BNE label54 ;23F4 D0 E3
LDA $D4 ;23F6 A5 D4
CMP $CE ;23F8 C5 CE
BCS label54 ;23FA B0 DD
; Porownanie nazwy pliku do wyswietlenia z nazwa z MSDOS.DAT
label60
LDY #$0A ;23FC A0 0A
label62
LDA ($D4),Y ;23FE B1 D4
CMP GameName,Y ;2400 D9 34 24
BNE label61 ;2403 D0 11
DEY ;2405 88
BPL label62 ;2406 10 F6
; Wpisanie nazwy "ekranowej" zamiast nazwy pliku
LDY #$0B ;2408 A0 0B
label63
LDA ($D4),Y ;240A B1 D4
STA GameName-$0B,Y ;240C 99 29 24
INY ;240F C8
CPY #$2E ;2410 C0 2E
BCC label63 ;2412 90 F6
BCS label57 ;2414 B0 0E
label61
LDA $D4 ;2416 A5 D4
CLC ;2418 18
ADC #$2E ;2419 69 2E
STA $D4 ;241B 85 D4
BCC label64 ;241D 90 02
INC $D5 ;241F E6 D5
label64
JMP label65 ;2421 4C EE 23
label57
LDA $D9 ;2424 A5 D9
CLC ;2426 18
ADC #$02 ;2427 69 02
STA YposGameName ;2429 8D 30 24
JSR PrintXY ;242C 20 88 27
.BYTE $01 ;242F 01
YposGameName
.BYTE $02
GameKeySymbol
.BYTE "A) " ;2431 41 29 20
GameName
.BYTE " " ;2434 20 20 20
.BYTE $00 ;2457 00
LDA $D9 ;2458 A5 D9
ASL A ;245A 0A
TAX ;245B AA
LDA CurrentFileInfoBuff ;245C A5 D0
STA data03,X ;245E 9D CA 28
LDA CurrentFileInfoBuff+1 ;2461 A5 D1
STA data03+1,X ;2463 9D CB 28
LDA CurrentFileInfoBuff ;2466 A5 D0
CLC ;2468 18
ADC #$17 ;2469 69 17
STA CurrentFileInfoBuff ;246B 85 D0
BCC label66 ;246D 90 02
INC CurrentFileInfoBuff+1 ;246F E6 D1
label66
INC $D9 ;2471 E6 D9
LDA $D9 ;2473 A5 D9
CMP #$13 ;2475 C9 13
BCS label67 ;2477 B0 35
JMP label68 ;2479 4C 79 23
label59
LDA CurrentFileInfoBuff ;247C A5 D0
CLC ;247E 18
ADC #$17 ;247F 69 17
STA CurrentFileInfoBuff ;2481 85 D0
BCC label69 ;2483 90 02
INC CurrentFileInfoBuff+1 ;2485 E6 D1
label69
JMP label68 ;2487 4C 79 23
MainDirKEY
JMP ReadMainDir ;248A 4C 0E 22
UpDirKEY
LDY #$02 ;248D A0 02
LDA (CurrentDirBuf),Y ;248F B1 CA
TAX ;2491 AA
DEY ;2492 88
ORA (CurrentDirBuf),Y ;2493 11 CA
BEQ KeyboardProc ;2495 F0 2A
LDA (CurrentDirBuf),Y ;2497 B1 CA
TAY ;2499 A8
JMP label02 ;249A 4C 34 22
EscKEY
LDX #$00 ;249D A2 00
STX $D8 ;249F 86 D8
INX ;24A1 E8
STX $D7 ;24A2 86 D7
label70
JMP label41 ;24A4 4C DE 22
SpaceKEY
LDA $D6 ;24A7 A5 D6
BNE label70 ;24A9 D0 F9
JMP label71 ;24AB 4C EF 22
label67
JSR PrintXY ;24AE 20 88 27
.BYTE $01,$15 ;24B1 01 15
.BYTE $1D
.BYTE $00 ;24B3 1D 00
JSR PrintXY ;24B5 20 88 27
.BYTE $0E,$15 ;24B8 0E 15
.BYTE $1D
.BYTE $00 ;24BA 1D 00
JMP KeyboardProc ;24BC 4C C1 24
label58
INC $D6 ;24BF E6 D6
KeyboardProc
JSR GetKey ;24C1 20 69 28
PHA ;24C4 48
LDA SKSTAT ;24C5 AD 0F D2
AND #$08 ;24C8 29 08
BNE NoSHIFT ;24CA D0 08
LDA #$00 ;24CC A9 00
STA CzyTopDrive ;24CE 8D 53 21
; STA CzySpeedy ;24D1 8D 54 21
STA CzyHappyUS
NoSHIFT
PLA ;24D4 68
CMP #$3E ; ">" ;24D5 C9 3E
BEQ MainDirKEY ;24D7 F0 B1
CMP #$3C ; "<" ;24D9 C9 3C
BEQ UpDirKEY ;24DB F0 B0
CMP #$1B ; Esc ;24DD C9 1B
BEQ EscKEY ;24DF F0 BC
CMP #$20 ;24E1 C9 20
BEQ SpaceKEY ;24E3 F0 C2
; ----------------
; sprawdzenie klawiszy 1-8
CMP #'1
BCC NoNumber
CMP #'9
BCS NoNumber
SEC
SBC #'0
JSR SeTDriveNR
; jmp MainDirKEY
JMP mainprog
; -----------------
NoNumber
SEC ;24E5 38
SBC #$41 ; "A" ;24E6 E9 41
CMP $D9 ;24E8 C5 D9
BCS KeyboardProc ;24EA B0 D5
ASL A ;24EC 0A
TAX ;24ED AA
LDA data03,X ;24EE BD CA 28
STA $D4 ;24F1 85 D4
LDA data03+1,X ;24F3 BD CB 28
STA $D5 ;24F6 85 D5
LDY #$00 ;24F8 A0 00
LDA ($D4),Y ;24FA B1 D4
AND #$20 ;24FC 29 20
BEQ label01 ;24FE F0 15
LDY #$02 ;2500 A0 02
LDA ($D4),Y ;2502 B1 D4
TAX ;2504 AA
DEY ;2505 88
LDA ($D4),Y ;2506 B1 D4
TAY ;2508 A8
JMP label02 ;2509 4C 34 22
SubDirText
.BYTE "<SUB-DIR>" ;250C 3C
label01
JSR DiscChangeCheck ;2515 20 B3 28
BEQ label04 ;2518 F0 03
JMP ReadMainDir ;251A 4C 0E 22
label04
LDY #$01 ;251D A0 01
LDA ($D4),Y ;251F B1 D4
STA data01 ;2521 8D 00 21
INY ;2524 C8
LDA ($D4),Y ;2525 B1 D4
STA data01+1 ;2527 8D 01 21
INY ;252A C8
LDA ($D4),Y ;252B B1 D4
EOR #$FF ;252D 49 FF
STA data02 ;252F 8D 52 21
INY ;2532 C8
LDA ($D4),Y ;2533 B1 D4
EOR #$FF ;2535 49 FF
STA data00 ;2537 8D 00 20
INY ;253A C8
LDA ($D4),Y ;253B B1 D4
EOR #$FF ;253D 49 FF
STA data00+1 ;253F 8D 01 20
LDA #$00 ;2542 A9 00
STA COLDST ;2544 8D 44 02
LDA #$02 ;2547 A9 02
STA BOOT ;2549 85 09
STA $03F8 ;254B 8D F8 03
LDA #<label06 ;254E A9 65
STA CASINI ;2550 85 02
LDA #>label06 ;2552 A9 25
STA CASINI+1 ;2554 85 03
LDA #>JRESETCD ;2556 A9 E4
STA DOSVEC+1 ;2558 85 0B
STA DOSINI+1 ;255A 85 0D
LDA #<JRESETCD ;255C A9 77
STA DOSVEC ;255E 85 0A
STA DOSINI ;2560 85 0C
JMP JRESETWM ;2562 4C 74 E4
label06
LDA #$00 ;2565 A9 00
STA MEMLO ;2567 8D E7 02
STA BOOT ;256A 85 09
STA APPMHI ;256C 85 0E
LDA #$0A ;256E A9 0A
STA MEMLO+1 ;2570 8D E8 02
STA APPMHI+1 ;2573 85 0F
LDA #<JRESETCD ;2575 A9 77
STA CASINI ;2577 85 02
LDA #>JRESETCD ;2579 A9 E4
STA CASINI+1 ;257B 85 03
INC $033D ;257D EE 3D 03
INC $033E ;2580 EE 3E 03
DEC $033F ;2583 CE 3F 03
LDX #$00 ;2586 A2 00
moveloop1
LDA movedproc,X ;2588 BD 00 20
STA $0700,X ;258B 9D 00 07
LDA movedproc+$0100,X ;258E BD 00 21
STA $0800,X ;2591 9D 00 08
INX ;2594 E8
BNE moveloop1 ;2595 D0 F1
LDX #$00 ;2597 A2 00
LDA #$00 ;2599 A9 00
ClearLoop1
STA $0100,X ;259B 9D 00 01
STA $0400,X ;259E 9D 00 04
STA $0500,X ;25A1 9D 00 05
STA $0600,X ;25A4 9D 00 06
CPX #$80 ;25A7 E0 80
BCC NoZpage ;25A9 90 02
STA $00,X ;25AB 95 00
NoZpage
INX ;25AD E8
BNE ClearLoop1 ;25AE D0 EB
LDX #$FF ;25B0 A2 FF
TXS ;25B2 9A
JSR label07 ;25B3 20 B9 25
JMP [LoadStart-offset1] ;25B6 4C 02 08
label07
LDA CzyTopDrive ;25B9 AD 53 21
BEQ NoTopDriveLoader ;25BC F0 11
LDX #[EndTopDriveProc-TopDriveMovedProc]-1 ;25BE A2 34
label72
LDA TopDriveMovedProc,X ;25C0 BD 0C 26
STA $0A00,X ;25C3 9D 00 0A
DEX ;25C6 CA
BPL label72 ;25C7 10 F7
LDY #[EndTopDriveProc-TopDriveMovedProc] ;25C9 A0 35
LDX #$00 ;25CB A2 00
BEQ label73 ;25CD F0 23
NoTopDriveLoader
; LDA CzySpeedy ;25CF AD 54 21
; BEQ NoSpeedyLoader ;25D2 F0 37
;; Pytanie stacji o dlugosc procedury szybkiej transmisji
; LDY #<blokDanychIO3 ;25D4 A0 41
; LDX #>blokDanychIO3 ;25D6 A2 26
; JSR Table2DCB ;25D8 20 4D 28
; JSR JSIOINT ;25DB 20 59 E4
; BMI NoSpeedyLoader ;25DE 30 2B
;; Wczytanie procedury szybkiej transmisji pod $0a00
; LDY #<blokDanychIO4 ;25E0 A0 4D
; LDX #>blokDanychIO4 ;25E2 A2 26
; JSR Table2DCB ;25E4 20 4D 28
; JSR JSIOINT ;25E7 20 59 E4
; BMI NoSpeedyLoader ;25EA 30 1F
;; Dlugosc procedury szybkiej transmisji do X i Y
; LDY blokDanychIO4+8 ;25EC AC 55 26
; LDX blokDanychIO4+9 ;25EF AE 56 26
; jmp label73
NoSpeedyLoader
LDA CzyHappyUS
BEQ NoHappyLoader
; Pytanie stacji o predkosc transmisji Happy/US-Doubler
; ldy #<blokDanychIO6 ; po co pytac jak wiadomo ?
; ldx #>blokDanychIO6
; jsr Table2DCB
; jsr JSIOINT ; "?"
; bmi NoHappyLoader
LDY #0
LDX #[$A-1] ;xjsrA - the last
HappyRelocate
SEC
LDA xjsrTableL,x
STA SecBuffer
LDA xjsrTableH,x
STA SecBuffer+1
LDA (SecBuffer),y
SBC #<HappyOffset
STA (SecBuffer),y
INY
LDA (SecBuffer),y
SBC #>HappyOffset
STA (SecBuffer),y
DEY
DEX
BPL HappyRelocate
LDX #[EndHappyUSProc-HappyUSMovedProc]
label72x
LDA HappyUSMovedProc-1,X
STA $0A00-1,X
DEX
BNE label72x
LDY #[EndHappyUSProc-HappyUSMovedProc]
LDX #$00
; Zwiekszenie Memlo o dlugosc procedury i przelaczenie skoku do niej.
label73
TYA ;25F2 98
CLC ;25F3 18
ADC MEMLO ;25F4 6D E7 02
STA MEMLO ;25F7 8D E7 02
TXA ;25FA 8A
ADC MEMLO+1 ;25FB 6D E8 02
STA MEMLO+1 ;25FE 8D E8 02
LDA #<[TopDriveMovedProc-offset2] ;2601 A9 00
STA [SioJMP-offset1]+1 ;2603 8D A7 07
LDA #>[TopDriveMovedProc-offset2] ;2606 A9 0A
STA [SioJMP-offset1]+2 ;2608 8D A8 07
NoHappyLoader
RTS ;260B 60
; UWAGA !!!!!!!!!!!!!!
; Ta procedura ma maksymalna dlugosc jaka moze miec!!!!!
; powiekszenie jej O BAJT spowoduje ze przekroczy strone
; i nie przepisze sie prawidlowo na swoje miejsce !!!!!
HappyUSMovedProc ;
HappyOffset=[HappyUSMovedProc-$a00]
LDA DBUFA
STA SecBuffer
LDA DBUFA+1
STA SecBuffer+1
LDA DBYT
STA SecLen
SEI
TSX
STX StackCopy
LDA #$0D
STA CRETRYZ
;command retry on zero page
CommandLoop
HappySpeed = *+1
LDA #$28 ;here goes speed from "?"
STA AUDF3
LDA #$34
STA PBCTL ;ustawienie linii command
LDX #$80
DelayLoopCmd
DEX
BNE DelayLoopCmd
STX AUDF4 ; zero
; STX CheckSum ; ------------------- nie potrzebne !!!!!
STX TransmitError
; pokey init
LDA #$23
xjsr1 JSR SecTransReg
;
CLC
LDA DDEVIC ; tu zawsze jest $31 (przynajmniej powinno)
ADC DUNIT ; dodajemy numer stacji
ADC #$FF ; i odejmujemy jeden (jak w systemie Atari)
STA CheckSum
STA SEROUT
LDA DCOMND
xjsr2 JSR PutSIOByte
LDA DAUX1
xjsr3 JSR PutSIOByte
LDA DAUX2
xjsr4 JSR PutSIOByte
LDA CheckSum
xjsr5 JSR PutSIOByte
waitforEndOftransmission
LDA IRQST
AND #$08
BNE waitforEndOftransmission
LDA #$13
xjsr6 JSR SecTransReg
LDA #$3c
STA PBCTL ;command line off
; two ACK's
LDY #2
DoubleACK
xjsr7 JSR GetSIOByte
CMP #$44
BCS ErrorHere
DEY
BNE DoubleACK
;ldy #0
STY CheckSum
ReadSectorLoop
xjsr8 JSR GetSIOByte
STA (SecBuffer),y
xjsr9 JSR AddCheckSum
INY
CPY SecLen
BNE ReadSectorLoop
xjsrA JSR GetSIOByte
CMP CheckSum
BEQ EndOfTransmission
;error!!!
ErrorHere
LDY #$90
STY TransmitError
LDX StackCopy
TXS
DEC CRETRYZ
BNE CommandLoop
EndOfTransmission
LDA #0
STA AUDC4
LDA IRQENS
STA IRQEN
CLI
LDY TransmitError
RTS
SecTransReg
STA SKCTL
STA SKSTRES
LDA #$38
STA IRQEN
LDA #$28
STA AUDCTL
LDA #$A8
STA AUDC4
RTS
PutSIOByte
TAX
waitforSerial
LDA IRQST
AND #$10
BNE waitforSerial
STA IRQEN
LDA #$10
STA IRQEN
TXA
STA SEROUT
AddCheckSum
CLC
ADC CheckSum
ADC #0
STA CheckSum
RTS
GetSIOByte
LDX #10 ;acktimeout
ExternalLoop
LDA #0
STA looperka
InternalLoop
LDA IRQST
AND #$20
BEQ ACKReceive
DEC looperka
BNE InternalLoop
DEX
BNE ExternalLoop
BEQ ErrorHere
ACKReceive
; zero we have now
STA IRQST
LDA #$20
STA IRQST
LDA SKSTAT
STA SKSTRES
AND #$20
BEQ ErrorHere
;
LDA SERIN
RTS
EndHappyUSProc
TopDriveMovedProc
LDA VSERIN ;260C AD 0A 02
STA [OldSerInJmp-offset2]+1 ;260F 8D 33 0A
PHA ;2612 48
LDA VSERIN+1 ;2613 AD 0B 02
STA [OldSerInJmp-offset2]+2 ;2616 8D 34 0A
PHA ;2619 48
LDA DCOMND ;261A AD 02 03
ORA #$80 ;261D 09 80
STA DCOMND ;261F 8D 02 03
LDA #<[NewSerInInterrupt-offset2] ;2622 A9 2D
STA VSERIN ;2624 8D 0A 02
LDA #>[NewSerInInterrupt-offset2] ;2627 A9 0A
STA VSERIN+1 ;2629 8D 0B 02
JSR JSIOINT ;262C 20 59 E4
PLA ;262F 68
STA VSERIN+1 ;2630 8D 0B 02
PLA ;2633 68
STA VSERIN ;2634 8D 0A 02
TYA ;2637 98
RTS ;2638 60
NewSerInInterrupt
LDA #$10 ;2639 A9 10
STA AUDF3 ;263B 8D 04 D2
OldSerInJmp
JMP $FFFF ;263E 4C FF FF
EndTopDriveProc
; Rockaz DCB "?" pobierrajacy predkosc dla Happy i US-Doubler
blokDanychIO6
; Rozkazy DCB do wszytania procedury turbo dla Speedy/HDI
.BYTE $31,$01,$3f,$40
.WORD HappySpeed
.BYTE $07,$00,$01,$00,$00,$0A
;blokDanychIO3
; .byte $31,$01,$68,$40 ;2641 31 01
; .word [blokDanychIO4+8]
; .byte $07,$00,$02,$00,$00,$0A
;blokDanychIO4
; .byte $31,$01,$69,$40,$00,$0A,$07,$00,$01,$00,$00,$0A ;264D 31 01
DirMapEnd
JMP label75 ;2659 4C 0D 27
label39
STA $DA ;265C 85 DA
LDA CurrentFileInfoBuff ;265E A5 D0
STA $DB ;2660 85 DB
LDA CurrentFileInfoBuff+1 ;2662 A5 D1
STA $DC ;2664 85 DC
JSR DiscChangeCheck ;2666 20 B3 28
BEQ label76 ;2669 F0 05
PLA ;266B 68
PLA ;266C 68
JMP ReadMainDir ;266D 4C 0E 22
label76
LDA DirMapSect ;2670 A5 D2
STA blokDanychIO5+10 ;2672 8D 85 27
LDA DirMapSect+1 ;2675 A5 D3
STA blokDanychIO5+11 ;2677 8D 86 27
ORA blokDanychIO5+10 ;267A 0D 85 27
BEQ DirMapEnd ;267D F0 DA
LDX #>DirMapSectorBuff ;267F A2 29
LDY #<DirMapSectorBuff ;2681 A0 80
JSR ReadSector ;2683 20 48 27
LDA DirMapSectorBuff ;2686 AD 80 29
STA DirMapSect ;2689 85 D2
LDA DirMapSectorBuff+1 ;268B AD 81 29
STA DirMapSect+1 ;268E 85 D3
LDA #$04 ;2690 A9 04
STA $D6 ;2692 85 D6
label80
LDX $D6 ;2694 A6 D6
CPX blokDanychIO1+8 ;2696 EC B4 20
BEQ label76 ;2699 F0 D5
LDA DirMapSectorBuff,X ;269B BD 80 29
STA blokDanychIO5+10 ;269E 8D 85 27
LDA DirMapSectorBuff+1,X ;26A1 BD 81 29
STA blokDanychIO5+11 ;26A4 8D 86 27
ORA blokDanychIO5+10 ;26A7 0D 85 27
BEQ label75 ;26AA F0 61
INX ;26AC E8
INX ;26AD E8
STX $D6 ;26AE 86 D6
LDA MEMTOP ;26B0 AD E5 02
SEC ;26B3 38
SBC CurrentFileInfoBuff ;26B4 E5 D0
LDA MEMTOP+1 ;26B6 AD E6 02
SBC CurrentFileInfoBuff+1 ;26B9 E5 D1
BEQ label75 ;26BB F0 50
LDY CurrentFileInfoBuff ;26BD A4 D0
LDX CurrentFileInfoBuff+1 ;26BF A6 D1
JSR ReadSector ;26C1 20 48 27
LDA $D4 ;26C4 A5 D4
ORA $D5 ;26C6 05 D5
BNE label79 ;26C8 D0 16
LDY #$03 ;26CA A0 03
LDA (CurrentFileInfoBuff),Y ;26CC B1 D0
STA $D4 ;26CE 85 D4
INY ;26D0 C8
LDA (CurrentFileInfoBuff),Y ;26D1 B1 D0
STA $D5 ;26D3 85 D5
INY ;26D5 C8
LDA (CurrentFileInfoBuff),Y ;26D6 B1 D0
BEQ label79 ;26D8 F0 06
LDA #$FF ;26DA A9 FF
STA $D4 ;26DC 85 D4
STA $D5 ;26DE 85 D5
label79
LDA CurrentFileInfoBuff ;26E0 A5 D0
CLC ;26E2 18
ADC blokDanychIO1+8 ;26E3 6D B4 20
STA CurrentFileInfoBuff ;26E6 85 D0
LDA CurrentFileInfoBuff+1 ;26E8 A5 D1
ADC blokDanychIO1+9 ;26EA 6D B5 20
STA CurrentFileInfoBuff+1 ;26ED 85 D1
LDA $D4 ;26EF A5 D4
SEC ;26F1 38
SBC blokDanychIO1+8 ;26F2 ED B4 20
STA $D4 ;26F5 85 D4
LDA $D5 ;26F7 A5 D5
SBC blokDanychIO1+9 ;26F9 ED B5 20
STA $D5 ;26FC 85 D5
BCS label80 ;26FE B0 94
LDA CurrentFileInfoBuff ;2700 A5 D0
CLC ;2702 18
ADC $D4 ;2703 65 D4
STA CurrentFileInfoBuff ;2705 85 D0
LDA CurrentFileInfoBuff+1 ;2707 A5 D1
ADC $D5 ;2709 65 D5
STA CurrentFileInfoBuff+1 ;270B 85 D1
label75
LDA $DC ;270D A5 DC
CMP CurrentFileInfoBuff+1 ;270F C5 D1
BCC label81 ;2711 90 0B
BNE label82 ;2713 D0 17
LDA $DB ;2715 A5 DB
CMP CurrentFileInfoBuff ;2717 C5 D0
BCC label81 ;2719 90 03
BNE label82 ;271B D0 0F
RTS ;271D 60
label81
LDA $DB ;271E A5 DB
CLC ;2720 18
ADC $DA ;2721 65 DA
STA $DB ;2723 85 DB
BCC label75 ;2725 90 E6
INC $DC ;2727 E6 DC
JMP label75 ;2729 4C 0D 27
label82
LDA $DB ;272C A5 DB
SEC ;272E 38
SBC $DA ;272F E5 DA
STA CurrentFileInfoBuff ;2731 85 D0
LDA $DC ;2733 A5 DC
SBC #$00 ;2735 E9 00
STA CurrentFileInfoBuff+1 ;2737 85 D1
RTS ;2739 60
; wczytuje pierwszy sektor dysku pod adres zawarty w X(starszy) i Y(mlodszy)
ReadFirstSect
LDA #$01 ;273A A9 01
STA blokDanychIO5+10 ;273C 8D 85 27
LDA #$00 ;273F A9 00
STA blokDanychIO5+11 ;2741 8D 86 27
LDA #$80 ;2744 A9 80
BNE ReadSectorA ;2746 D0 03
; Wczytuje sektror ustalajac jego dlugosc na podstawie blokDanychIO1
; reszta danych jak nizej (A nie wazne)
ReadSector
LDA blokDanychIO1+8 ;2748 AD B4 20
; Wczytuje sektor (numer musi byc juz podany w blokDanychIO5 !!)
; o dlugosci A($00 lub $80) pod adres X(starszy) Y(mlodszy)
ReadSectorA
STA blokDanychIO5+8 ;274B 8D 83 27
STX blokDanychIO5+5 ;274E 8E 80 27
STY blokDanychIO5+4 ;2751 8C 7F 27
LDX #$00 ;2754 A2 00
LDA blokDanychIO5+8 ;2756 AD 83 27
BNE label84 ;2759 D0 01
INX ;275B E8
label84
STX blokDanychIO5+9 ;275C 8E 84 27
LDA #$04 ;275F A9 04
STA DiskRetryCount ;2761 8D 87 27
DiskReadRetry
LDY #<blokDanychIO5 ;2764 A0 7B
LDX #>blokDanychIO5 ;2766 A2 27
JSR Table2DCB ;2768 20 4D 28
JSR GoSIO ;276B 20 18 28
BMI label85 ;276E 30 01
RTS ;2770 60
label85
DEC DiskRetryCount ;2771 CE 87 27
BNE DiskReadRetry ;2774 D0 EE
PLA ;2776 68
PLA ;2777 68
JMP ErrorDisplay ;2778 4C D1 21
blokDanychIO5
.BYTE $31,$01,$52,$40
.WORD DirMapSectorBuff
.BYTE $0A,$00,$80,$00,$01,$00 ;277B 31 01
DiskRetryCount
.BYTE $00 ;2787 00
PrintXY
PLA ;2788 68
STA $C8 ;2789 85 C8
PLA ;278B 68
STA $C9 ;278C 85 C9
LDA #$00 ;278E A9 00
STA $DF ;2790 85 DF
JSR label87 ;2792 20 0A 28
PHA ;2795 48
JSR label87 ;2796 20 0A 28
STA $DE ;2799 85 DE
ASL A ;279B 0A
ASL A ;279C 0A
CLC ;279D 18
ADC $DE ;279E 65 DE
ASL A ;27A0 0A
ASL A ;27A1 0A
ROL $DF ;27A2 26 DF
ASL A ;27A4 0A
ROL $DF ;27A5 26 DF
CLC ;27A7 18
ADC SAVMSC ;27A8 65 58
STA $DE ;27AA 85 DE
LDA $DF ;27AC A5 DF
ADC SAVMSC+1 ;27AE 65 59
STA $DF ;27B0 85 DF
PLA ;27B2 68
TAY ;27B3 A8
label92
JSR label87 ;27B4 20 0A 28
CMP #$00 ;27B7 C9 00
BEQ label88 ;27B9 F0 48
CMP #$7D ;27BB C9 7D
BEQ label89 ;27BD F0 21
LDX #$00 ;27BF A2 00
STX $E0 ;27C1 86 E0
CMP #$80 ;27C3 C9 80
ROR $E0 ;27C5 66 E0
AND #$7F ;27C7 29 7F
CMP #$20 ;27C9 C9 20
BCS label90 ;27CB B0 04
ORA #$40 ;27CD 09 40
BNE label91 ;27CF D0 07
label90
CMP #$60 ;27D1 C9 60
BCS label91 ;27D3 B0 03
SEC ;27D5 38
SBC #$20 ;27D6 E9 20
label91
ORA $E0 ;27D8 05 E0
STA ($DE),Y ;27DA 91 DE
INY ;27DC C8
JMP label92 ;27DD 4C B4 27
label89
TYA ;27E0 98
PHA ;27E1 48
LDA SAVMSC ;27E2 A5 58
STA $E0 ;27E4 85 E0
LDA #$03 ;27E6 A9 03
TAX ;27E8 AA
CLC ;27E9 18
ADC SAVMSC+1 ;27EA 65 59
STA $E1 ;27EC 85 E1
LDY #$BF ;27EE A0 BF
LDA #$00 ;27F0 A9 00
label93
STA ($E0),Y ;27F2 91 E0
DEY ;27F4 88
CPY #$FF ;27F5 C0 FF
BNE label93 ;27F7 D0 F9
DEC $E1 ;27F9 C6 E1
DEX ;27FB CA
BPL label93 ;27FC 10 F4
PLA ;27FE 68
TAY ;27FF A8
JMP label92 ;2800 4C B4 27
label88
LDA $C9 ;2803 A5 C9
PHA ;2805 48
LDA $C8 ;2806 A5 C8
PHA ;2808 48
RTS ;2809 60
label87
INC $C8 ;280A E6 C8
BNE label94 ;280C D0 02
INC $C9 ;280E E6 C9
label94
LDX #$00 ;2810 A2 00
LDA ($C8,X) ;2812 A1 C8
RTS ;2814 60
GoErrorDisp
JMP ErrorDisplay ;2815 4C D1 21
; Skok do Sio ze sprawdzeniem czy nie TopDrive i odpowiedna modyfikacja
; procedury
GoSIO
LDA CzyTopDrive ;2818 AD 53 21
BNE label95 ;281B D0 03
LDA CzyHappyUS
BEQ StandardSpeed
JMP HappyUSMovedProc ; mozna skakac do tej procki
StandardSpeed
JMP JSIOINT ;281D 4C 59 E4
label95
; Obsluga trybu TopDrive (XF)...
LDA VSERIN ;2820 AD 0A 02
STA OldSerInJmp+1 ;2823 8D 3F 26
PHA ;2826 48
LDA VSERIN+1 ;2827 AD 0B 02
STA OldSerInJmp+2 ;282A 8D 40 26
PHA ;282D 48
LDA DCOMND ;282E AD 02 03
ORA #$80 ;2831 09 80
STA DCOMND ;2833 8D 02 03
LDA #<NewSerInInterrupt ;2836 A9 39
STA VSERIN ;2838 8D 0A 02
LDA #>NewSerInInterrupt ;283B A9 26
STA VSERIN+1 ;283D 8D 0B 02
JSR JSIOINT ;2840 20 59 E4
PLA ;2843 68
STA VSERIN+1 ;2844 8D 0B 02
PLA ;2847 68
STA VSERIN ;2848 8D 0A 02
TYA ;284B 98
RTS ;284C 60
; Przepisuje 12 bajtow z adresy podanego w X(starszy) i Y(mlodszy)
; do bloku kontroli transmisji szeregowej DCB
Table2DCB
STY IOtableAddr+1 ;284D 8C 56 28
STX IOtableAddr+2 ;2850 8E 57 28
LDX #$0B ;2853 A2 0B
IOtableAddr
LDA $FFFF,X ;2855 BD FF FF
STA DDEVIC,X ;2858 9D 00 03
DEX ;285B CA
BPL IOtableAddr ;285C 10 F7
RTS ;285E 60
Close1
LDX #$10 ;285F A2 10
CloseX
LDA #$0C ;2861 A9 0C
STA ICCMD,X ;2863 9D 42 03
JMP JCIOMAIN ;2866 4C 56 E4
GetKey
LDX #$10 ;2869 A2 10
LDA #$03 ;286B A9 03
STA ICCMD,X ;286D 9D 42 03
LDA #$04 ;2870 A9 04
STA ICAX1,X ;2872 9D 4A 03
LDA #$00 ;2875 A9 00
STA ICAX2,X ;2877 9D 4B 03
STA ICBUFL+1,X ;287A 9D 49 03
LDA #$FF ;287D A9 FF
STA ICBUFL,X ;287F 9D 48 03
LDA #<Kdriver ;2882 A9 B0
STA ICBUFA,X ;2884 9D 44 03
LDA #>Kdriver ;2887 A9 28
STA ICBUFA+1,X ;2889 9D 45 03
JSR JCIOMAIN ;288C 20 56 E4
BMI GKeyError ;288F 30 1C
LDX #$10 ;2891 A2 10
LDA #$00 ;2893 A9 00
STA ICBUFL,X ;2895 9D 48 03
STA ICBUFL+1,X ;2898 9D 49 03
LDA #$07 ;289B A9 07
STA ICCMD,X ;289D 9D 42 03
JSR JCIOMAIN ;28A0 20 56 E4
BMI GKeyError ;28A3 30 08
PHA ;28A5 48
JSR Close1 ;28A6 20 5F 28
BMI GKeyError ;28A9 30 02
PLA ;28AB 68
RTS ;28AC 60
GKeyError
JMP GoErrorDisp ;28AD 4C 15 28
Kdriver
.BYTE "K:",$9B ;28B0 4B
DiscChangeCheck
LDY #<DirMapSectorBuff ;28B3 A0 80
LDX #>DirMapSectorBuff ;28B5 A2 29
JSR ReadFirstSect ;28B7 20 3A 27
LDX #$7F ;28BA A2 7F
label98
LDA FirstSectorBuff,X ;28BC BD 00 29
CMP DirMapSectorBuff,X ;28BF DD 80 29
BNE ChangedD ;28C2 D0 05
DEX ;28C4 CA
BPL label98 ;28C5 10 F5
LDA #$00 ;28C7 A9 00
ChangedD
RTS ;28C9 60
; Ustawia numer satcji wg A
SeTDriveNR
STA blokDanychIO1+1
STA blokDanychIO2+1
; sta blokDanychIO3
; sta blokDanychIO4
STA blokDanychIO5+1
STA blokDanychIO6+1
CLC
ADC #['0+$80]
STA DriveDisp1
STA DriveDisp2
JSR PrintXY
.BYTE $08,$00
DriveDisp2
.BYTE +$80,"1"
.BYTE $00
RTS
xjsrTableL
.BYTE <[xjsr1+1],<[xjsr2+1],<[xjsr3+1],<[xjsr4+1],<[xjsr5+1]
.BYTE <[xjsr6+1],<[xjsr7+1],<[xjsr8+1],<[xjsr9+1],<[xjsrA+1]
xjsrTableH
.BYTE >[xjsr1+1],>[xjsr2+1],>[xjsr3+1],>[xjsr4+1],>[xjsr5+1]
.BYTE >[xjsr6+1],>[xjsr7+1],>[xjsr8+1],>[xjsr9+1],>[xjsrA+1]
data03
*=*+$30
ProgramEnd
FirstSectorBuff=[[>[*-1]]+1]*$100 ;$2900 ; tutaj pierwszy sektor dysku ($80 bajtow)
DirMapSectorBuff=FirstSectorBuff+$80 ; tutaj aktualny sektor mapy sektorow katalogu
DirSectorBuff=FirstSectorBuff+$180 ; tutaj sektor katalogu
.BYTE "HS procedures for Happy/US-Doubler by Pecus & Pirx 25-08-2002"
*=$02e0
.WORD START ;02E0 FD 1F
.OPT List