0000
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
0000 ;;
Zmeny v BSrom118 potrebne pre BSDOS ;;
0000
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
0000 ;;
[x] .. zmeny specificke pre BSrom118 ;;
0000 ;; Pre ine romky ich treba spravit inak ;;
0000
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
0000 ;;
Pouzivane sluzby BSDOSu:
0000
0000
em562 = #20
0000
em4c6 = #21
0000
basic = #31
0000
funkc = #32
0000
04C6 ;;
Napichnutie load-save rutiniek pre tape emulaciu
04C6
04C6 CD CD 0E
call tstsav ;; SAVE #4C6
04C9
0559 00
nop ;; Predbezne
nezakazuj prerusenie
055A
055C 3E
db #3E ;; Predbezne nemen farbu borderu
055D
0562 CD DB 0E
call tstloa ;; LOAD #562
0565
060E 00
nop ;; Meno =
nepovinny parameter
060F 00
nop ;; pre
LOAD/VERIFY/MERGE
0610 00
nop
0611
0990 02
db #02 ;; Pri SAVE cakaj iba 2/50 sec
0991
0A53 C0
ret nz ;; Nepouzivaj ZX Printer
0A54 00
nop
0A55 00
nop
0A56
0B8E 11
db #11 ;; Nepouzivaj ZX Printer
0B8F
0EAC ;;
Na tomto mieste boli povodne rutinky pre ZX Printer,
0EAC ;;
ale teraz je toto miesto vyuzite na patchy pre BSDOS.
0EAC
0EAC C9
ret ;; Pre istotu (ak
by niekto volal COPY)
0EAD
0EAD EF
stkdup rst #28
;; Zdvojenie udaja
0EAE 31
db #31 ;; na zasobniku kalkulacky
0EAF 38
db #38 ;; (pouziva BSDOS pri vypocte)
0EB0 C9 ret
0EB1
0EB1 2E 40 24 60 znkcmd
db '.@$`' ;; Zaciatocne znaky novych prikazov
0EB5
0EB5 21 B1 0E
newcmd ld hl,znkcmd ;; Rozsireny basic interpreter
0EB8 01 04 00
ld bc,#04
0EBB ED B1
cpir
0EBD C2 32 3B
jp nz,#3B32 ;; [x]
0EC0 32 74 5C
ld (23668),a
0EC3 3E
db #3E
0EC4 F1
cmdmgf pop af
0EC5 ED 73 3F 5C cmdexe
ld (23615),sp
0EC9 3E 31
ld a,basic
0ECB 18 20
jr doscal
0ECD
0ECD 21 AE 3C
tstsav ld hl,tapdsk ;; Obsluha pre SAVE #4C6
0ED0 CB 46
bit 0,(hl)
0ED2 21 80 1F
ld hl,#1F80
0ED5 C8
ret z
0ED6 6F
ld l,a
0ED7 3E 21
ld a,em4c6
0ED9 18 11
jr loasav
0EDB
0EDB 3A AE 3C
tstloa ld a,(tapdsk) ;; Obsluha pre LOAD #562
0EDE 0F
rrca
0EDF 38 09
jr c,loados
0EE1 F3
di
0EE2 3E 0E
ld a,#0e
0EE4 D3 FE
out (#fe),a
0EE6 DB FE
in a,(#fe)
0EE8 1F
rra
0EE9 C9
ret
0EEA 3E 20
loados ld a,em562
0EEC C1
loasav pop bc
0EED CD A0 3C
doscal call bnkcal
;; Volanie sluzby bsdosu
0EF0 20 00
dw #20 ;; adresa pre RST #20
0EF2 C9
ret
0EF3
0EF3 3E 32
newfnc ld a,funkc ;; Rozsirenie funkcie FN x()
0EF5 CD ED 0E
call doscal
0EF8 CA 12 27
jp z,#2712
0EFB DF
rst #18
0EFC CD 30 25
call #2530
0EFF CA C3 27
jp z,#27C3
0F02 C3 F8 27
jp #27F8
0F05
0F05 00
block 38,0 ;; Volne miesto pre dalsie patchy
0F2B
1304 ;;
Zmeny vo vypise chybovych hlaseni
1304
1304 76
halt ;; Pred vypisom
hlasenia pockaj na luc
1305 00
nop ;; (povodne tu
HALT bol ale v bsrom je iba EI)
1306 00
nop
1307 00
nop
1308 FD CB 01 AE
res 5,(iy+1)
130C 00
nop ;; 6 bajtov je
usetrenych vdaka tomu
130D 00
nop ;; ze sa
nepouziva/nepodporuje ZX Printer
130E 00
nop ;; a nie je treba
mazat buffer tlaciarne
130F
1AA8 ;;
Nova syntax starych prikazov
1AA8
1AA8 05
db #05 ;; NEW <cislo>
1AA9 C5 0E
dw cmdexe
1AAB
1AD6 05
db #05 ;; COPY <cislo>
1AD7 C5 0E
dw cmdexe
1AD9
1B14 05
db #05 ;; CAT <cislo>
1B15 C5 0E
dw cmdexe
1B17
1B44 ;;
Napichnutie basic interpretra
1B44
1B44 B5 0E
dw newcmd ;; Nove basicove prikazy [x]
1B46
1CDC C4 0E
dw cmdmgf ;; Prikazy pre magnetofon
1CDE
25F6 F3 0E
dw newfnc ;; Nove funkcie FN x()
25F8
393E ;;
Zmeny specificke pre bsrom118
393E
393E 08
db #08 ;; Border 0 pri srsani v NMI menu [x]
393F
397F 57
db #57 ;; Korektny OUT na #7FFD pre +2A/+3 [x]
3980
3C98 ;;
ROM bios v romke
3C98
3C98 18 32
setrwp jr romdis
;; #3C98 Set rom bank + write protect
3C9A 18 35
setdwp jr dosdis
;; #3C9A Set dos bank + write protect
3C9C 18 38
setrwe jr romena
;; #3C9C Set rom bank + write enable
3C9E 18 3B
setdwe jr dosena
;; #3C9E Set dos bank + write enable
3CA0 18 0D
bnkcal jr bncall
;; #3C9A Call other bank
3CA2 AF
settap xor a
;; 15522 Set tape
3CA3 E6
db #e6
3CA4 3E 7F
setdsk ld a,#7f
;; 15524 Set disk
3CA6 CD 9C 3C
call setrwe
3CA9 32 AE 3C
ld (tapdsk),a
3CAC 18 EA
jr setrwp
3CAE
3CAE 03
tapdsk db #03
;; Bit0: 0=tape,1=disk
3CAF
3CAF CD 9C 3C
bncall call setrwe
3CB2 22 C7 3C
ld (reghl+1),hl
3CB5 E1
pop hl
3CB6 23
inc hl
3CB7 23
inc hl
3CB8 E5
push hl
3CB9 F5
push af
3CBA 2B
dec hl
3CBB 7E
ld a,(hl)
3CBC 2B
dec hl
3CBD 6E
ld l,(hl)
3CBE 67
ld h,a
3CBF F1
pop af
3CC0 E5
push hl
3CC1 21 C9 3C
ld hl,switch
3CC4 E3
ex (sp),hl
3CC5 E5
push hl
3CC6 21 55 55
reghl ld hl,#5555
3CC9 C3 9E 3C
switch jp setdwe
3CCC
3CCC ;;
Nasledujuci kod je hardwerovo zavisla cast ROM biosu,
3CCC ;;
preto sa priamo v samotnej romke nenachadza,
3CCC ;;
ale sa doplni az po nabootovani systemu.
3CCC
3CCC F5
romdis push af
3CCD 3E 40
ld a,#40 ;; <- stranka rom - zakaz zapisu
3CCF 18 0D
jr bnkout
3CD1 F5
dosdis push af
3CD2 3E 41
ld a,#41 ;; <- stranka dos - zakaz zapisu
3CD4 18 08
jr bnkout
3CD6 F5
romena push af
3CD7 3E 60
ld a,#60 ;; <- stranka rom - povolenie zapisu
3CD9 18 03
jr bnkout
3CDB F5
dosena push af
3CDC 3E 61
ld a,#61 ;; <- stranka dos - povolenie zapisu
3CDE D3 17
bnkout out (#17),a
3CE0 F1
pop af
3CE1 C9
ret
3CE2
3CE2 00
block 14,0
3CF0