Obsah této stránky
==================
English manual for BSROM140
Slovenský manuál k BSROM140
What's better in BSROM140 as opposed to BSROM118?
V èem je BSROM140 lepší nez BSROM118?
Popis zmìn BSROM 140 potøebných pro BSDOS
EN
BSrom140 - Modified ZX Spectrum ROM - (c) Busy soft - Release 22.04.97
Original ROM: (c) Amstrad
Generally
=========
It's classic ZX Spectrum ROM with this modifications:
- some new commands and functions - see below
- additional syntax of some commands and functions - see below
- cca four times more speed of pilot signal synchronize from tape
- program cursor changed from ">" to "*" (for autolisting)
- increase frequency of error beep (RASP)
- full work with 16-bit hexadecimal numbers in range 0-65535
- more speed autorepeat after initialization (new,reset)
- enter of error line caused move of cursor into error position
- option for list by ingore control codes (for colors,at,tab)
- extendable NMI handle program - see below
- corrected some errors - see below
- two new characters - small underline and square (code 30,31)
- program cursor "*" displayed only on autolist
- full movement on edit area (left,rigth,up,down)
- more more more more speed reset and new (memory clears by PUSH)
- new start-up colors after reset and new: paper 0, ink 7
- stopable autolist by the "Q" key in all moment
- some enhancements for ZX Spectrum 128k
- You can write negative number in commands which need 8-bit value. Real value will be your_negative_value + 256.
- full work with line number range 0-16383 (original ROM was only 1-9999) (You can correctly edit and enter line with number zero!)
Corrected errors
================
- Error in original NMI handle routine. But error byte is not modified [if some programs will test it]. There new NMI menu handles it now.
- PRINT AT 0,0;CHR$ 8; moves cursor into position AT -1,31 There position of cursor is not changed by CHR$ 8 in this ROM.
- Display of error message if interrupt is disabled. There interrupt is enabled before displaiyng error message in this ROM.
- Original ROM writes five bytes into address range 0-4. There range address 0-4 is not changed in this ROM. This feature is useful for not disabled write access into RAM address 0-#3FFF.
- If success of addition or substraction of two integers is -65536 then it failed. (Note: Integer range is -65535 .. +65535)
- This is another similar bug: If x is in range -65537 .. -65535 (open range) then INT x failed. This bug is fixed too.
- If last line in basic program is N, you enter empty line N+1 and press EDIT key, then line N is edited into edit area WITH program cursor. There program cursor is not transfer into edit area in this ROM.
It's good idea to run next program to demonstrate INT and -65536 bug:
FOR a=-65538 TO -65533.9 STEP 0.25: PRINT a,INT a : NEXT a
Try this program on classic ZX ROM and then on this bugfixed ROM.
Initialization (reset,new)
==========================
System report is not classic message after start. There is displayed information about length of basic, variables and free memory. 48k and 128k reset do not test memory. I think damaged memory is past...
Extendable NMI handler
======================
RESET and NMI signals causes jump into address #00 and #66 and this event is indicated by snowing on black border. If SP was in range 0-#4000 then is set to #5800 value. Control keys:
B - warm start of basic system. All variables are initialized but PROG, VARS and ELINE was not changed. It causes that basic progrm with variables is not deleted.
N - the same as CLEAR #5FFF: NEW - memory above #6000 is not changed.
R - the same as CLEAR #FFFF: NEW - classic 48k reset.
E - extended 128k reset. It clears all 128k memory on Spectrum 128k
I - sets AY to quiet and on MB-02 resets FDC,DMA and stops disk drive
S - save "" screen$ on tape (on MB-02 can save on disk)
T - like USR 15522 - set tape as actual device (only on MB-02)
D - like USR 15524 - set disk as actual device (only on MB-02)
Q - return into broken program. Warning: return will be correct only if SP was not set to #5800! All registers (beside low 7 bit of refresh) are restored to original values.
M - jump into MRS 08/09 debugger. MRS must be loaded into memory. All registers on register panel will be set to values from broken program - you can continue broken program by using any trace mode of MRS debugger. Warning: This feature will works only if SP was not set to #5800 (like as Q-quit).
0..9 - switching of RAM banks on ZX Spectrum 128k. If SP is in range #C000-#FFFF then it will be set to #5800. This is the same as OUT (#7FFD),number - you can see second videoram by pressing 8 or 9 key.
U - user function. There are JP XXXX at address #3901. You can set address of this jump to you own routine. Your routine can end with ret - it causes return into NMI handler.
Z - user function like 'U' but this key is reserved for using in MB-02 applications (for example make snapshots,...). However, if you want use this key, place address of you routine into address #3904.
Additional syntax of old commands
=================================
Legend:
num ...... any expresion with number result
string ... any expresion with string result
Items in brackets < > are optional.
CONTINUE <num> ... if num is nonzero then run machine code from this address. Different from USR is if machine code returns (very seldom event:)) IY must be set to #5C3A but HL' can be different #2758.
CLS <num> ... if num is nonzero then all attributes and border is set to num. For example: CLS 7 = BORDER 0: PAPER 0: INK 7: BRIGHT 0: FLASH 0.
GOTO, GOSUB, PAUSE, BORDER ... numer parameter of this commands is optional, not compulsatory. If parameter not present, means zero value.
LOAD, SAVE, VERIFY, MERGE ... string parameter of this commands is optional, not compulsatory. If parameter not present, means empty string. <PRINT> list of items ... Yes, it means that PRINT command is optional ! If list of items is not beginning with characters ,' (comma and apostrophe) then you must not write PRINT command in your program :)
POKE address <item1> <item2>... storing item(s) into memory. You can write how many items as you want. Each item may be:
, 8-bit-num ... stores one byte (the same as classic POKE)
; 16-bit-num ... stores one word (two bytes, LSB first)
, string ... stores string into memory
; string ... the same as above but last character has bit 7 = 1 Example: POKE 16384,20;1025,"hello";"world" stores these bytes: 20, 1,4, 104,101,108,108,111,119,111,114,108,228
Enhaced functions
=================
CHR$ num ... If num is 0..255 then this is classic CHR$.But if num = -1 then this function returns whole memory (without byte at add 0) as a string with length 65535 bytes.
VAL$ num ... If parameter is number type then result of this function is four character string contains hexadecimal digits of this number. This is very useful for convert number into hexadecimal base.
VAL num ... 16-bit PEEK. Returns 16-bit word from address num. This function is opposite to 'POKE add;word' command.
% ... prefix character for writing hexadecimal numbers. The same as BIN for writing binary number. Number must be max 16-bit.
It's recomended to use function CHR$ with parameter -1 with command POKE together for work with memory blocks (or only CHR$ -1 for reading memory). For example LET a$ = (CHR$ -1)(16384 TO 23295) saves screen into variable a$ and then you can do command POKE 16384,a$ to restore saved screen back. Because 'PEEK address' and 'CODE (CHR$ -1)(adresa)' are the same.
New commands and its syntax
===========================
, <num> ... comma ... edit of basic line num.
' <num> ... apostrophe ... switching of RAM banks on ZX Spectrum 128k. The same as OUT #7FFD,num. (Be sure that RAMTOP is under #C000!)
© ... (c) ... the same as 'B' in NMI handler. Inicialize all system variables besides PROG, VARS and ELINE.
^ ... up arrow ... the same as E in NMI handler. Clears all 128k memory. ? ... displays information about length of basic, variables and free memory. This command is called internally after each reset or new.
* ... header ... displays header information from tape in following format: type of file : name of file : address : length
_ .. the same as USR 00102 - jump into NMI handler ('Q' continues)
# .. the same as USR 54885 - jump into MRS 08/09 (MRS must be loaded)
One new system variable
=======================
NMI handler does not need vector at address 23728. This address is used for storing three bits with following meaning:
bit 0=0: number of basic lines is displayed with four digits
bit 0=1: number of basic lines is displayed with five digits
bit 1=0: control codes in autolist is displayed normally
bit 1=0: control codes in autolist is displayed by bit 2
bit 2=0: do not display control codes in autolist
bit 2=1: display all control codes as "_" character (code 30).
This variable is initialized to zero value after reset or new.
Five digits displaying of basic numbers is very useful if you use line range 0 to 16383. This feature has no effect to running of basic program. If you edit any basic line then this line is edited with five digit numbers always. If number is under 10000 then it's space blanked from left.
----------------------
There is a little free space on address #3C98-#3CEF in this ROM. The space is reserved for MB-02 extensions. If you have no MB-02 then you can use the space for some your routines as you want.
Thanx to this peoples: - Milan Pikula - WWW (www@crazy.elf.stuba.sk) - Ian Collier (sorry, I don't know his e-mail) for their modified ROMs. I get some ideas from these ROMs. (But only ideas, all routines are my own.)
SK
BSrom140 - Modifikovana ZX Spectrum ROM - (c) Busy soft - Release 22.04.97
Originalna romka: (c) Amstrad
Vseobecne
---------
Jedna sa o klasicku romku zo ZX Spectra na ktorej boli spachane tieto upravy:
- pribudlo zopar novych prikazov a funkcii - prehlad dalej
- rozsirena syntax niektorych prikazov a funkcii - prehlad dalej
- asi stvornasobne rychle chytanie uvodneho tonu z magnetofonu
- programovy kurzor zmeneny zo znaku ">" na znak "*"
- zvysena frekvencia chyboveho beepu
- spracovanie hexadecimalnych cisel v rozsahu 0-65535
- moznost pisania basicovych riadkov v rozsahu 0-16383 (mozete normalne editovat a odosielat aj nulty riadok!)
- v prikazoch ocakavajucich 8-bitovu hodnotu mozete pisat aj zaporne cisla, realna hodnota bude potom o 256 vecsia.
- rychlejsi autorepeat na zaciatku po inicializacii
- pri pokuse o odoslanie chybneho prikazu alebo riadku skoci kurzor na miesto chyby (lepsie ako v IZO-ROM)
- moznost vypisovat listing programu bez riadiacich kodov (nereaguje na farby, TAB a AT - vhodne na zasite programy)
- osetrenie NMI pomocou rozsiritelneho menu - prehlad dalej
- opravene niektore chyby - prehlad dalej
- dva nove znaky v znakovom subore - maly podciarnik a stvorcek
- programovy kurzor "*" sa vypisuje iba pri autoliste
- po editacnej zone sa da chodit hore a dolu
- resety a NEW mazu pamet pomocou PUSH - je to super rychle
- nove farby po resetoch a NEWe: ink 7, paper 0
- autolist mozno v kazdom okamihu zastavit klavesou "Q"
niekolko vymozenosti pre uzivatelov ZX Spektra 128k
Prehlad chyb, ktore boli opravene
---------------------------------
- Chybne osetenie NMI rutiny - vyriesilo to NMI menu. Ale prislusny bajt zostal nezmeneny - to keby ho nahodou nejaky program moc usilovne zacal skumat a testovat
- PRINT AT 0,0;CHR$ 8; - posunulo kurzor na poziciu AT -1,31 - v tejto romke sa poloha kurzora nemeni.
- Ak sa malo vypisat chybove hlasenie a je zakazane prerusenie, tak to zmrzlo. V tejto romke sa to nemoze stat.
- Normalna romka sama seba na adresach 0..4 prepisuje. Tato romka nie, preto moze bezat aj bez zakazaneho zapisu v ramke.
- Ak vysledok scitania alebo odcitania dvoch cisel v rozsahu -65535 az 65535 mal vyjst -65536, dopadlo to zle. V tejto romke je tato chyba scitania uz osetrena.
- S chybou -65536 suvisi aj chybny vypocet INT x, kde x=-65536.9 az -65535.1 Tento vypocet je tiez osetreny.
- Ak je posledny riadok v programe N, vy odoslete prazdny riadok N+1 (akoze ho zmazete) a potom stlacite EDIT, editne sa vam N-ty riadok aj s programovym kurzorom. V tejto romke sa programovy kurzor objavuje iba pri autolistingu a preto sa nikdy nemoze objavit v editnutom riadku.
Na demonstraciu chyby -65536 a chyby INT je vhodny nasledujuci program:
FOR a=-65538 TO -65533.9 STEP 0.25: PRINT a,INT a : NEXT a
Schvalne si ho skuste spustit na povodnej ZX romke, a na tejto opravenej.
Po starte alebo NEWe sa romka prihlasi vypisanim informacie, kolko je volneho miesta (basic a premenne basicu maju vtedy samozrejme nulovu dlzku) a vypise sa normalne hlasenie OK. 48k a 128k reset a ani NEW netestuju pamet - predpoklada sa, ze cela 48kB alebo 128k pamet je funkcna.
Po resete alebo NMI (skoku na adresy #00 alebo #66) zacne srsat border, co je znakom ze ste v NMI menu. Ak by bol zasobnik SP na adresach #00-#4000, zmeni sa na #5800. Ovladacie klavesy:
B - teply start basicu. Inicializuju sa vseky systemove premenne okrem PROG, VARS a ELINE - teda basicovy program a basicoe premenne zostanu zachovane.
N - podobne ako CLEAR #5fff: NEW - teda pamet nad #6000 ostane neporusena.
R - zmaze celu pamet 48kB - je to klasicky 48k reset.
E - zmaze celu pamet 128k - (extend reset 128k)
I - resetuje tieto periferie: AY, FDC, DMA a mechaniku disku.
S - save "" screen$ na aktualne zariadenie (MG alebo disk)
T - ako USR 15522 cize aktualne zariadenie bude paska.
D - ako USR 15524 cize aktualne zariadenie bude disk.
Q - navrat spat do preruseneho programu. Pozor: navrat bude korektny iba vtedy, ak SP nebol zmeneny na #5800. Pri navrate su vsetky registre (okrem dolnych 7 bitov registra R) obnovene na povodne hodnoty.
M - skok do debuggera v MRS (musi byt v pameti!). Vsetky registre sa nastavia ako boli v okamihu prerusenia programu pomocou MNI - cize mozno preruseny program dalej krokovat (PC a SP sa korektne nastavia iba ak sa SP nezmenilo na #5800!).
0..9 - prepnutie ram-banky na 128k. Ak by sa SP nachadzal v oblasti hornych 16 kB, bude zmeneny na #5800. Je to vlastne OUT (#7ffd),cislo - cize pomocou 8 a 9 si mozno pozriet obsah druhej videostranky.
U - uzivatelska funkcia - na adrese #3901 je JP XXX, kde si moze uzivatel napokovat adresu svojej aplikacie a po stlaceni klavesy "U" sa tato aplikacia spusti. Navrat je normalne pomocou RET.
Z - uzivatelska funkcia - na adrese #3904 je DW xxx, a dalej presne tak isto ako "U". Tieto dve funkcie v samotnej romke nerobia nic, ale su vyhradene pre dalsie rozsirenia (napr. rezidentny monitor).
Rozsirenie syntaxe existujucich prikazov
----------------------------------------
(Polozky v zatvorkach < > su nepovinne.)
CONTINUE <vyraz> .. ak je vyraz nenulovy tak sa spusti strojak od tejto adresy. Pozor ! Pri navrate musi byt na rozdiel od USR register IY nastaveny na #5c3a, ale zato HL' nemusi mat hodnotu #2758.
CLS <vyraz> .. ak vyraz je nenulovy tak sa nim nastavia vsetky farby (pr. CLS 7 = BORDER 0: PAPER 0:INK 7:BRIGHT 0:FLASH 0).
GOTO, GOSUB, PAUSE, BORDER .. ciselny parameter pri tychto prikazoch je nepovinny, nezadany sa chape ako nula.
LOAD, SAVE, VERIFY, MERGE .. retazcovy parameter pri tychto prikazoch je nepovinny, nezadany sa chape ako prazdny retazec.
<PRINT> zoznam poloziek .. Za predpokladu, ze zoznam poloziek nezacina cislicou, ciarkou, a apostrofom mozete pokojne vynechat prikaz PRINT. Totiz ak sa pri behu programu najde nieco, co nie je ziadny prikaz, skoci sa do rutinky na prikaz PRINT.
POKE adresa <polozka1> <polozka2>... ukladanie poloziek do pameti. Poloziek moze byt lubovolny pocet. Moznosti poloziek:
, 8-bit-hodnota ... ulozenie jedneho bajtu do pameti
; 16-bit-hodnota ... ulozenie dvojbajtovej hodnoty
, retazec ... ulozenie retazca postupne po znakoch
; retazec ... posledny znak retazca bude mat nastaveny siedmy bit Priklad: POKE 16384,20;1025,"ahoj";"cau" ulozi do pameti tieto bajty: 20, 1,4, 97,104,111,106, 99,97,245 Samozrejme ze vsade, kde sa ocakava nejaka hodnota (ciselna alebo retazcova) mozno napisat lubovolny vyraz prislusneho typu.
Rozsirenie niektorych funkcii
-----------------------------
CHR$ vyraz .. ak je vyraz v rozsahu 0..255, pracuje ako predtym, t.j. vrati prislusny znak ktoreho kod je hodnota vyrazu. Ale ak vyraz nadobudne hodnotu -1, potom tato funkcia vrati skoro celu pamet - t.j. retazec dlhy 65535 znakov. (Vratit vsetkych 65536 bajtov by bolo technicky problematicke).
VAL$ vyraz .. ak je vyraz ciselneho typu, tak vysledkom tejto funkcie je stvorznakovy retazec hexadecimalnych cislic - inac povedane prevod DEC -> HEX (pr. VAL$ 33023 = "80ff").
VAL vyraz .. ak je vyraz ciselneho typu, tak vysledkom tejto funkcie je dvojbajtove cislo ulozene na tejto adrese - inac povedane dvojbajtovy PEEK.
% .. prevod HEX -> DEC podobne ako je BIN prevod BIN -> DEC. Inac povedane ak chcete ako cislo zapisat hexadecimalnu konstantu, musi zacinat znakom "%". Znak "#" nebol pouzity preto, lebo ten sa pouziva na nastavenie kanala v prikazoch PRINT A INPUT (priklad: zapis %80ff je totozny s 33023).
Funkciu CHR$ s parametrom -1 je velmi vyhodne pouzivat spolu s prikazom POKE na pracu s blokmi pameti, alebo aj samostatne na citanie pameti. Napriklad prikaz LET a = (CHR -1)(16384 TO 23295) odlozi do premennej a$ obrazovku. Potom zase prikaz POKE 16384,a$ vrati odlozenu obrazovku spet. Pretoze zapisy "PEEK adresa" a "CODE (CHR$ -1)(adresa)" su totozne.
Nove prikazy a ich syntax
-------------------------
, <vyraz> .. (ciarka) editne prislusny basicovy riadok. Ak vyraz nie je uvedeny alebo nadobuda nulovu hodnotu, edituje sa riadok s najnizsim poradovym cislom.
' <vyraz> .. (apostrof) prepina ram-banky na 128k ako OUT (#7ffd),vyraz (podobne ako 0-9 v NMI menu). Vyraz musi byt v intervale 0 az 15. Pozor! Pri prepinani musi byt RAMTOP mensi ako #c000.
© .. obnovi vsetky systemove premenne okrem PROG, VARS a ELINE. (Ako "B" v NMI menu.) [C v kruzku]
^ .. velky 128k reset - maze celu pamet 128k. (Ako "E" v NMI menu.) [sipka hore]
? .. vypise informaciu o dlzke programu, dlzke premennych a velkost volnej pamete pre basic.
* .. header - z pasky cita hlavicky a vypisuje o nich toto: typ suboru : meno suboru : adresa : dlzka
_ .. to iste ako USR 00102 - skok do NMI menu.
# .. to iste ako USR 54885 - skok do MRS (musi byt v pameti!).
Jedna nova systemova premenna
-----------------------------
Kedze NMI rutinka vzdy zavola NMI menu, nepotrebuje uz vektor na adrese 23728. Preto tri bity na 23728 su takto vyuzite:
bit 0=0:cisla basicovych riadkov sa vypisuju ako stvormiestne
bit 0=1:cisla basicovych riadkov sa vypisuju ako petmiestne
bit 1=0:pri autoliste sa vypisuju riadiace kody normalne
bit 1=1:pri autoliste sa vypisuju riadiace kody podla bitu 2
bit 2=0:pri autoliste sa vobec nevypisuju riadiace kody
bit 2=1:pri autoliste sa vypisuju riadiace kody ako "_"
Po resete alebo newe sa tu zapise nula. Petmiestne cisla riadkov maju vyznam vtedy, ak pouzivate riadky v rozsahu 10000 az 16383. Tento bit nijako neovplyvnuje beh programu s takymito riadkami, len meni format listingu. Pri editovani riadku sa jeho cislo vypise vzdy ako petmiestne.
----------------------------
Na adresach #3C98-#3CEF sa nachadza kusok volneho miesta. Toto miesto je rezervovane pre pouzitie v MB-02. Ale ak nemate MB-02 tak si mozete toto miesto vyuzit pre svoje vlastne ucely.
Na zaver by som chcel podakovat tymto ludom - Milan Pikula - WWW (www@crazy.elf.stuba.sk) - Ian Collier (jeho e-mail adresu neviem) za ich modifikovane romky, ktorymi som sa nechal inspirovat a z ktorych som si dovolil "pozicat" si niektore napady. (Ale len napady a nic viac, vsetky rutinky mam vlastne).
EN
Busy- 9.11.2013
What’s better in BSROM 140 than in BSROM 118?
Changes 118 -> 140
~~~~~~~~~~~~~~~~~~
+ Fixed bug of INT x, where x=-65536.9 to
-65535.1
+ Fixed bug of addition (-65535-1 is now -65536)
+ Fixed bug of multiplication (bad jump in routine)
+ Fixed bug of double store of string in SCREEN$
+ Command '*' - header:
'?' replaced by '_' (code
30)
+ Autolisting - control
codes: '?' replaced
by '_' too
+ New start-up colors after resets
and NEW: BORDER 1:PAPER 0:INK 7
+ Better handler for
'Scroll ?' in displaying mg. headers
- Hexadecimal numbers
only after character '%' (& is removed)
+ You can write negative number in commands what need
8-bit value
+ Some OUTs in NMI
menu is corrected
+ MG. commands with optional string parameter (name of program)
+ New feature in function CHR$ (it can return whole
memory as string)
+ Command POKE with enhacement syntax (you can write more parameters)
CZ
Busy- 9.11.2013
Pro zajimavost, v cem je BSROM140 lepsi nez BSROM118?
Zmeny 118 -> 140
~~~~~~~~~~~~~~~~
+ Opravena chyba INT x, kde x=-65536.9 az
-65535.1
+ Opravena chyba scitania (-65535-1 uz je -65536)
+ Opravena chyba nasobenia (chybny
skok v rutinke)
+ Opravena chyba dvojiteho ukladania
retazca v SCREEN$
+ Prikaz "*" - header:
namiesto "?" vypisuje novy znak ciarku
+ Autolist - namiesto
kodov vypisuje tiez ciarku (pri POKE 23728,6)
+ Nove startovacie farby
po resetoch a NEWe: BORDER
1:PAPER 0:INK 7
+ Lepsie osetreny
"Scroll ?" pri vypise
magnetofonovej hlavicky
- Hexadecimalne cisla
sa uz pisu
len po znaku '%' (& je zruseny)
+ V prikazoch kde sa pise jednobajtove cislo, mozno napisat
aj zaporne.
+ Skorigovane niektore
adresy a OUTy v NMI menu
+ Magnetofonove prikazy
s nepovinnym menom suboru
+ Nova funkcia CHR$ (pri
zapornom parametri vrati celu pamet)
+ Prikaz POKE s celkom
novou rozsirenou syntaxou (viac parametrov naraz)
==================================================================
0000
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
0000
;; Zmeny v BSrom140 potrebne pre BSDOS ;;
0000
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
0000
;; [x] .. zmeny specificke pre BSrom140 ;;
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
04AA
;; [x] Rutinka pre nepovinny parameter pre mgf prikazy
04AA
;; [x] uz nie je potrebna lebo toto zabezpecuje priamo BSDOS
04AA
04AA
00 block 24,0 ;; Volne miesto pre dalsie patchy
04C2
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 ;; Nacitanie mena suboru
060F
00 nop ;; pre LOAD/VERIFY/MERGE
0610
00 nop ;; zabezpecuje priamo BSDOS
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 22
3B jp nz,#3B22 ;; [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
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
3CF0
Label
-
-----------------------------------------------------------
em562
em4c6
basic
funkc
tstsav
tstloa
X stkdup
znkcmd
newcmd
cmdmgf
cmdexe
doscal
tapdsk
loasav
loados
bnkcal
newfnc
setrwp
romdis
X setdwp
dosdis
setrwe
romena
setdwe
dosena
bncall
X settap
X setdsk
reghl
switch
bnkout