0% found this document useful (0 votes)
200 views

SpectrumShadowROMDisassembly

Uploaded by

Chipyto
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
200 views

SpectrumShadowROMDisassembly

Uploaded by

Chipyto
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 149

CONTENTS INTRODUCTION USE OF HOOK CODES EXTENSIONS TO BASIC Basic loader program Assembler Lis i!gs "ai!

program A simple #do$ble %OKE& ro$ i!e' %OKE ( )*+ %o,ei!g s ri!gs i! o memor+' %OKE !*-s"emor+ d$mp' (L ! "odi.ied EDIT .$!c io!' (E ! A! impro/ed so$!d comma!d' BEE% (a*b*c*d A .as er a!d more comple e ca alog$e' ( CAT ! %se$do0ra!dom .ile 1a!dli!g' READ 2S*N Addi!g da a o a .ile' RESTORE 2S E) e!di!g 1e RS0343 c1a!!el E) e!di!g Spec r$m BASIC THE SHADO5 RO" DISASSE"BL6 T1e T1e T1e T1e T1e T1e T1e T1e T1e res ar ro$ i!es co! rol ro$ i!e s+! a) c1ec,i!g ro$ i!es RS0343 li!, ro$ i!es Ne 7or, ro$ i!es "icrodri/e ro$ i!es #Hoo, code& ro$ i!es "icrodri/e comma!d ro$ i!es #!o $sed& ro$ i!es

A%%ENDIX Labels sor ed b+ address /al$e Labels sor ed alp1abe icall+ #S1ado7& s+s em /ariables C1a!!els Bibliograp1+ I!de) o ro$ i!es S1ado7 RO" iss$e 3 Ho7 o ell 71ic1 edi io! I! er.ace 8 +o$ 1a/e Basic loader program .or edi io! 3 S1ado7 RO" E) e!ded BASIC comma!ds .rom assembler .or edi io! 3 S1ado7 RO" 51a o do i. +o$ 1a/e a! $!,!o7! RO"

INTRODUCTION T1e Si!clair 9X I! er.ace I adds e!ormo$sl+ o 1e po7er o. 1e 9X Spec r$m* allo7i!g i o se!d a!d recei/e da a o/er a! RS0343 li!,* o $se 1e Local Area Ne 7or,* a!d o s ore i!.orma io! o! 1e "icrodri/es: E;$all+ impressi/e is i s abili + o e)pa!d 1e BASIC pro/ided 7i 1 1e comp$ er* addi!g !e7 a!d po7er.$l comma!ds: "$c1 o. 1is po7er is d$e o 1e <K mo!i or program 71ic1 is 1o$sed i! a! <K Read O!l+ "emor+ i! 1e I! er.ace 8: T1is RO"* 71ic1 is ,ep be 7ee! memor+ adresses ====H a!d 8FFFH is >paged> bac, a!d .or 1 7i 1 1e mai! RO" so 1a bo 1 RO"s appear o occ$p+ 1e same sec io! o. memor+: T1is boo, pro/ides a comple e lis i!g o. 1is program* .$ll+ comme! ed a!d e)plai!ed* permi i!g +o$ o $se 1ese ro$ i!es i! +o$r programs: I! addi io!* ma!+ e)amples are gi/e! o. 1o7 o e)pa!d 1e Spec r$m?s BASIC b+ $si!g 1e I! er.ace 8 o de.i!e !e7 comma!ds: I .eel 1a 1is boo, s1o$ld be o. i! eres o all $sers o. 1e I! er.ace 8: T1ose 7i 1o$ e)perie!ce i! mac1i!e code programmi!g ca! $se 1e !e7 BASIC comma!ds pro/ided* 71e 1er or !o 1e+ o7! a! assembler: "ore ambi io$s programmers 7ill .i!d !$mero$s 1i! s .or 1e crea io! o. 1e 1eir o7! ro$ i!es* a!d 1e algori 1ms co! rolli!g 1e "icrodri/e* 1e RS0343 li!,* a!d 1e Local Area Ne 7or, 7ill be o. i! eres o e/e! 1e mos e)per programmer: I s1o$ld li,e* .i!all+* o 1a!, "assimilia!o* Carlo* @io/a!!a* S+l/ia* a!d "r: Al.red "ilgrom Ao. "elbo$r!e Ho$se L d:B: A special 1a!,s m$s go o 1e e! ire s a.. o. Si!clair Researc1 L d: @ia!l$ca Carri Flore!ce* I al+* Ca!$ar+ 8D<E:

USE OF HOOK CODES 51ile 1e disassembl+ o. 1e RO" gi/e! 1ere 7ill be a /al$able aid o mac1i!e code programmers 7is1i!g o $se 1e I! er.ace I* 1ere is o!e problem' Si!clair Researc1 1a/e !o $sed 1e same RO" i! e/er+ I! er.ace 8: T1ere are 7o di..ere! edi io!s o. 1e RO": Eac1* o. co$rse* does 1e same Fob o. r$!!i!g 1e "icrodri/es* 1e RS0343 i! er.ace* a!d 1e Local Area Ne 7or,* b$ 1ere are a !$mber o. mi!or di..ere!ces i! 1e ac $al code co! ai!ed i! 1e RO"s: T1e di..ere!ces be 7ee! 1e 7o edi io!s are described i! appe!di) G: Does 1is mea! 1a 7e ca! !e/er rel+ o! bei!g able o 7ri e programs 1a ca! r$! o! all mac1i!esH Far .rom i : Si!clair Researc1 1a/e pro/ided a 7a+ o access a !$mber o. 1e RO" ro$ i!es i! a 7a+ 71ic1 ca! be g$ara! eed o 7or, o! all mac1i!es: To do 1is* 7e $se 71a are called 1oo, codes: T1ese co!sis o. a RST < i!s r$c io! .ollo7ed b+ a b+ e 71ose /al$e depe!ds o! 71ic1 1oo, code +o$ are $si!g: T1eir e..ec is o page 1e RO" i!* call a ro$ i!e i! 1e I! er.ace 8?s ?s1ado7 RO"?* 1e! page 1e mai! RO" bac, i! a!d re $r! co! rol o 1e $sers program: T1is pro/ides ? ra!spara! ? access o 1e I! er.ace 8 0 1e $ser does!? !eed o ,!o7 a!+ 1i!g abo$ 1e RO"* o!l+ abo$ 1e /ario$s 1oo, codes: T1e .ollo7i!g e)ample s1o7s 1e $se o. 1oo, code 3=H A71ic1 es s o see i. a ,e+ 1as bee! pressedB .rom mac1i!e code' EXA"%LE OR@ GD==H RST ===<H DEFB 3=H RET END 1i!g .rom BASIC' I43=== dec I1oo, code res ar Ic1ec, ,e+press

To do

1e same

%OKE 43===*3=G' %OKE 43==8*43' %OKE 43==3*3=8' RANDONISE USR 43=== T1e 1oo, codes a/ailable .or +o$r $se are !$mbered .rom 8BH o 43H A3G o E= decimalB: T1e 1oo, codes are all .$ll+ described i! 1e disassembl+* .rom 8D<8H o 8BJDH: I. +o$ $se 1e 1oo, codes 7i 1i! +o$r programs* i!s ead o. calli!g 1e s1ado7 RO" s$bro$ i!es* 1ere 7ill be !o !eed o c1a!ge +o$r program i. Si!clair ma,e .$r 1er c1a!ges o 1e RO": O 1er7ise +o$ 7ill !eed o $pda e all 1e absol$ e re.ere!ces o 1e s1ado7 RO": I! $si!g 1oo, codes* o!l+ 1e co! e! s o. 1e A regis er ma+ be passed o 1e s$bro$ i!es bei!g called: T1e s$bro$ i!es do !o preser/e a!+ regis ers* so be s$re o sa/e all o. 1e mai! se o. regis ers be.ore +o$ $se a!+ 1oo, codes: Some o. 1e more comple) ro$ i!es corr$p HL?* 1e re $r! address o BASIC* so +o$ ma+ 7is1 o preser/e 1is: Al 1o$g1 1e i!di/id$al 1oo, codes are deal 7i 1 i! de ail i! 1e disassembl+* 1ere is a brie. s$mmar+ o. 1eir ac io!s' 8BH K Accep s a c1arac er .rom 1e ,e+board: 8CH K A c1arac er is o$ p$ o s ream 3* 71ic1 is !ormall+ 1e $pper par o. 1e scree!: 8DH K Accep s a b+ e o. da a .rom 1e RS0343 li!,: 8EH K Se!ds a b+ e o. da a o 1e RS0343 li!,: 8FH K A c1arac er is o$ p$ o s ream 4* 71ic1 is !ormall+ 1e 9X pri! er: 3=H K Tes s .or ,e+press: T1e !e) 7el/e 1oo, codes re.er o 1e "icrodri/es: 38H K Selec dri/e: Ca! be $sed o $r! a!+ dri/e o!* or all dri/es o..: 33H K Ope! c1a!!el: Allo7s 1e $ser o crea e a microdri/e c1a!!el: 34H K Close c1a!!el: T1e "icrodri/e c1a!!el is reclaimed: 3LH K Dele e .ile: Used o erase a !amed .ile .rom a "icrodri/e c1a!!el: 3EH K Read se;$e! ial: Allo7s 1e $ser o .e c1 1e ?!e) ? record o. a !amed .ile: 3JH K 5ri e record: 5ri es a !e7 record o! o 1e !e) .ree sec or o. a microdri/e car ridge: 3GH K Read ra!dom: Similar o ?read se;$e! ial?* e)cep 1a 1e record read !eed !o be 1e !e) o!e i! 1e .ile:

3<H K Reads a record .rom a speci.ied sec or o. ape: 3DH K Reads 1e record .rom 1e !e) sec or o. ape 1a passes $!der 1e read 1ead o. 1e "icrodri/e: 3AH K 5ri es a record o a speci.ied sec or o. ape: 3BH K D$e o a programmi!g error* 1is 1as 1e same e..ec as ?crea e c1a!!el? i! 1e .irs iss$e RO": T1is s1o$ld be correc ed i! la er iss$es: 3CH K Reclaims 1e memor+ $sed b+ a "icrodri/e c1a!!el: T1e .ollo7i!g .o$r 1oo, codes re.er o 1e local area !e 7or,: 3DH K Ope!s a !e 7or, c1a!!el: 3EH K Closes a !e 7or, c1a!!el: 3FH K Fe c1es a ?pac,e ? o. i!.orma io! .rom a !e 7or, c1a!!el: 4=H K Se!ds a pac,e o/er a !e 7or, c1a!!el: 48H K Crea es 1e !e7 s+s em /ariables $sed b+ 1e I! er.ace 8: T1is 1appe!s 71e! 1e s+s em is po7ered $p* a!d 71e! NE5 is +ped* b$ i also ca! be do!e ma!$all+: 43H K T1is ro$ i!e is di..ere! .rom 1e o 1er 1oo, codes i! 1a i ca! be $sed o call a!+ ro$ i!e i! 1e s1ado7 RO": T1e s1ado7 RO" is paged i!* 1e ro$ i!e 71ose address is 1eld i! 1e s+s em /ariable HDK88 A1eld a address ECEDHB is called* a!d 1e mai! RO" is paged bac, i!: A!o 1er $se .or 1oo, code 43H is pagi!g i! 1e S1ado7 RO": I. +o$ 7a! 1e S1ado7 RO" o si i! mai! memor+* 71ere 1e mai! RO" !ormall+ is* a!d o be direc l+ accessible o +o$r program* $se 1e .ollo7i!g program .ragme! o page 1e S1ado7 RO" i!' LD LD RST DEFB %O% %O% HL*LABEL A34G<DB*HL < 43H HL HL

LABEL To page

1e mai! RO" bac, i!* simpl+ do CALL =G==H

For more i!.orma io! abo$ 1e 1oo, codes a!d 1e 9X I! er.ace 8* see 1e ?Spec r$m "icrodri/e Boo,? b+ Dr: Ia! Loga!: also p$blis1ed b+ "elbo$r!e Ho$se:

EXTENSIONS TO BASIC T1is sec io! o. 1e boo, s1o7s 1o7 o add a !$mber o. !e7 comma!ds o 1e Spec r$ms BASIC: T1ose 7i 1 !o ,!o7ledge o. mac1i!e code* or simpl+ !o i! eres i! i ca! simpl+ +pe 1e ro$ i!es 1a .ollo7 i! o 1eir Spec r$ms* sa/e 1em o! o ape or "icrodri/e* a!d i!s a! l+ 1a/e a more po7er.$l BASIC: "ac1i!e code programmers 7ill .i!d 1e programs /al$able e)amples o. 1o7 o $se 1e I! er.ace 8 RO" ro$ i!es* a!d s1o$ld be i! eres ed b+ 1e 7a+ i! 71ic1 !e7 comma!ds are added o BASIC: A la er sec io! 7ill e)plai! 1o7 1is is do!e: T1e e) e!sio!s o BASIC co!sis o. a !$mber o. mac1i!e code ro$ i!es* eac1 o. 71ic1 ma,es $p a !e7 BASIC comma!d* alo!g 7i 1 a mai! program 71ic1 7ill prepare 1e comp$ er o r$! 1e !e7 comma!ds: T1e !e7 BASIC i!cl$des impro/eme! s o 1e %OKE* CAT* a!d BEE% comma!ds* a be er /ersio! o. EDIT* more /ersa ile .ile 1a!dli!g .or 1e "icrodri/es* a! e) e!sio! o 1e RS0343 c1a!!el* a!d a $se.$l memor+ d$mp comma!d 71ic1 7ill lis 1e co! e! s o. a! area o. memor+* i! bo 1 1e)adecimal a!d ASCII .orm: Si!clair Researc1 1a/e released 7o di..ere! /ersio!s o. 1e I! er.ace 8: Eac1 o. 1e /ersio!s co! ai!s a slig1 l+ di..ere! program i! i s RO": T1e !e7er /ersio! o. 1e RO" 1as correc ed a !$mber o. errors co! ai!ed i! 1e pre/io$s edi io!* as 7ell as addi!g some !e7 ro$ i!es: Beca$se !e7 code 1as bee! added o 1e S1ado7 RO" a /ario$s poi! s* ma!+ o. 1e ro$ i!es i! 1e RO" are !o lo!ger loca ed a 1e same address as be.ore: As 1e e) e!sio!s o BASIC gi/e! i! 1is boo, ma,e $se o. ma!+ ro$ i!es .rom 1e S1ado7 RO"* +o$ 7ill 1a/e o do slig1 l+ di..ere! 1i!gs o impleme! 1e BASIC e) e!sio!s* depe!di!g o! 71ic1 edi io! o. 1e I! er.ace 8 +o$ o7!: Firs o. all +o$?ll 1a/e o .ig$re o$ 71ic1 edi io! o. 1e I! er.ace +o$ o7!: I!s r$c io!s o! 1o7 o do 1is are gi/e! i! Appe!di) < o! page 8EE: I. +o$ .i!d +o$ 1a/e a! edi io! 8 RO" i! +o$r I! er.ace 8* +o$ 7ill .i!d i!s r$c io!s o! 1o7 o add 1e !e7 comma!ds o Basic o! page 88 .or 1ose 71o 1a/e a! assembler* or o! page G .or 1ose 71o do!? 1a/e access o a! assembler: I. +o$ 1a/e a! edi io! 3 RO"* 1e! $r! o Appe!di) 8= o! page 8J8 i. +o$ 1a/e a! assembler* or Appe!di) D o! page 8EG i. +o$ do!? * .or i!s r$c io!s o! 1o7 o add 1e !e7 BASIC comma!ds o +o$r Spec r$m: Al 1o$g1 1ere are o!l+ 7o edi io!s o. 1e S1ado7 RO" a 1e mome! * 1ere is some possibili + 1a Si!clair Researc1 ma+ release .$r 1er edi io!s o. 1e I! er.ace 8: S1o$ld +o$ o7! o!e o. 1ese* i is li,el+ 1a 1e e) e!ded BASIC comma!ds gi/e! 1ere 7ill !o 7or, properl+ 7i 1 i : I. 1e e) e!ded BASIC comma!ds do !o 7or, .or +o$* a!d +o$ s$spec 1a +o$ mig1 1a/e a 1ird edi io! or la er S1ado7 RO"* $r! o Appe!di) 88 o! page 8JE o .i!d o$ 1o7 +o$ ca! impleme! 1e !e7 comma!ds:

Basic loader program AFor o7!ers o. I! er.ace 8s e;$ipped 7i 1 1e edi io! 8 RO"B 1e ro$ i!es i! o +o$r Spec r$m

I. +o$ do !o 1a/e a! Assembler* +o$ ma+ e! er 7i 1 1e .ollo7i!g BASIC loader program: E! er 8 8= 3= 4= L= E= J= G= <= %RINT D= 8== 88= 83= 1is program i! o +o$r Spec r$m:

CLEAR J4GL4 FOR AMJ4GLL TO JE=LJ STE% 83 %RINT >ADDRESS'>IA?? LET CM= FOR BMl TO 83 LET 9MANBK8' IF 9OMJE=LJ THEN IN%UT X' %RINT X' %OKE 9*X' LET MCNX NEXT B %RINT ?>CHECKSU"M>IC IN%UT >THIS IS 5RO"@ H A6PNB >ILINE 6Q' IF CODE 6QM<D OR CODE 6QMl3l THEN >Re +pe .rom address >IA' %AUSE 8==' CLS' @O TO 3= IF CODE 6QORG< AND CODE 6QORl8= THEN @O TO <= CLS' NEXT A %RINT >SASIN@ THE %RO@RA"> SASE (>">I8I>SHAD%>CODE J4GLL*84=4

51e! +o$ 1a/e .i!is1ed +pi!g 1is program i! o 1e Spec r$m* +o$ s1o$ld ?RUN? i : 6o$ s1o$ld 1e! +pe* .rom 1e lis i!g o! 1e !e) page* 1e 83 b+ es .rom 1e address s1o7! o! 1e scree!: 51e! +o$ 1a/e +ped 1e .irs 83 b+ es* a ?c1ec,s$m? s1o$ld be displa+ed o! 1e scree!I i. i ma c1es 7i 1 1e o!e pri! ed o! 1e lis i!g* a 1e rig1 01a!d side o. eac1 li!e* 1e! +o$ 1a/e !o made mis a,es i! +pi!g 1e !$mbers* a!d +o$ ma+ e! er >N> or >!> o co! i!$e 7i 1 1e !e) li!e: I. 1e c1ec,s$ms do !o ma c1* +o$ m$s e! er ?+? or ?6?* a!d 1e! re +pe 1e 71ole li!e: 51e! all !$mbers 1a/e bee! e! ered* 1e program 7ill a$ oma icall+ be sa/ed o! "icrodri/e car ridge A 1ere m$s be a car ridge 7i 1 a leas 3K .ree i! o "icrodri/e 8B: IF +o$ 7is1 o sa/e 1e program o! ape* li!e 83= o. 1e lis i!g s1o$ld be modi.ied: 51e! a la er ime +o$ 7is1 o $se 1e ro$ i!es* +o$ 1a/e simpl+ o place 1e car ridge i! o "icrodri/e I* a!d 1e! o e! er 1e .ollo7i!g direc comma!ds' CLEAR J4GL4' LOAD (>">I8I>SHAD%>CODE' RANDO"I9E USR J4GLL A!d 1e !e7 comma!ds s1o$ld be a/ailable: No e 1a i. +o$ $se NE5 comma!d* +o$ m$s re0e! er 1e comma!d ?RANDO"I9E USR J4GLL? o rei!i ialise 1e SECTOR s+s em /ariable:

J4GLL' J4GEJ' J4GJ<' J4G<=' J4GD3' J4<=L' J4<8J' J4<3<' J4<L=' J4<E3' J4<JL' J4<GJ' J4<<<' J4D==' J4D83' J4D3L' J4D4J' J4DL<' J4DJ=' J4DG3' J4D<L' J4DDJ' JL==<' JL=3=' JL=43' JL=LL' JL=EJ' JL=J<' JL=<=' JL=D3' JL8=L' JL88J' JL83<' JL8L=' JL8E3' JL8JL' JL8GJ' JL8<<' JL3==' JL383' JL33L' JL34J' JL3L<' JL3J=' JL3G3' JL3<L' JL3DJ' JL4=<' JL43=' JL443' JL4LL' JL4EJ' JL4J<' JL4<=' JL4D3' JLL=L' JLL8J' JLL3<'

3=G 3EL 3=3 3E3 3EL 8E4 8DE 43 384 E 8=3 38E 3=E 33D 33E 3L 3=E = 83 JG J8 EL 8DE 838 E J 8DG 33D 8JG 4L = 38E 3=E 3=E E< 3=E 8= 33 83< 33D LL 834 338 3D = = 3E8 3=4 3E8 3LE DJ 43 DL 4 = <3 8=3 8=3

LD 3LL 88 3EL L3 4= 8D4 = 38E 34G 3E= 84= 84E J 83J 3 8JD 38E 83J G4 D3 = 8<= 3< 38E = 38E 3LE 34G 34G 3=E 8 8DJ JE D 3EL 3E8 3=E 3E= 8GE = 3=4 33E 33D = = 3=E <G 83J J3 3=E 3E8 4E 3=E 3=E L< 3D 3D

44 3=3 3E= 33L 8DL 8DG E 38E 8E4 8GJ 3LJ 3< 4= J 34= J3 4= 84= 3=3 D3 33D 3EE 8< 3EL 8L< 8DG 8E4 8DG JJ D3 4= 33 8< 8D 3E8 8< 8<4 44 338 3=E 3E J4 3=E 8DE = = 8G< 8DL 8<4 33< 8=3 83J <J 8L4 8L4 3E= 4E 33E

D LE 3EL 3=3 GE 38E 38E 8L= 4= 8DE 43 3=E 83E 8DG 83G 43 3L 3< 3L= 34G 44 38E 38E LL 4= 38E 4= 33D L< 3=G J 3=E 44 43 44 3L 43 3E8 83J 3LG 3=E 38E 8DJ 8G4 = = 3E8 J3 3=3 3=E 3D 34= 34E 3E8 3E8 3E 33D 8DE

3LD 3LD 33G 8GE 3LD 8E4 84= 3< <= 8D4 3EL 8<4 3=E 83J 3EL 3=E 3=3 3=E 8 834 83G 8JD 43 8DL 3LE 8L< 8DG 384 3L= E= 3=E 343 D 34D 83 38E 3=4 3=E L8 34 8G< L= 8J 3L = = J3 3E8 DD 8=3 3L8 8D3 8G 8G 8G 3LJ 4E 883

4L 3EL 3=3 3E3 38E 4= 3< 3=E <D E 8=< E 84E 3=E 43 8JD 3EL 8<4 83= J8 8J 8E = 3L= 38E 4= 3=E 3=E J8 3E4 8<4 8E 3E8 44 3E8 E< 338 = 338 3=E 3E8 LE 8DE = = 44 43 J3 3E8 3D 3== 8D3 8J 8== 8 L< 4E 3E8

8<4 L3 8<< 8DE 838 8DG 3EL 8<4 33E 38E 8DL 38E 4= 8E< EJ 4= 8=8 E 34= D3 33D 44 3EL 8 8L< 8JG = 8<8 33E EL E 338 8G D 8<3 84 83J 3E8 88D = 3=E 38E 8D4 = = 8L= 3=E 3LE 3EL E< J3 L4 4D = = 8DE 3=E J

D3 3=3 3E8 3L= 3< 33E LL E 8D4 43 8DG 8E4 J3 4= J 4E 8DL 38E 8D3 44 34G EJ L3 38E 4= L= G 4 43 = 3=E 83J 3L 3E8 34= 3E8 L8 338 84 3E8 = 33G E = = D3 8=3 8DE 4 3D 4J J3 3=E 3=E J3 8=3 883 8=

3=8 88L 3EL 8 3=E 8D4 8DL 38E 83= = 3LD 4= 43 4E 3EL 8J 3L= 8E4 8DL G 88E 8E 8DL 838 8JG LL 33E 3=D 34E = 8=D 3E = 3=4 3 8<4 338 83J 8DE 338 3E8 LE J3 = = EL 3D 8=3 3=3 3E8 8DE 3=3 8L4 8L4 3EE 3D 3E8 83J

38E 3LD 33D 38E 8<4 884 3L= 3L8 8GG 3EL 38E DJ 3=E 8J 83< 34E 8 4= 3L= 3E= J8 33D 3L= 3< L= GD 3=D 33E 44 34D J 3=E 3=E G< 8DL L= 8D= 84 83< 33D 3=E 3=E 84 = = 3EE E< 3D 8EG 34= 8=3 3=E 3E8 3E8 J= J3 J3 3=E

3L 3EL 3=3 43 E 4E 8 L4 3=3 3=G 43 8=E 8JD 3LD L< J3 38E 3E4 8 33D D3 8DD 8 3=E EL J 8D4 8D4 8D4 38E J3 3LG E 43 8JD 3=D 84 8<4 3E= 33E EJ = 8DE = = 44 D 44 3E8 48 3D 8=3 8G 8G 8<4 8GE LL 8=3

= 38E 83 = 38E 883 38E 8DG 8D4 3=3 = 83L 4= 8D4 3 84 43 3=4 34G L3 3E4 33E 38E 8<4 GD = 3L8 3L8 E 43 3 34 3E8 343 3E= E< L= 8DL 338 8G 3D 3E8 8=3 = = 84 3E8 3L J8 8D< 44 3D 343 8D 34G 3=E 3=E 3D

83DJ 343L 33<3 3=L3 8G<J 8JE4 8G8L 8E=L 8<D= 8G38 8<GD 8L<D 84J4 8LE= 8L<< <<E 8JJG 8J3= 8GDE 84=J 8ELE 8LJE 8E<J 8J4L 84GJ D43 8<G3 34G= 8EL3 8L84 8=8< 8E4G 838L 84D= 8JL8 8E3< 8E48 8G=L 8D84 3=3G 8LLD 8J43 8J3< JE= = J3= 8J44 8L<G 3=L= 8JJ< 844= 8JJ< 84G= 84LE 8L8L 8LJG 84LL 84D3

JLLL=' JLLE3' JLLJL' JLLGJ' JLL<<' JLE==' JLE83' JLE3L' JLE4J' JLEL<' JLEJ=' JLEG3' JLE<L' JLEDJ' JLJ=<' JLJ3=' JLJ43' JLJLL' JLJEJ' JLJJ<' JLJ<=' JLJD3' JLG=L' JLG8J' JLG3<' JLGL=' JLGE3' JLGJL' JLGGJ' JLG<<' JL<==' JL<83' JL<3L' JL<4J' JL<L<' JL<J=' JL<G3' JL<<L' JL<DJ' JLD=<' JLD3=' JLD43' JLDLL' JLDEJ' JLDJ<' JLD<=' JLDD3' JE==L' JE=8J' JE=3<' JE=L='

4E 38E 4= D3 G= 3LG 338 38E 3EL 338 8DL 4L JG 3=E 3=3 338 8D< L8 3L 34< 8GE L= 8 3LE 8DE E= 3EL E 83L 34 88 J3 JL 3E4 J= J= 3=8 3EL E< 8G 84 3== 3EL L 84 D3 8G 8E 8= 3L 3=

8J 838 3EL 338 8DL 34 88D 43 8J 83J 3 3=8 G< 3EL 8DG 8=3 3=E 43 338 388 3=E 8l 38E 3E4 8D4 8G 8DE 38E 8L3 44 384 4 83 3=4 83 E= J3 8JG 8< 3EL 43 3L G8 L< 43 8 33D D3 34D 8<G 83

3LD 3< 8J 83J E= 44 88 = 38= L D D3 LD 8< 3J G= J3 3LE 33D 34D 3LG 3EL 838 E= E 3EL 8D4 8L< 3=E 8G 44 E= 3E4 8 E< 8L 8 8DJ 3EL 8JG 83 8DL 8L 3E8 3LJ E 3E4 G8 E< 8DG J=

3=8 3=E 38= L 8G 3EE 338 38E DD 3EL 338 3=E 88 3=E 3=E 338 4= J3 33E 3=E 34 LG 3< 8J 38E 38E E 4= 3L = E 38J 3=4 8D< 8E 3EL E= D= G8 8DJ E< 3EL = 3L 3=8 = 3L E< 8L 3=E 8

38E 8<4 DD 3EL 3L8 = 88D 84= J G8 83J 8JE 338 8< GE 88G 3=E 34= 88 3EL 8DE L= 3=E 3EL 838 8L< 38E 3EL 34 8JG = D3 8 3LE 3EL 3=8 8D 83 E< D= 8D J 83 3L4 3EL D 34G 8E 3EL 8=E 84

43 E J GG 338 4L 83 3< 38E 8DL 3E 8G 83J 8D 3J 88 8DJ 388 EE 8< 8D4 44 8<4 38E 3< 4= 43 8 8DE 34G 3E 3=D 84L J3 G8 3=E 3EL E< 33 83 3EL 43 LL 8DG 34 88E 8G 3EL 8LL 3E4 8=

= 38E 38E 8DL 88D 3=8 3=E 3=E 8 LE 3=E EJ L8 43 38< 338 8< 34D = 338 E 3EL E 8L< 3=E E= = L= 8D4 JJ 8G 8DE 3EL 8 E< 8=E J8 38 3EL 8GE 8JG 44 83E J3 8D3 4E E4 8<L 3== 8D4 =

3EL 8L< 8 LE 84 D3 3LG 8<4 33 J 3LG 8D 338 33G 8J4 88J 338 8 3E 83J 38E J4 38E 4= 8<4 8< 38E 83 E 38< E4 GL 43 E= 8L 3E4 E= 3EL J= E= J3 L3 8<< 43 8G 88L 3E4 L< L< G3

4E 4= 33 J 338 3=E 34 E 338 338 34 L= 88D 38D 8G 83 83J 8=L 3=E J< 43 L= 8L< J8 E 3EL 84= J3 J3 LG 3E4 88 EJ 8D 3EL 8GE 8L 8JG 8<L 33 8 8L L< 3=E 338 3=8 3=E E E 3L

8DL 3LE 338 338 83J 843 8DE 38E L3 3=4 44 8L 84 34D 338 338 84 8 83= 338 = EL 4= E= 38E 8GE 3< 4 4 E 88E 3EL <E 3EL 8<L E= 3EL 8DJ 43 3EL E= 3EL 8JG E4 3E4 E= 38= 3E4 34G 8GD

3L= 38E L3 3=4 3E 88 8D4 8L< <8 3L 3EE 338 3L 34= 88= 3=4 338 3=E 3L 88D 3EL 8DE 8JG 8E 8L< E= 3=E 3E4 38E 3=E 4E 8JE 43 3L8 L< 8D E< D= < 3=8 8D E< 8LL 3E4 L3 8E 3E4 EL J< =

8 8L< <8 3L 3=E 8GE E 4= D3 G= = 3=4 4 8 JD 3L 8D= 3E= J3 84 44 3L= 3=3 3EL 4= 33 8<4 3=4 4= 8D 88L 38= L 3=E E 3EL 3= 83 E< 3EL 3EL 8J L= 8D4 <8 D3 E< = GD <=

8LG3 8GE< 88DG 8LJG 8E=3 8L8L 8EG8 8L=J 83ED 8LLE 84L= 83JG DJL 8JJG 8E3D 8E4D 8J<E 8J38 83=G 8D44 8EGG 83G8 8E3= 8ED8 8EL4 83<4 8JEE 833J 834= 8=4G <GL 8EL8 884= 8G43 8=44 8JL= 8=LL 8E8G 8=GG 8JD3 DL8 883G 88=G 8EJE 8EGE G3D 8<=D 8=LD 84EJ 8E8D 88J

Assembler Lis i!gs AFor I! er.ace 8s e;$ipped 7i 1

1e edi io! 8 S1ado7 RO":B

T1e .ollo7i!g is a comple e* .$ll+ comme! ed assembler lis i!g o. 1e mac1i!e code programs 71ic1 ma,e 1e !e7 BASIC comma!ds possible: T1ese co!sis o. a mai! program 71ic1 se s $p 1e !e7 s+s em /ariables !eeded b+ 1e I! er.ace 8* a!d a !$mber o. small programs* o!e o. 71ic1 is $sed b+ eac1 !e7 comma!d: T1e e;$a e s a eme! s $sed b+ 1ese ro$ i!es are i!cl$ded i! a sepera e able a 1e e!d o. 1e lis i!gs: To add 1e !e7 BASIC comma!ds o +o$r Spec r$m* e! er 1e assembler program o! 1e .ollo7i!g pages* as 7ell as 1e able o. ETU s a eme! s 1a .ollo7s i * i! o +o$r assembler* assemble i * a!d sa/e 1e res$l i!g mac1i!e code o! ape or microdri/e: 51e! +o$ 7is1 o $se 1e !e7 BASIC comma!ds* load 1e mac1i!e code .ile i! o +o$r Spec r$m a J4GLL AFD== He):B* a!d do RANDO"I9E USR J4GLL o ma,e 1e !e7 comma!ds a/ailable: All readers o. 1is boo, s1o$ld a leas gla!ce 1ro$g1 1is sec io!* as i! erspersed 7i 1 1e lis i!gs o. 1e !e7 comma!ds are e)amples o. 1eir $se* a!d e)pla!a io!s o. 1eir .$!c io!s: A brie. e)pla!a io! o. 1e ma!!er i! 71ic1 !e7 comma!ds are added o BASIC is gi/e! la er i! 1e boo,* a!d i ma+ pro/e $se.$l i! $!ders a!di!g 71a is bei!g do!e i! 1is sec io!:

"ai! program T1e program s ar s a 1e address FD== 1e) AJ4GLL decimalB* a!d is loca ed abo/e RA"TO%: 51e! i is $sed .or 1e .irs ime* +o$ m$s $se a comma!d RANDO"I9E USR J4GLL o i!i ialise 1e s+s em /ariable SECTOR: 6o$ m$s do 1is 71e!e/er 1e i!i ial SECTOR co! e! s are de.a$l ed bac, o ERRUJ A=8F=B: T1is 1appe!s 71e! +o$ $se a NE5 comma!d o dele e 1e BASIC program .rom 1e memor+: OR@ I "AIN%@ I RST DEFB LD LD RET ERRORU8 HOOK48 HL*STS6N ASECTORB*HL ICrea e !e7 s+s em /ariables i. I!o!e)is e! : IS ore s ar address o. !e7 ro$ i!e Ii! o SECTOR: ETU Q =FD==H

No e 1a i!i iall+ ?1oo, code? N48 is $sed o crea e 1e !e7 s+s em /ariables i. 1e+ do !o alread+ e)is : Fail$re o do so i! +o$r programs 7ill ca$se a probable cras1 71e! +o$ r+ o %OKE some 1i!g i! o 1e loca io! 71ere 1e ?!e7? s+s em /ariables s1o$ld be: T1e address o. 1e s+! a) mod$le ro$ i!e STS6N is 1e! s ored i! o SECTOR: T1is ca$ses 1e ro$ i!e STS6N o be $sed 71e!e/er a comma!d .ails 1e s+! a) o. 1e mai! RO" i! erpre er* a!d 1e! 1a o. 1e s1ado7 RO" i! erpre er: T1e s+s em /ariable CHUADD 7ill poi! o 1e .irs c1arac er o. 1e comma!d 1a prod$ces 1e error: T1e ro$ i!e STS6N is lis ed belo7: STS6N RST DEF5 C% C% C% C% C% C% C% C% C% C% C% C% C% CALBAS @ETUCHAR %OKE 9*%@"8 >(> 9*%@"4 BEE% 9*%@"E READ 9*%@"G RESTORE 9*%@"< L%RINT 9*%@"D ERRUJ IFe c1 comma!d code: IC$mp o 1e appropria e ro$ i!e* Idepe!di!g o! 1e comma!d code:

I@i/e a! error i. !o!e o.

1ese:

No e 1a 1e ?mai!? RO" res ar @ETUCHAR is $sed o .e c1 1e comma!d code i! o 1e A regis erI 1e! a F$mp is made o 1e re;$ired s+! a) mod$le ro$ i!e: I. 1e comma!d code is s ill 7ro!g* 1e error is co!.irmed b+ F$mpi!g o ERRUJ:

A simple ?do$ble %OKE? ro$ i!e' %o,e ( )*+ T1e .irs impleme! ed ?!e7? comma!d is a ?do$ble %OKE? comma!d: T1a is* a %OKE comma!d 1a $ses 7ord opera!ds A8J bi sB i!s ead o. b+ e opera!ds A< bi sB: T1e s+! a) is ?%OKE ()*+V* 71ere ?a? is 1e address i! 1e ra!ge =::JEE4E* a!d ?+? is 1e /al$e o be po,ed a loca io! ?a?* agai! i! 1e ra!ge =::JEE4E: No e 1a 1e s a!dard I! el .orma is $sed* i:e: 1e lo7 b+ e goes be.ore 1e 1ig1 b+ e i! memor+: 6o$ ma+ $se 1e !e7 %OKE comma!d* .or e)ample* o s ore /al$es i! o 7o0b+ e s+s em /ariables' %OKE (34JGE*43=== is a ra 1er s raig1 .or7ard 7a+ o. c1a!gi!g o ?43===? s+s em /ariable* as compared 7i 1 1e $s$al' %OKE 34JGE*43===W3EJ(INT A43===P3EJB %OKE 34JGJ*INT A43===P3EJB T1e mac1i!e code program $sed %@"8 RST DEF5 C% C% RST DEF5 CALL RST DEF5 %USH RST DEF5 %USH %O% %O% LD INC LD C% CALBAS NEXTUCHAR >(> N9*%@"3 CALBAS NEXTU3NU" STUEND CALBAS FINDUINT3 BC CALBAS FINDUINT3 BC HL BC AHLB*C HL AHLB*B END8 o do 1is is /er+ simple' IAd/a!ce CHUADD: IC$mp i. i is !o 1e co! e! s o. 1e UD@

a %OKE ()*+ comma!d:

IE/al$a e 1e 7o parame ers: ICo!.irm e!d o. s a eme! : IFe c1 !$mber ISa/e i : o be %OKEd:

IFe c1 address: I"o/e i i! o HL: IRes ore /al$e: I%OKE 1e lo7 b+ e: I%OKE 1e 1ig1 b+ e: IFi!is1ed:

I!i iall+ 1e s+! a) o. 1e !e7 comma!d is c1ec,edI CHUADD is ad/a!ced o 1e c1arac er 1a .ollo7s 1e o,e! ?%OKE?* a!d i. 1e c1arac er ?(? is !o prese! * a F$mp is made o 1e comma!d .or po,ei!g s ri!gs i! o memor+ Abeca$se 1e c$rre! comma!d is !o %OKE ()*+B: Ass$mi!g 1a o$r c$rre! comma!d is %OKE ()*+* 1e ?mai!? RO" ro$ i!e NEXTU3NU" is 1e! $sed o e/al$a e 7o !$meric e)pressio!s Asepara ed b+ a commaB* .ollo7i!g 1e c1arac er poi! ed b+ CHUADD: A! error 7ill occ$r i. 1e e)pressio!s 1a/e i!correc s+! a): O 1er7ise 1e s+! a) is correc a!d 1e call o STUEND re $r!s o 1e ?mai!? RO" d$ri!g s+! a) c1ec,i!g: D$ri!g r$! ime 1e e)ec$ io! co! i!$es* a!d 1e mai! RO" ro$ i!e FINDUINT3 is $sed o .e c1 1e /al$es .rom 1e calc$la or s ac,: A. er 1e %OKE ( 1as bee! do!e* co! rol is re $r!ed o 1e mai! RO" i! erpre er b+ F$mpi!g o END8:

%o,ei!g s ri!gs i! o memor+' %OKE !*>s> T1is comma!d ma,es i possible o %OKE a s ri!g i! memor+* s ar i!g .rom address ?!?: For e)ample* 1e s a eme! ' %OKE 4====* >FRED BLO@@S> 5ill %OKE 1e ASCII /al$es o. 1e c1arac ers i! 1e s ri!g >FRED BLO@@S>* s ar i!g .rom 1e address 4====: 6o$ ma+ c1ec, 1is b+ readi!g bac, 1e /al$es 7i 1 %EEK' FOR AM4==== TO 4==8=' %RINT CHRQ %EEK AI' NEXT A No e 1a 1e ro$ i!e .ails 1e s+! a) o. 1e i! erpre er b+ $si!g a di..ere! parame er +pe Ai:e: a s ri!g i!s ead o. a !$mberB* 71ile 1e pre/io$s ro$ i!e $sed a ?(? c1arac er .ollo7i!g 1e comma!d code: %@"3 RST DEF5 C% C% RST DEF5 RST DEF5 CALL RST DEF5 %USH %USH RST DEF5 LD LD %O% %O% LD OR C% LDIR C% CALBAS EX%TU8NU" CO""A N9*ERRUJ CALBAS NEXTUCHAR CALBAS EX%TUEX% STUEND CALBAS STKUFETCH BC DE CALBAS FINDUINT3 D*B E*C HL BC A*B C 9*END8 END8 IE/al$a e 1e address: prese! : 1e

IA separa or m$s be prese! : IRepor 1e error i. i is !o IAd/a!ce CHUADD: IE/al$a e s ri!g e)pressio!: ICo!.irm e!d o. s a eme! * IFe c1 s ri!g parame ers: ISa/e ?le!g 1? a!d ?s ar ?: IFe c1 address: I"o/e address i! o DE:

IRes ore s ri!g ?s ar ? a!d ?le!g 1?: IE)i 7i 1 !$ll s ri!g:

IT1e ac $al %OKE: IFi!is1ed:

T1e ro$ i!e is e! ered .rom 1e %OKE ()*+ ro$ i!e 7i 1 CHUADD poi! i!g o 1e c1arac er .ollo7i!g 1e ?%OKE? o,e!: T1e mai! RO" ro$ i!es EX%TU 8NU" a!d EX%TUEX% are 1e! $sed* respec i/el+ o e/al$a e a !$meric a!d a s ri!g e)pressio!: A comma m$s be placed be 7ee! 1em as separa or: D$ri!g r$! ime* 1e mai! RO" ro$ i!es STKUFETCH a!d FINDUINT3 are $sed o .e c1 1e s ri!g parame ers* a!d 1e /al$e o. 1e !$meric e)pressio!: No ac io! is a,e! iF 1e s ri!g 1as !$ll le!g 1:

"emor+d$mp' (L ! T1is ro$ i!e crea es a !e7 comma!d ?(L !? 1a lis s 1e memor+ co! e! s* s ar i!g .rom 1e address !* i! bo 1 1e)adecimal a!d ASCII: U!pri! able ASCII codes a e pri! ed as spaces: For e)ample* 1e .ollo7i!g s a eme! ' (L 48D3= 5ill lis 1e co! e! s o. 1e memor+ s ar i!g .rom address 48D3=: No e 1a 71e! d$mpi!g memor+ a addresses lo7er 1a! 8J4<L* 1e ?s1ado7? RO" code is s1o7!: Tr+ .or e)ample o d$mp .rom 1e address JDE* 1a is 1e s ar o. 1e ?s1ado7 RO" repor messages able: T1e res$l 7ill be as .ollo7s' =3BG =3BD =3C4 =3CD =3CF =3DE == J8 JD L8 G4 L3 E= JD G4 JF JE L8 G3 JF 3= JJ J< JE JE G4 3= JD E4 LD :::: :::: JG JD JL JE JE L4 G3 JE =8 JE 3= =3 %rogr am .i! is1ed No!se! se i! BASIC

T1e ro$ i!e .ollo7s' %@"4 RST DEF5 C% C% OR C% C% RST DEF5 RST DEF5 CALL RST DEF5 LD LD LD CALL LD CALL LD CALL %USH LD %USH LD CALL INC DCN9 %O% %O% LD AND C% CR C% CR CR LD CALBAS NEXTUCHAR CAT 9*%@"J 3=H >l> N9*%@"L CALBAS NEXTUCHAR CALBAS EX%TU8NU" STUEND CALBAS FINDUINT3 H*B L*C A*H DIS%UHEX A*L DIS%UHEX A*S%ACE DIS%UCH HL B*J BC A*AHLB DIS%HEX3 HL LULOO% BC HL A*AHLB GFH S%ACE C*RECECT <=H NC*RECECT ACCE%T A*S%ACE IAd/a!ce CHUADD: IC$mp i. 1e comma!d is CAT: I"a,e 1e le er lo7er case: IC$mp i. 1is is !o a! >(L> comma!d: IAd/a!ce CHUADD: IE/al$a e s ar address: ICo!.irm e!d o. s a eme! : IFe c1 s ar address: I"o/e i i! o HL:

A@AIN

IDispla+ 1ig1 b+ e o. address i! 1e): IDispla+ lo7 b+ e: I%ri! a space:

LULOO%

ISa/e c$rre! address: IDispla+ J b+ es: ISa/e co$! er .or la er* IFe c1 a b+ e: IDispla+ i i! 1e): IE)ami!e eac1 b+ e i! $r!: IRes ore co$! er a!d address: IFe c1 a b+ e: IClear bi G: IReFec codes lo7er IReFec codes grea er

CULOO%

1a! S%ACE: 1a! GFH:

RECECT

IReplace i!/alid codes 7i 1 ?space?

ACCE%T

CALL INC DCN9 LD CALL CR

DIS%UCH HL CULOO% A*CR DIS%UCH A@AIN

Icode: I%ri! 1e c1arac er: IAd/a!ce poi! er: ICo! i!$e 1e oop: IFi!all+ pri! a carriage re $r!: IC$mp bac,:

T1is ime* 1e i! erpre er s+! a) is .ailed b+ s ar i!g 1e comma!d 7i 1 a !o!0 s a!dard c1arac er* !amel+* a ?(?: T1e le er ?L? A.or ?L?is B ma+be ei 1er $pper or lo7er case: No e 1a 1e s1ado7 RO" ro$ i!es DIS%UHEX* DIS%UHEX3 a!d DIS%UCH are $sed o pri! c1arac ers o! o s ream 3 A 1e scree!B: No e also 1a 1e comma!d 7ill !e/er e!d d$ri!g r$! ime: T1is* 1o7e/er* 7ill !o res$l i! a! e!dless loop* as +o$ ma+ simpl+ press BREAK 71e! 1e ?scroll? message is displa+ed o! 1e scree!* o s op 1e lis i!g: T1e o$ p$ ma+ be direc ed o a de/ice o 1er 1a! 1e scree! b+ .irs $si!g a! O%EN comma!d: i:e: O%EN 23*>T> 7ill direc 1e o$ p$ o 1e RS343 >T> c1a!!el: T1e mai! RO" ro$ i!es EX%TU8NU" a!d FINDUINT3 are $sed o e/al$a e a!d .e c1 1e gi/e! parame er ?!?:

"odi.ied EDIT .$!c io!' (E ! T1e !ormal ?EDIT? .$!c io! is !o /er+ 7ell impleme! edI i. +o$ 7is1* .or e)ample* o EDIT li!e L4<E o. +o$r program* +o$ m$s .irs ma,e 1e li!e ?c$rre! ? b+ $si!g some 1i!g li,e LIST L4<E* a!d 1e! Aa. er 1a/i!g pressed BREAK o s op 1e lis i!gB press 1e EDIT ,e+: B+ $si!g 1is ro$ i!e* +o$ ma+ +pe simpl+ ?(E L4<E? o do 1e same 1i!g: T1e lis i!g o. 1e ro$ i!e .ollo7s' %@"L C% C% RST DEF5 RST DEF5 CALL RST DEF5 BIT C% LD AND C% LD LD LD %USH LD %USH LD %USH LD LD RST DEF5 LD %USH RST >e> N9*ERRUJ CALBAS NEXTUCHAR CALBAS EX%TU8NU" STUEND CALBAS FINDUINT3 G*AI6N%%CUHIB 9*ERRUJ A*B =C=H N9*ERRUJ AEU%%CB*BC S%*AERR S%B HL*ENDED HL HL*AERRUS%B HL HL*EDUERROR HL AERRUS%B*S% AI6NERRUNRB*=FFH CALBAS EDUEDIT HL*EDULOO% HL "AINURO" IError i. i is !o 1e ?(E? comma!d:

IAd/a!ce CHUADD: IE/al$a e li!e !$mber: ICo!.irm e!d o. s a eme! : IFe c1 li!e !$mber: IAccep o!l+ as ?direc ? comma!d: o. ra!ge:

IError 7i 1 li!e !$mber o$ I"a,e 1is li!e ?c$rre! ?: IClear mac1i!e s ac,: IFi!al re $r! address: ISa/e c$rre! error address:

IT1e !e7 error address: IClear 1e error:

ICopies 1e li!e i! o 1e edi i!g area: IRe $r! o ?EDi or LOO%?* a!d o ENDED Ibelo7 71e! .i!is1ed:

I INOTE' "ai! RO" i! $se: I ENDED %O% HL C% 83BLH

IRemo/e Nl4=4 .rom 1e s ac,: IC$mp bac, o 1e mai! e)ec$ io! loop:

No e 1a 1e comma!d is reFec ed a r$! ime ABIT G*%%CUHIB i. i is !o a ?direc ? o!e' 1is is beca$se a! EDIT comma!d $sed 7i 1i! a program does !o ma,e se!se: T1e comma!d is also reFec ed i. +o$ speci.+ 7ro!g li!e !$mbers: I. +o$ $se a !o!e)is e! li!e !$mber* 1e !e) e)is e! !$mber is $sed: T1e ro$ i!e e! ers 1e mai! RO" ?EDITOR? s$bro$ i!e* a. er 1a/i!g copied 1e li!e i! o 1e edi i!g area* a!d re $r!s o 1e mai! e)ec$ io! loop 71e! .i!is1ed:

A! impro/ed so$!d comma!d' BEE% (a*b*c*d T1e s a!dard ?BEE% )*+? comma!d is /er+ limi ed' i 7ill o!l+ ma,e so$!ds o. a co!s a! pi c1: T1is ro$ i!e crea es a !e7 ?BEE%? comma!d 1a accep s .o$r parame ers* gi/i!g a! e!dless ra!ge o. possible so$!d e..ec s: T1e s+! a) o. 1e !e7 comma!d is ?BEE% ( a*b*c*d?* 71ere ?a? a!d ?b? are 1e /al$es 1a 1e mai! RO" ?BEE%ER? s$bro$ i!e accep s as ?pi c1? a!d ?le!g 1?* ?c? is a ?s ep? /al$e 1a 7ill be s$b rac ed .rom ?a? $! il i reac1es Xero* a!d ?d? is a ?repea ? /al$e 1a de.i!es 1o7 ma!+ imes 1e 71ole so$!d m$s be made: Tr+ 1e .ollo7i!g s a eme! ' BEE% ( 8==*3EE*8=*8 T1e .ollo7i!g BASIC program 7ill ge!era e a 7ide ra!ge o. so$!ds' 8= 3= 4= L= E= J= LET aMRND(8===N8= LET bMRND(JN8 LET cMRND(E=N8 LET dMRND(4N8 BEE% (a*b*c*d @O TO 8=

T1e ro$ i!e is lis ed belo7' %@"E RST DEF5 C% C% RST DEF5 C% C% RST DEF5 CALL RST DEF5 %USH RST DEF5 AND CR LD LD %USH RST DEF5 AND CR LD LD %USH RST DEF5 %USH CALL %O% %O% %O% %O% %USH CALBAS NEXTUCHAR >(> N9*ERRUJ CALBAS NEXTU3NU" CO""A N9*ERRUJ CALBAS NEXTU3NU" STUEND CALBAS FNDUINTl AF CALBAS FNDUINTl A 9*RAN@E C*A B*= BC CALBAS FNDUINT8 A 9*RAN@E C*A B*= BC CALBAS FINDUINT3 BC UN%A@E HL DE BC AF HL IAd/a!ce CHUADD: IT1e ?(? m$s be prese! :

IE/al$s e ?a?*?b? IA separa or m$s IE/al$a e ?c?*?d?: ICo!.irm e!d o. s a eme! : IFe c1 ?d?: ISa/e i : IFe c1 ?c?: I@i/e a! error i. cM=: IO 1er7ise mo/e i ISa/e i : IFe c1 ?b?: I@i/e a! error i. bM=: I"o/e i i! o BC: i! o BC: be .o$!d a. er ?b?:

ISa/e ?b? brie.l+: IFe c1 ?a?: ISa/e i emporaril+: IUse mai! RO": IRes ore ?a?* ?b?* ?c? a!d ?d? /al$es:

LOO%3

ISa/e ?a? .or !e)

pass:

LOO%8

%USH %USH %USH %USH CALL %O% %O% %O% %O% AND SBC CR DEC %O% CR LD LD RST DEFB LD RST

AF BC HL DE BEE%ER DE HL BC AF A HL*BC NC*LOO%8 A HL N9*L==%3 HL*END8 AHDU88B*HL ERRORU8 HOOK43 AI6NERRUNRB*= RO"ERR

ISa/e /al$es:

IEmi a so$!d: IRes ore /al$es:

IS$b rac ?s ep? .rom ?a?: ICo! i!$e 71ile s$b rac io! possible: IDecrease ?d? IRes ore ?a? .or repe i io!: IRepea 1e so$!d $! il dM=: INo e 1o7 1e re $r! is made o 1e Is1ado7 RO":

I RAN@E

ICall

1e error 1a!dli!g ro$ i!e:

No e 1a ?b?* ?c? a!d ?d? m$s be i! 1e ra!ge l::3EE* A?d? ma+ be se o <* b$ 1is 7ill gi/e 1e same e..ec 1a +o$ 7o$ld e)pec .rom a /al$e o. 3EJ:B Be care.$l 1a +o$ c1oose 1e rig1 le!g 1 .or +o$r so$!d* as 1e 1e BREAK ,e+ 7ill !o 7or, i! 1e middle o. a so$!d: I. +o$ 1a/e some di..ic$l + i! c1oosi!g 1e correc ?a? a!d ?b? /al$es* +o$ ma+ calc$la e 1em as s1o7! belo7' a M L4GE==P.re;$e!c+K4=:l3E b M .re;$e!c+ ( ime A.re;$e!c+MHX* imeMsec:B

6o$ ma+ also $se 1e .ollo7i!g BASIC program 71ic1 calc$la es 1e /al$es .or A a!d B* s ar i!g .rom 1e ?)?* ?+? /al$es $sed i! a !ormal BEE% comma!d: For e)ample* 1e so$!d ob ai!ed 7i 1 BEE% =:=8*8= re;$ires ?D=<? a!d ?L? as A a!d B /al$es: 8= DATA 3J8:J4* 3GG:8<* 3D4:JJ* 488:84* 43D:J4* 4LD:34* 4JD:DD* 4D3* L8E:4* LL=* LJJ:8J* LD4:<< 3= IN%UT >TI"E ASEC:B H >I 4= IN%UT >%ITCH H >Ip L= LET iMINT p' LET piMpKi E= LET p,MApi(:=EGGJ33J=JBN8 J= LET aMiNJ=' LET bMKJ G= LET bMbN8' LET aWaK83 <= IF S@N aABK8 THEN @O TO G= D= LET aMaNl3 8== RESTORE' FOR )M= TO a' READ c' NEXT ) 88= LET .MAp,(cB(3Kb' IF .( M= THEN %RINT >ERROR>' STO% 83= %RINT >AM>IINT AL4GE==P.K4=:83EB?>BM>IINT A.( B

A .as er a!d more comple e ca alog$e'( CAT ! A. er some ?ge!eral p$rpose? comma!ds come some more complica ed ro$ i!es 1a $se 1e !e7 I! er.ace?s de/ices: T1is ro$ i!e adds a !e7 comma!d ?( CAT !? 1a gi/es a .$ll ca alog$e o. a car ridge 1eld i! 1e microdri/e ?!?: T1e comma!d r$!s abo$ 304 seco!ds .as er 1a! 1e s a!dard ?CAT !? comma!d* does !o limi 1e o$ p$ o ED !ames* a!d pro/ides i!.orma io! o! 1e !a $re o. 1e .ile* i s le!g 1* e c:* 1a is !o gi/e! 71e! 1e s a!dard ?CAT? comma!d is $sed: Si!ce 1e !ames are pri! ed as 1e+ are .o$!d o! 1e car ridge* 1e lis is !o alp1abe icall+ ordered: Alo!g 7i 1 eac1 .ile!ame 1e .ollo7i!g i!.orma io! 7ill appear' ?%RINT? ?CODE sssss*!!!!!? ?DATA )? ?DATA )Q? ?LINE !!!!!? I. i I. i 1e s I. i I. i I. i is is ar is is is a %RINT0 +pe .ile: a ?b+ es? .ileI ?sss? a!d ?!!!? are respec i/el+ address a!d 1e le!g 1 o. 1e .ile: a !$meric arra+ !amed ?)?: a s ri!g arra+ !amed ?)Q? a BASIC program 7i 1 a$ os ar a li!e ?!!!?: 1e! 1e .ile is a !ormal BASIC

I. !o 1i!g is pri! ed a. er 1e .ile!ame* program sa/ed 7i 1o$ 1e a$ os ar : T1e ro$ i!e is lis ed belo7: %@"J RST DEF5 CALL CALL CALL LD RST DEF5 CALL LD CALL CALL LD LD CALL CALL CR LD BIT CR LD LD OR AND C% CALL CR LD OR CR LD OR CR LD C% CR CALBAS NEXTUCHAR EX%TUNU" CHECKU"U3 STUEND A*3 CALBAS CHANUO%EN SETUTU"CH A*AIXNCHDRISB SELUDRISE @ETU"UHD=3 HL*RDESC DE*8<H @ETD CHKSUHD R N9*CATLOO% HL*RDESC =*AHLB N9*CATLOO% A*ARDESCB HL*RDESCN4 AHLB 3 N9*%RIUNA RESUBU"A% CATLOO% A*ARDESCNLB A 9*CATLOO% A*ARDESCN8B A N9*CATLOO% A*AIXNHDNU"BB AIXNCHRECB 9*ENDCAT

IAd/a!ce CHUADD: IE/al$a e dri/e !$mber: IC1ec, ra!ge o. dri/e !$mber: ICo!.irm e!d o. s a eme! : IUse s ream 3 Ascree!B: ICrea e a emporar+ >m> c1a!!el: IT$r! o! dri/e mo or: I@e a 1eader: IA!d a record descrip or .rom IRDESC: IRepea $! il 1e address

CATLOO%

1e c1ec,s$m is correc : +pe

IRepea also i. loaded 7ro!g bloc, IA1eaderB: IC$mp .or7ard 7i 1 ?!o

.ree? sec ors:

I"ar, ?.ree? sec ors: IIg!ore !ames s ar i!g 7i 1 CHRQ =: IIg!ore o 1er 1a! .irs records: ape 1as

I %RIUNA

IC$mp .or7ard 71e! Ibee! e)ami!ed:

1e 71ole

CALL CALL LD OR C% LD LD C% I ENDCAT %USH XOR CALL CALL %USH %O% LD ADD CALL CALL CALL LD SRL RST DEF5 RST DEF5 CALL %O% CALL C% LD C%

OUTNA" %RCR A*AIXNCHRECB A N9*CATLOO% A*AIXNHDNU"BB AIXNCHRECB*A CATLOO% IX A SELUDRISE %RCR IX HL DE*3CH HL*DE %RNANE %RCR FREESECT A*E A CALBAS STACKUA CALBAS %RINTUF% %RCR IX DELU"UBUF END8 A*CR %RCHAR

IE)ami!e c$rre! record: I%ri! a carriage re $r!: IC$mp $!less .irs ime ACHRECM=B: IS ore c$rre! sec or !$mber A o lde ec 71e! 1e 71ole ape 1as bee! Ie)ami!edB: ISa/e c1a!!el s ar address: IT$r! o.. dri/e mo ors: ILea/e a bla!, li!e: I"a,e HL poi! o HDNANE:

I%ri! car ridge !ame: I%ri! a carriage re $r!: IFe c1 !$mber o. ?.ree? sec ors: IA 1olds 1e !$mber o. Kb+ es le. : IS ore 1is !$mber o! calc$la or s ac,: I%ri! 1e !$mber o! 1e scree!:

IFi!al carriage re $r!: IRes ore c1a!!el s ar address: IReclaim 1e c1a!!el: IFi!is1ed: I%ri! a carriage re $r!:

I %RCR I @ETD I RDESC I OUTNA"

%USH HL C% @TU"UBLK DEFB l<H LD LD LD CALL LD CALL LD BIT C% LD C% LD OR C% C% C% DEC %USH LD CALL LD AND ADD HL*SCRUCT AHLB*=FFH HL*RDESCNL %RNA"E A*S%ACE %RCHAR A*ARDESCB 3*A N9*NOT%RINT A*%RINT %RCHAR A*AHLB A 9*%RO@ 4 9*B6TES A AF A*DATA %RCHAR A*ARDESCN3=B 8FH A*J=H

ISa/e s ar address: IFe c1 descrip or a!d 1eader i!.orma io!: ISpace o s ore record descrip or:

IS$ppresa scrolli!g: I%ri! record !ame: 7i 1 a space:

IFollo7 i

IT1is is ?RECFL@?: IC$mp i. 1is is !o a I?%RINT0 +pe? .ile: IO 1er7ise pri! 1e ,e+7ord ?%RINT?:

I IC$mp 7i 1 IC$mp 7i 1 +peM= Aprogram .ilesB: +peM4 Ab+ esB:

ISa/e Xero .lag Ase 7i 1 !$meric Iarra+sB: I%ri! 1e ,e+7ord DATA: IFe c1 arra+ !ame: IClear bi E*J*G: IOb ai! a! ASCII code:

CALL %O% RET LD C% I %RO@ LD LD AND RET DEC LD CALL LD INC LD EX LD CALL LD CALL LD CALL LD CALL LD LD INC OR SBC CR ADD OR C% LD CALL INC %USH INC INC CALL LD CALL %O% C% LD LD CALL INC DCN9 RET

%RCHAR AF 9 A*>Q> %RCHAR HL*RDESCN34 A*AHLB =C=H N9 HL A*LINE %RCHAR E*AHLB HL D*AHLB DE*HL DE*8==== %RDI@ DE*8=== %RDI@ DE*8== %RDI@ DE*8= %RDI@ DE*8 A*K8 A A HL*DE NC*OUTD HL*DE 4=H %RCHAR A*CODE %RCHAR HL HL HL HL F%RINT A*CO""A %RCHAR HL F%RINT B*8= A*AHLB %RCHAR HL %RLOO%

I%ri! arra+ !ame: IRe $r! 7i 1 !$meric arra+s: IB$ pri! ?Q? 7i 1 s ri!g arra+s: li!e !o:

IFe c1 1ig1 b+ e o. a$ os ar IRe $r! i. !o a$ os ar

7as speci.ied: 1e!

I%oi! o 1e lo7 b+ e: I%ri! 1e ,e+7ord LINE* a!d I 1e li!e !$mber' IFe c1 e! r+ i!direc l+: I"o/e /al$e i! o DE: I%ri! I%ri! I%ri! I%ri! .irs digi :

I F%RINT

I %RNU"

seco!d digi : 1ird digi : .o$r 1 digi :

%RDI@ OUTD

I%ri! las digi : ICo$! er: II!creme! 1e co$! er: IClear carr+ .lag: I?Trial s$b rac io!?: ICo! i!$e $! il borro7i!g .o$!d: IBala!ce las SBC: I"a,e 1e co$! er a! ASCII c1arac er Ia!d pri! i : I%ri! 1e ,e+7ord CODE: o ?le!g 1?:

I B6TES

ISa/e poi! er

I%ri! I%ri!

1e ?s ar ?: a comma: 1e ?le!g 1?:

IFi!all+ pri!

I %RNA"E %RLOO%

ICo$! s e! c1arac ers: IFe c1 c1arac er* I%ri! i : IAd/a!ce 1e poi! er: ILoop .or 1e 71ole !ame:

T1e 8: 3: 4: L:

ro$ i!e ca! be di/ided i! o ele/e! di..ere! sec io!s' A ? emporar+ >m> c1a!!el? a!d map is crea ed i! 1e CHANS area: T1e re;$ired "icrodri/e is $r!ed o!: T1e c$rre! sec or !$mber is s ored i! o CHREC: A ?1eader? is loaded .rom 1e car ridge i! o 1e >m> c1a!!el 1eader area:

E: T1e ?record descrip or? a!d 1e ?1eader i!.orma io!s? are loaded i! o 1e RDESC area: J: I. 1e ?1eader? i!dica es ?.ree? sec or* 1e appropria e map bi is rese a!d 1e program loops bac, o s ep ALB G: T1e .ile!ame a!d 1e /ario$s i!.orma io! are a,e! .rom 1e RDESC area a!d pri! ed o! 1e scree!: <: T1e program co! i!$es loopi!g bac, o ALB $! il 1e 71ole ape 1as bee! e)ami!edI 1is is do!e b+ compari!g 1e c$rre! sec or !$mber agai!s CHREC o!e: D: T1e car ridge !ame is a,e! .rom HDNA"E a!d pri! ed: 8=: T1e !$mber o. ?.ree sec ors? is $sed o pri! 1e !$mber o. Kb+ es le. i! 1e car ridge: 88: T1e "icrodri/e mo or is $r!ed o..* a!d 1e c1a!!el is reclaimed: Names s ar i!g 7i 1 CHRQ 8< are !o pri! edI records o 1er 1a! ?.irs ? o!es are !o e)ami!ed* so as o a/oid 1e pri! i!g o. a .ile!ame more 1a! o!ce: No e 1a 1e .orm (CAT 2SIN is !o s$ppor ed* beca$se 1ere is !o s$..icie! ime o se!d 1e i!.orma io! .e c1ed o a c1a!!el o 1er 1a! 1e scree!* be.ore 1e !e) ape sec or is d$e o be e)ammi!i!ed: I. +o$ 7is1 o direc 1e ca alog$e o a pri! er* +o$ m$s $se .irs a comma!d s$c1 as' O%EN 23I>m>IdI>CAT> a!d 1e! $se 1e (CAT ! comma!d: Fi!all+ ?CLOSE 23? 7ill se!d 1e "icrodri/e: I ca! 1e! be pri! ed 7i 1 ei 1er' "OSE >m>IdI>CAT> TO 24 "OSE >m>IdI>CAT> TO >b> A7i 1 1e 9X pri! erB A7i 1 RS343 pri! ersB 1e ca alog$e o

T1e ca alog$e ca! 1e! be erased 7i 1 ERASE >m>I!I>CAT> A71ere ?!? is 1e dri/e !$mberB: I! 1is case* +o$ m$s a,e care 1a 1e o$ p$ o. 1e ca alog$e 7ill !o re;$ire more 1a! E83 c1arac ers o be pri! ed Ao 1er7ise $!predic able res$l s ma+ occ$r 71e! 1e Spec r$m ries o se!d 1e record o 1e "icrodri/e 71ile 1e CAT comma!d is opera i/eB: T1is ca! be do!e b+ ma,i!g s$re 1a 1ere are .e7er 1a! 3= .iles o! 1e car ridge: No e 1a o .ail 1e s+! a) o. 1e i! erpre er* 1e comma!d begi!s 7i 1 a ?(? c1arac erI 1e comma!d ma+ !o begi! 7i 1 a ?!e7? comma!d o,e!* s$c1 as CAT* SASE* ERASE* CLS* e c:

%se$doKra!dom .ile 1a!dli!g' READ 2S*N T1is comma!d 7ill permi a ?pse$do0ra!dom? 1a!dli!g o. "icrodri/e .iles: 51e! READ 2S*N is e)ec$ ed* 1e ?read? "icrodri/e c1a!!el a ac1ed o 1e s ream ?S? is $sed* a!d record ?!? o. 1a .ile is loaded i! o 1e c1a!!el b$..er: Si!ce 1e "icrod i/e s+s em spli s 1e mai! ?%RINT0 +pe? .iles i! o records E83 b+ es lo!g* +o$ ma+ 7ri e i ems 7i 1 ?le!g 1ME83?* 1ereb+ 1a/i!g eac1 record co! ai! a si!gle i em* a!d 1e! read bac, 1a i em 7i 1 1e READ 2S*N comma!d: S$c1 a! applica io! is s1o7! b+ $si!g 1e .ollo7i!g BASIC program: Eac1 i em is made b+ < eleme! s Ale!g 1MJ4 c1arac ers N carriage re $r!B o. a! arra+* e)ac l+ E83 b+ es: 5i 1o$ 1e READ 2S*N comma!d +o$ 1a/e o read se;$e! iall+ all i ems be.ore reac1i!g 1e desired o!e: 8= DI" aQA3L*J4B 3= RE" Some da a .or 1e .ile 4= DATA >THE "ICRODRISES>* >gi/e +o$ .as access o a large memor+:>* >>* >Eac1 "icrodri/e ca! 1old $p o 8== Kb+ es o! a si!gle>* >remo/able car ridge:>* >No e 1a 1e "icrodri/e !eares 1e comp$ er is al7a+s ,!o7! as>* >"icrodri/e 8* a!d 1e !e) alo!g is "icrodri/e 3* a!d so o!:>* >T1ere is also a lig1 o! 1e .ro! o. eac1 "icrodri/e:> L= DATA >THE CARTRID@ES>* >come i! a pro ec i/e bo)I a!d s1o$ld al7a+s be ,ep i! 1eir>* >bo) 71e! !o i! $se:>* >B$ remember:::>* >Ne/er a,e 1e car ridge o$ o. 1e "icrodri/e 71ile 1e lig1 >* >is o!:>* >Ne/er s7i c1 1e po7er o! or o. 71ile a car ridge is i! 1e>* >"icrodri/e:> E= DATA >THE NET5ORK>* >e!ables +o$ a!d +o$r .rie!ds o pla+ comp$ er games oge 1er>* >a!d o se!d eac1 o 1er programs a!d da a:>* >T1is mea!s 1a o!l+ o!e o. +o$ !eed e/er +pe i! a program:>* >Usi!g 1e lead s$pplied 7i 1 eac1 I! er.ace +o$ ca! li!, $p>* >as .e7 as 7o a!d as ma!+ as JL Spec r$m comp$ ers:> J= O%EN 2LI>">I8I>FILE> G= FOR aMl TO 3L' READ aQAaB' NEXT a <= CLOSE 2L D= CLEAR' RE" T1e .ile 1as bee! cleared: 8== O%EN 2LI>">I8I>FILE> 88= CLS' %RINT >%ress a ,e+ .or +o$r c1oice' >??>=: "ICRODRISES>??>l: CARTRID@ES>??>3: NET5ORK>??>4: STO%> 83= %AUSE =' LET aQMINKE6QI IF aQO>=> OR aQR>4> THEN @O TO 88= 84= IF aQM>4> THEN CLOSE 2L' STO% 8L= READ 2L*SAL aQ 8E= CLS' FOR aM8 TO <' IN%UT 2LIaQ' %RINT aQ' NEXT a 8J= %AUSE =' @O TO 88= I. 1e s reamAsB speci.ied i! 1e comma!d is !o ope!ed* 1e error >i!/alid s ream> 7ill occ$r: >I!/alid de/ice e)pressio!> 7ill occ$r i. 1e s ream is !o a ac1ed o a! >m> c1a!!elI >Readi!g a ?7ri e? .ile> 7ill occ$r i. 1e c1a!!el is ope!ed .or 7ri i!g: T1e car ridge is simpl+ searc1ed .or 1e ?!? 1 record o. 1e .ile ?!? bei!g i! ra!ge =::3EEB* 1e! i is loaded a!d CHB6TE cleared so as o direc INKE6Q a!d IN%UT comma!ds o 1e .irs b+ e loaded: I. 1e record is !o .o$!d* or i. a!+ readi!g error occ$rs* 1e error ?File !o .o$!d? 7ill be repor ed: T1e lis i!g o. 1e ro$ i!e .ollo7s: %@"G RST DEF5 C% C% RST DEF5 CALL RST DEF5 CALBAS NEXTUCHAR >2> N9*ERRUJ CALBAS NEXTU3NU" STUEND CALBAS FNDUINT8 IAd/a!ce CHUADD: IA 1as1 sig! m$s be prese! Ia. er READ: IE/al$a e ?s?*?!? ICo!.irm e!d o. s a eme! : IFe c1 ?!?:

%USH RST DEF5 C% C% RST DEF5 LD LD C% C% BIT C% %O% LD LD CALL LD LD CALL XOR LD LD CALL C%

AF CALBAS FNDUINT8 8=H NC*NRE%ORTK3 CALBAS CHANUO%EN IX*ACURCHLB A*AIXNLB >"> N9*NRE%ORT04 =*AIXNCHFLA@B N9*R5F0ERR AF AIXNCHRECB*A A*AIXNCHDRISB SELUDRISE HL*=FFH ASECTORB*HL @ETURUL% A AIX*CHB6TEB*A AIXNCHB6TEN8B*A SELUDRISE END8

ISa/e i .or la er: IFe c1 ?s?: I@i/e a! error i. ?s? is grea er IUse 1is s ream: IFe c1 c1a!!el s ar address: IFe c1 c1a!!el speci.ier: IError i. !o a! >"> c1a!!el: IError i. 1e .ile is ope!ed .or I7ri l!g: IS ore record !$mber i! o CHREC: IT1e dri/e mo or is ICo$! s 3EE sec ors: IFe c1 record: IC8ear CHB6TE: IS7i c1 o.. dri/e mo or: IFi!is1ed: $r!ed o!: 1a! 8E

Addi!g da a

o a .ile' RESTORE 2S

Normall+* i. +o$ r+ o 7ri e da a o! o a "icrodri/e .ile 1a 1as pre/io$sl+ bee! CLOSEd* 1e error ?5ri i!g o a ?read? .ile? 7ill occ$r: T1is ma,es 1e opera io! o. e) e!di!g a .ile 7i 1 more da a di..ic$l * as o!e 1as o crea e a !e7 .ile* cop+ i! o i 1e ?old? o!e a!d 1e ?!e7? da a* a!d 1e! erase 1e ?old? .ile: T1is is !o eas+* a!d is a /er+ slo7 process: T1is comma!d 7ill co!/er 1e ?read? .ile a ac1ed o 1e s ream ?s? bac, o a ?7ri e? .ile* 1$s permi i!g 1e addi io! o. more da a: 51e! +o$ 1a/e .i!is1ed addi!g da a* +o$ ma+ CLOSE 1e s ream 1a re $r!s a ?read? .ile: 6o$ ma+ $se RESTORE 2S agai! o co!/er i i! o a ?7ri e? .ile i. +o$ 7is1: T1e .ollo7i!g BASIC program 7ill demo!s ra e E 8= 3= 4= L= E= J= G= <= D= 8== 88= 83= 84= 8L= 8E= 8J= 8G= 8<= 8D= 3== 38= 33= 34= 3L= 3E= 3J= %RINT >CREATIN@ THE FILE> O%EN 2LI>">I8I>NU"BERS> FOR NM8 TO 8= %RINT 2LIN?N(N NEXT N CLOSE 2L %RINT ?>READIN@ THE FILE> O%EN 2LI>">IlI?NU"BERS> %RINT FOR BM8 TO 8= IN%UT 2LI"IN %RINT >THE STUARE OF >I"I> IS >IN NEXT B %RINT ?>EXTENDIN@ THE FILE> RESTORE 2L FOR NM88 TO 3= %RINT 2LIN?N(N NEXT N CLOSE 2L %RINT ?>READIN@ EXTENDED FILE> O%EN 2LI>">I8I>NU"BERS> %RINT FOR BMl TO 3= IN%UT 2LI"IN %RINT >THE STUARE OF >I"I> IS >IN NEXT B CLOSE 2L 1is:

T1e ro$ i!e is as .olllo7s' %@"< RST DEF5 RST DEF5 CALL RST DEF5 C% C% RST DEF5 LD LD C% C% BIT C% LD CALBAS NEXT CHAR CALBAS EX%TU8NU" STUEND CALBAS FNDUINT8 8=H NC*NRE%ORTK3 CALBAS CHANUO%EN IX*ACURCHLB A*AIXNLB >"> N9*NRE%ORT04 =*AIXNCHFLA@B N9*NRE%ORT0N A*AIXNCHDRISB IAd/a!ce CHUADD: IE/al$a e s ream !$mber: ICo!.irm e!d o. s a eme! : IFe c1 s ream !$mber: IReFec IUse s ream !$mber R 8E: 1is s ream:

IFe c1 c1a!!el s ar address: IFe c1 c1a!!el speci.ier: IError i. !o a! >m> c1a!!el: IError also 7i 1 ?7ri e? .iles: IT$r! o! dri/e mo or:

LOO%

RESBIT NXTS

SLOO%

CALL LD LD CALL CR CR BIT CR LD LD CR CALL CALL CR IN AND C% CALL C% LD LD LD LD SET CALL CALL LD C% CR LD OUT LD CALL %USH %O% LD ADD CALL LD OUT CALL LD LD XOR CALL C%

SELUDRISE HL*=FFH ASECTORB*HL @UHDUR C*NXTS 9*RESBIT 8*AIXNRECFL@B 9*NXTS A*AIXNHDNU"BB AIXNCHRECB*A NXTS RESUBU"A% DECUSECT N9*LOO% A*A=EFHB 8 9*RS0SH RDUSECTOR C*RS0SH3 L*AIXNRECLENB H*AIXNRECLENNlB AIXNCHB6TEB*L AIXNCHB6TEN8B*H =*AIXNCHFLA@B INUCHK @ETU"UHD=3 A*AIXNCHRECB AIXNHDNU"BB N9*SLOO% A*=EJH A=EFHB*A BC*=8J<H DELA6UBC IX HL DE*4GH HL*DE OUTU"UBUF A*=EEH A=EFHB*A RESUBU"A% A*AIXNRECNU"B AIXNCHRECB*A A SELUDRISE END8

ICo$! s

1ro$g1 3EE sec ors:

IFe c1 1eader a!d da a bloc,: IC$mp 7i 1 a!+ error: IC$mp 7i 1 ?.ree? sec ors: IC$mp i. 1is is !o 1e las record i! I 1e .ile: IO 1er7ise .e c1 sec or !$mber o CHREC: I"ar, ?.ree? sec or: ICo! i!$e $! il 1e 71ole ape 1as bee! Ie)ami!ed: IError 7i 1 7ri e0pro ec ed car ridge: IFe c1 1e EOF record: IError 7i 1 7ro!g c1ec,s$m: IUse RECLEN as c$rre! posi io!:

I"a,e 1is a ?7ri e? .ile: ISe ?.ree sec or? descrip or: IFe c1 a 1eader bloc,: ICo! i!$e i. 1is is !o 1e o!e: IS ar I5ai 7ri i!g: o crea e a .irs gap:

I"a,e HL poi!

o da a bloc, preamble:

IErase 1is sec or: I?E!d o. 7ri i!g? sig!al: I"ar, ?.ree? 1is sec or* ICop+ RECNU" i! o CHREC: S7i c1 o.. dri/e mo or: IFi!is1ed:

T1e s eps i!/ol/ed i! doi!g

1e RESTORE 2S comma!d are as .ollo7s' 1e c1a!!el is made a ?7ri e? 1e c1a!!el area:

8: A ?"icrodri/e map? is se 0$p* .or $se 71e! c1a!!el: 3: T1e las record o. 1e .ile is loaded i! o 4: T1a record is erased .rom 1e car ridge: L: T1e c1a!!el is mar,ed ?7ri e c1a!!el?:

As 7i 1 1e READ 2S*N comma!d* errors are repor ed i. 1e s ream ?S? is closed* or i. i is ope!ed 7i 1 o 1er 1a! >m> c1a!!el* or 7i 1 >m> c1a!!els ope!ed .or 7ri i!g:

E) e!di!g

1e RSK343 c1a!!el

T1is ro$ i!e crea es 1ree !e7 commma!ds .or ime $ser 71o 1as a! RS343 pri! er co!!ec ed o 1eir Spec r$m: Time .irs comma!d is L%RINT H !: I. !M8* a !e7 RS343 c1a!!el is ope!ed* so s$bse;$e! L%RINT a!d LLIST comma!ds 7ill $se 1is .or 1eir o$ p$ s: I. !M=* 1e >p> c1a!!el is de.a$l ed .or 1e L%RINT a!d LLIST Comma!ds A 1e 9X %ri! erB: T1e c1a!!el ope!ed 1as more .ea $res 1a! 1e !ormal > > c1a!!el: T1e TAB .$!c io! a!d 1e comma are s$ppor ed o! 1e pri! er* 1e ?leadi!g space b$g? prese! 7i 1 1e > > c1a!!el 1as bee! correc ed* 1e CR a!d LF codes are re0 de.i!able* a! a$ o CR .ea $re is s$ppor ed* a!d .i!all+ a re0de.i!able .orm0.eed code is se! a. er a cer ai! amo$! o. li!es pri! ed* so as o ad/a!ce o 1e !e) page be.ore 1e pri! i!g 1ead reac1es 1e e!d o. 1e s1ee : T1e seco!d comma!d is L%RINT Y )*+: T1e parame er ?)? 7ill de.i!e 1e 7id 1 o. 1e li!e: I.* .or e)ample* +o$ speci.+ a 7id 1 e;$al o 43* 1e s a!dard Spec r$m scree! .orma is $sed: A 7id 1 o. L=* <=* 843 col$m!s* or o 1er* is s$i able depe!di!g o! +o$r c1oice* a!d o! 1e ma)im$m 7id 1 1a +o$r pri! er allo7s: T1e parame er ?+? 7ill de.i!e 1e !$mber o. col$m!s $sed as s ep 71e! pri! i!g 1e ?comma? co! rol code: T1e de.a$l /al$e .or ?)? a!d ?+? are <= a!d 3=: T1e las comma!d is L%RINT P )*+: I! 1is case* ?)? 7ill de.i!e 1e !$mber o. li!es 1a 7ill be pri! ed be.ore 1e .orm .eed code A71ic1 ad/a!ces o 1e !e) pageB is se! o 1e pri! er Ade.a$l MJ=* s$i able .or JJ0li!e s1ee sB: T1e parame er ?+? is 1e .orm0.eed code 1a +o$r pri! er accep sI 1e s a!dard /al$e is 83: 6o$ ma+ s ore codes o 1er 1a! .orm0.eed* s$c1 as li!e.eed* e c:* o ob ai! di..ere! res$l s 71e! 1e ?)? li!es 1a/e bee! pri! ed: T1e CR code is se! as ?CR? .ollo7ed b+ ?LF? ALi!e FeedB: I. +o$r pri! er does !o !eed 1e LF code* +o$ ma+ e!d $p 7i 1 a do$ble spaci!g be 7ee! li!esI 1e problem ma+ be elimi!a ed 7i 1 %OKE JE=LE*=: T1e assembl+ code .or o$r .i!al e) e!sio! %@"D RST DEF5 C% CR C% CR C% CR C% RST DEF5 CALL RST DEF5 AND C% LD RST DEF5 DEC LD C% RST DEF5 CALL RST DEF5 LD CALBAS NEXT CHAR >Y> 9*OUT8 >P> 9*OUT3 >H> 9*OUT4 ERRUJ CALBAS NEXTU3NU" STUEND CALBAS FNDUINT8 A 9*OTRN@ AC""S%B*A CALBAS FNDUINT8 A A5IDTHB*A END8 CALBAS NEXTU3NU" STUEND CALBAS FNDUINT8 AFFCB*A o BASIC is lis ed belo7:

IAd/a!ce CHUADD: IC$mp 7i 1 L%RINT Y)*+ IC$mp 7i 1 L%RINT P)*+ IF$mp 7i 1 L%RINT H! IError i. !o!e o. 1ese: IE/al$a e ?)*+?: ICo!.irm e!d o. s a eme! : IFe c1 ?+?: IReFec spaci!gM=:

I OUT8

IS ore 1is /al$e: IFe c1 ?)?: IRa!ge o. ?)? is .rom = o!7ards: IS ore 1e /al$e: IFi!is1ed: IE/al$a e ?)*+? ICo!.irm e!d o. s a eme! : IFe c1 ?+? IS ore i :

I OUT3

RST DEF5 LD XOR LD C% I OUT4 RST DEF5 RST DEF5 CALL RST DEF5 C% CR LD RES CALL C% LD RST DEF5 LD AND SBC C% CALL %USH LD ADD LD LD INC LD LD LD %O% C% C% C% RES C% CR CR SET %USH LD LD %O% CALL LD LD LD C% CR INC LD RET

CALBAS FNDU NT8 AL%A@EB*A A ACLINEB*A END8 CALBAS NEXTUCHAR CALBAS EX%TU8NU" STUEND CALBAS FNDUINT8 8 9*NE5OUT A*4 8*AI6NFLA@S4B CLOSE END8 A*4 CALBAS STRUDATA8 HL*88H A HL*BC C*NRE%ORT0C O%URSUCH DE HL*E HL*DE DE*NRSOUT AHLB*E HL AHLB*D A*4 AECD<HB*A DE O%USTREA" =AEH NC* TCHAN0OUTNL =*AI6NFLA@SB S%ACE C*CTRL N9*NOS%C =*AI6NFLA@SB AF A*8 ACLRCRB*A AF TCHANUOUT A*A5IDTHB B*A A*A%OSNB B NC*NLIN A A%OSNB*A

IFe c1 ?)?: IS ore i : IClear li!e co$! er: IFi!is1ed: IAd/a!ce CHUADD: IE/al$a e ?!? ICo!.irm e!d o. s a eme! : IFe c1 ?!? IOpe! !e7 c1a!!el i. !M8: IO 1er7ise s ream 4 re/er s Ic1a!!el: IFi!is1ed:

o >p>

I NE5OUT

IFe c1 c$rre!

s ream da a:

IError i. s ream is alread+ ope!ed: IOpe! a > > c1a!!el: ISa/e s ream da a: I"a,e HL poi! o ?address o. o$ p$ Iro$ i!e?: IC1a!ge 1is address o NRSOUT belo7:

IUse s ream 4: IRes ore s ream da a: IA ac1 c1a!!el o a s ream: IUse s1ado7 RO" ro$ i!e 7i 1 o,e! codes:

I NRSOUT

NOS%C

IClear ?leadi!g space? .lag: IC$mp .or7ard 7i 1 co! rol codes lo7er I 1a! 3=H: IC$mp i. !o a space: IO 1er7ise se ?leadi!g space? .lag: ISa/e 1e code emporaril+: IAccep !e) CR code: IRes ore 1e code: IUse > > c1a!!el o pri! i *

IC$mp i. %OSNR5IDTH: IO 1er7ise i!creme! %OSN:

I NLIN

CALL ENDLI

IAd/a!ce

o !e)

li!e:

XOR LD RET I ENDLI LD LD DEC LD LD AND CALL LD AND CALL LD LD LD INC C% CR LD AND CALL XOR LD RET C% CR LD AND LD LD RET CR C% CR LD LD LD LD INC INC LD C% CR SUB CR CR CR %USH LD CALL %O% DEC CR RET C% RET LD

A ACLRCRB*A A*8 ACLRCRB*A A A%OSNB*A A*ACRCDB A N9*BCHANUOUT A*ALFEEDB A N9*BCHANUOUT A*AL%A@EB B*A A*ACLINEB A B N9*NOFEED A*AFFCB A N9*BCHANUOUT A ACLINEB*A CR N9*NOCR A*ACLRCRB A A*8 ACLRCRB*A 9 ENDLI %RCO""A N9*NOCO""A HL*A%OSNB A*AC""S%B B*A C*= C L A*L H NC*NLIN B 9*S%LOO% NC*CHK%OS ONES%C BC A*S%ACE NRSOUT BC C N9*S%LOO% TAB N9 DE*%AR8

IDisable !e)

CR code:

IAccep

!e)

CR code:

IClear %OSN: IFe c1 CR code: ISe!d i $!less Xero: IFe c1 LF code: ISe!d i $!less Xero:

IC$mp i. !o 1e e!d o. IFe c1 .orm .eed code: ISe!d i $!less Xero:

1e page:

NOFEED I CTRL

IS ore !e7 li!e !$mber: IC$mp i. 1e code is !o CR:

IC1ec, c$rre! s a e o. CR .lag: IRese .lag o 8 .or la er: IDo !o do a CR i. CLRCRM=: IO 1er7ise loop bac,: IC$mp i. !o ILM %OSN a comma:

I NOCR

HM 5IDTH

ONES%C

II!creme!

co$! ers:

CHK%OS

IC$mp i. %OSNRM5IDTH: IC$mp i. reac1ed 1e correc Ico! i!$e i. !o :

place* or

I S%LOO%

I%ri! ?C? spaces b+ calli!g rec$rsi/el+ I 1is ro$ i!e:

I NOCO""A

IRe $r! i. !o IAl er o$ p$

1e TAB code: address:

I ALTO%

LD LD ADD LD INC LD RET LD LD CR LD CALL LD LD LD C% CR LD RST LD SUB RET CR NE@ LD CR %USH CALL %O% LD CR DEFB DEFB DEFB DEFB DEFB DEFB DEFB DEFB DEFB END

HL*ACURCHLB B*E HL*BC AHLB*E HL AHLB*D ATSDATAN8B*A DE*%AR3 ALTO% DE*NRSOUT ALTO% A*ATSDATAN8B B*A A*A5IDTHB B NC*@OOD AI6NERRUNRB*=AH RO"ERR A*A%OSNB B 9 NC*@RT C*A S%LOO% BC ENDLI BC C*B S%LOO% = <= 3= 83 J= 8 CR =AH =

IS ore !e7 o$ p$

address:

I %AR8 I %AR3

IS ore ?!?: IO$ p$ address .or !e) IRes ore i!i ial o$ p$ IFe c1 col$m! ?!?:

b+ e: address:

OTRN@ @OOD

IError i. ?!? is grea er

1a! 5IDTH:

IRe $r! i. alread+ i! place: IC$mp i. %OSNR?!?: IAM!$mber o. spaces re;$ired: IC$mp bac,: IFirs ad/a!ce o !e) li!e: 1e spaces:

@RT

IC$mp bac,

o i!ser

I %OSN 5IDTH C""S% FFC L%A@E CLRCR CRCD LFEED CLINE I

T1e ETU s a eme! s gi/e! 1ere de.i!e all program' I IS1ado7 RO" addresses I "AINURO" ETU ==H CALBAS ETU 8=H SHUERR ETU 3=H RO"ERR ETU =<H NE5SAR ETU 4=H ERRUJ ETU =8F=H NRE%ORT0C ETU =E3FH STUEND ETU =EBGH END8 ETU =EC8H EX%TUNU" ETU =J8EH NRE%ORT03 ETU =JJ4H CHECKU"U3 ETU =JJDH NRE%ORT04 ETU =J3DH UN%A@E ETU =G==H NRE%ORT0N ETU =D=3H O%URSUCH ETU =B84H O%USTREA" ETU =BLAH TCHANU OUT ETU =C4CH BCHANUOUT ETU =CEAH SETUTU"CH ETU =FE<H DELU"UBUF ETU 8=CLH R5F0ERR ETU 8843H @ETURUL% ETU 88<LH RS0SH3 ETU 88A4H @UHDURC ETU 88AEH @ETU"UHD3 ETU 83CLH RESUBU"A% ETU 83FEH DECUSECT ETU 8483H CHKSUHDUR ETU 84L8H CLOSE ETU 8G8<H SELUDRISE ETU 8GFGH OUTU"UBUF ETU 8<G<H @TU"UBLK ETU 8<ADH DELA6UBC ETU 8<FAH RDUSECTOR ETU 8ALBH RS0SH ETU 8ACEH FREESECT ETU 8D4<H %RCHAR ETU 8DJJH INUCHK ETU 8E4EH DIS%UHEX ETU 8E<GH DIS%HEX3 ETU IEDEH DIS%UCH ETU 8EADH I I"ai! RO" addresses I ERRORU8 ETU =<H @ETUCHAR ETU 8<H NEXTUCHAR ETU 3=H BEE%ER ETU =4BEH EDULOO% ETU =F4<H EDUEDIT ETU =FADH EDUERROR ETU 8=GFH CHANUO%EN ETU 8J=8H STRUDATA8 ETU 8G3GH NEXTU3NU" ETU 8CGDH EX%TU8NU" ETU 8C<3H EX%TUEX% ETU 8C<CH

1e labels re.erred

o i!

1e precedi!g

FNDUINT8 ETU 8EDLH FINDUINT3 ETU 8EDDH STKUFETCH ETU 3BF8H STACKUA ETU 3D3<H %RINTUF% ETU 3DE4H I IS+s em /ariables I TSDATA ETU EC=EH ERRUS% ETU EC4DH EU%%C ETU ECLDH CHURCHL ETU ECE8H SCRUCT ETU EC<CH SECTOR ETU ECBGH SECTOR ETU ECCDH HDU88 ETU ECEDH I IO..se s I ERRUNR ETU ==H FLA@S ETU =8H CHB6TE ETU =BH %%CUHI ETU =CH CHREC ETU =DH CHFLA@ ETU 8<H CHDRIS ETU 8DH HDNU"B ETU 3DH RECFL@ ETU L4H RECNU" ETU LLH RECLEN ETU LEH FLA@S4 ETU GCH I IHoo, codes I HOOK48 ETU 48H HOOK43 ETU 43H I IKe+7ords I BEE% ETU =DGH CAT ETU =CFH CODE ETU =AFH DATA ETU =ELH LINE ETU =CAH L%RINT ETU =E=H %OKE ETU =FLH %RINT ETU =FEH READ ETU =E4H RESTORE ETU =EEH I IASCII I %RCO""A ETU =JH CR ETU =DH TAB ETU 8GH S%ACE ETU 3<H CO""A ETU 3CH

E) e!di!g Spec r$m BASIC T1e i!.orma io! gi/e! i! 1is sec io!* oge 1er 7i 1 1e e)amples gi/e! earlier s1o$ld be s$..icie! o allo7 e)perie!ced mac1i!e code programmers o 7ri e 1eir o7! !e7 BASIC comma!ds* a!d i!corpora e 1em i! o 1e Spec r$m?s BASIC: No!0programmers ma+ s ill be i! eres ed i! 1e de ails o. 1e Spec r$m?s BASIC i! erpre er* a!d o. 1e i!ge!io$s mec1a!ism $sed o e) e!d i : %lease !o e 1a 1is i!.orma io! is primaril+ desig!ed o gi/e a ge!eral e)pla!a io! o. 1o7 7e 1a/e impleme! ed o$r e) e!ded BASIC comma!ds: I is !o i! e!ded o be a s ep b+ s ep g$ide o 7ri i!g !e7 BASIC comma!ds: A .$ller e)pla!a io! o. 1is ma erial is gi/e! i! T1e Spec r$m "icrodri/e Boo, b+ Dr: Ia! Loga!* also p$blis1ed b+ "elbo$r!e Ho$se: 5e s1o$ld .irs co!sider 1e 7or,i!gs o. 1e Spec r$ms s+! a) c1ec,i!g ro$ i!e: 51e! 1e s+! a) c1ec,er de ec s a! error i! a s a eme! * ei 1er as i is e! ered* or a r$! ime* a F$mp is made o 1e error 1a!dli!g ro$ i!e: T1is is do!e b+ a RST < i!s r$c io!* .ollo7ed b+ a b+ e 71ic1 de.i!es 1e error +pe: No e 1e similari ies be 7ee! 1is a!d 1e 1oo, codes disc$ssed earlier: As 7i 1 1e !ormal 1oo, codes* 1e RST < ca$ses a F$mp o 1e S1ado7 RO" 71ere 1ere is a seco!d e)ami!a io! o. 1e c$rre! BASIC s a eme! * o see i. i reall+ is a! error: I is 1is ?seco!d c1a!ce? 1a ma,es i possible .or 1e !e7 BASIC comma!ds pro/ided b+ 1e I! er.ace 8 o e)is : T1ese !e7 comma!ds are percei/ed as errors b+ 1e Spec r$ms RO"* so 1e error ro$ i!e is called: T1is passes co! rol o 1e I! er.ace 8* 71ere 1e S1ado7 RO" does i s o7! s+! a) c1ec,i!g* recog!iXes 1e !e7 comma!ds* a!d per.orms 1e appropria e ac io! .or eac1 !e7 comma!d* be.ore passi!g co! rol bac, o 1e mai! Spec r$m RO": Code is pro/ided i! 1e S1ado7 RO" .or c1ec,i!g comma!ds s ar i!g 7i 1 1e .ollo7i!g ,e+7ords' CAT* FOR"AT* "OSE* ERASE* O%EN* SASE* LOAD* SERIF6* "ER@E* CLS* a!d CLEAR: "ore i! eres i!g o $s* 1o7e/er* is 71a 1appe!s 71e! a s a eme! ?.ails 1e s+! a)? A 1a is* is .o$!d o be s+! ac icall+ i!correc B o. bo 1 1e mai! RO" a!d 1e S1ado7 RO": 51e! 1is 1appe!s* 1e S1ado7 RO" decides 1a i reall+ 1as .o$!d a! error* a!d F$mps o 1e address 71ic1 is s ored i! a s+s em /ariable called SECTOR: T1is address is !ormall+ 1a o. a mai! RO" error 1a!dli!g ro$ i!e* 71ic1 7ill pri! o$ a! error message a!d cease e)ec$ io!: Ho7e/er* si!ce 1e /ariable SECTOR is i! RA"* 7e ca! c1a!ge 1e /al$e i 1olds o 1a o. o$r o7! s+! a) c1ec,i!g ro$ i!e* 71ic1 7ill c1ec, 1e s a eme! +e agai!* o see i. i is o!e o. 1e !e7 comma!ds 1a 7e 1a/e de.i!ed: I. 1e s a eme! is o!e o. o$r !e7 s a eme! s* o$r s+! a) c1ec,er 7ill call a mac1i!e la!g$age s$bro$ i!e 71ic1 7ill per.orm 1e appropria e ac io!s be.ore re $r!i!g co! rol o 1e mai! RO"* o 1er7ise i 7ill call a ro$ i!e o pri! a! error message: So* 1e co! rol ro$ i!e 1a m$s be added o 1a!dle a !e7 s a eme! m$s 1a/e 7o par s' Firs l+* 1ere m$s be a s+! a) ro$ i!e 71ic1 7ill ide! i.+ 1e !e7 comma!d* a!+ parame ers 1a go 7i 1 i * a!d 1e e!d o. 1e s a eme! i is i!: Seco!dl+* 1ere m$s be a ro$ i!e 71ic1 7ill do 1e ac $al 7or, o. 1e comma!d: Fi!all+* o. co$rse* 1e s+s em /ariable SECTOR m$s 1a/e bee! redirec ed o poi! o 1e s+! a) ro$ i!e* so 1a ?errors? de ec ed b+ 1e S1ado7 RO" 7ill be redirec ed o +o$r ro$ i!e: T1e s+! a) o. +o$r !e7 comma!d ca! be a!+ 1i!g 71ic1 7ill be reFec ed b+ 1e s+! a) c1ec,ers i! bo 1 1e mai! RO" a!d 1e S1ado7 RO": No e 1o7e/er* 1a +o$r comma!d m$s !o s ar 7i 1 a!+ o. 1e ele/e! ,e+7ords 71ic1 are recog!ised b+ 1e S1ado7 RO" Asee abo/eB: T1e e)ec$ io! o. 1e !e7 comma!ds 1e!* is a .airl+ comple) proced$re* comprised o. 1e .ollo7i!g s eps' AiB Comma!d is reFec ed as bei!g s+! ac icall+ i!correc b+ 1e s+! a) c1ec,i!g ro$ i!e i! mai! RO": Accordi!gl+* a! error ro$ i!e is called* $si!g a RST < comma!d: AiiB T1is ca$ses co! rol o be ra!s.ered o 1e s+! a) c1ec,i!g ro$ i!e i! 1e S1ado7 RO": AiiiB T1e S1ado7 RO" s+! a) c1ec,er reFec s +o$r s a eme! * a!d calls 1e ro$ i!e 71ose address is s ored i! 1e /ariable SECTOR: T1is 7o$ld !ormall+ be 1e mai! RO"s >repor a! error> ro$ i!e* b$ si!ce +o$ 1a/e pre/io$sl+ c1a!ged

1e co! e! s o. SECTOR o poi! o +o$r o7! s+! a) c1ec,i!g ro$ i!e* i 7ill be +o$r ro$ i!e 1a is called: Ai/B 6o$r s+! a) ro$ i!e c1ec,s o see 1a +o$ 1a/e gi/e! 71a i regards as a correc comma!d: O!ce i decides 1a +o$ 1a/e* i calls a ro$ i!e 71ic1 +o$ 1a/e 7ri e! o do 71a e/er as, is re;$ired o. 1e !e7 BASIC comma!d: A/B 6o$r ro$ i!e re $r!s co! rol o 1e BASIC program 71ic1 is c$rre! l+ r$!!i!g: Al 1o$g1 1e as, o. e) e!di!g 1e Spec r$m?s BASIC is ;$i e comple) a close s $d+ o. 1e e)amples gi/e! i! 1is boo, s1o$ld be ;$i e re7ardi!g:

THE SHADO5 RO" DISASSE"BL6 T1e res ar ro$ i!es 1e address 1eld 1e

THE ?RETURN TO "AIN RO"? RESTART T1is res ar is $sed o re $r! o 1e >mai!> RO"* s ar i!g .rom i! 1e s ac, be.ore calli!g 1is ro$ i!e: ==== ===8 ===E "AINKRO" %O% LD C% HL AFLA@S4B*N== =G==*UN%A@E

Remo/e re $r! address .rom mac1i!e s ac,: Clear FLA@S4: Re $r! o ?mai!? RO":

THE ?START? T1is is 1e mai! e! r+ poi! o 1e ?s1ado7? RO"I i is paged i! 71e! 1e %rogram Co$! er reac1es 1e address N===< 1a is* 1e address o. 1e mai! RO" ?ERROR? ro$ i!e: AT1e o 1er ime i! 71ic1 1e >s1ado7> RO" is paged i! is 71e! 1e %rogram Co$! er reac1es 1e address N8G=< i:e:* 1e middle o. 1e CLOSE comma!d ro$ i!e* 71ic1 is !o able o deal 7i 1 I! er.ace?s c1a!!els:B ===< ===B ===C ===D STKSHADO5 LD %O% %USH C% HL*ACHKADDB HL HL ==DA*STARTK3 T1e .irs i!s r$c io! is commo! o bo 1 RO"s: @e 1e re $r! address A$s$all+ poi! s o 1e error codeB C$mp .or7ard:

THE ?CALL A "AIN RO" ROUTINE? RESTART T1is ro$ i!e allo7s .or a s$bro$ i!e i! 1e ?mai!? RO" o be called .rom 1e ?s1ado7? RO"* a!d ca! be called b+ $si!g a RST 8= i!s r$c io!* .ollo7ed b+ 1e address o. 1e ?mai!? RO" s$bro$ i!e: ==8= ==84 ==8L ==8E ==8G CALBAS LD %O% %USH CR DEFB AHKLB*HL HL DE ==<8*CALBASK3 NFF Sa/e HL i! o SBRT: @e 1e re $r! address Apoi! s address .ollo7i!g 1e RST 8=B: Sa/e DE emporaril+: C$mp .or7ard: U!$sed loca io!: o 1e

THE ?TEST IF S6NTAX IS BEIN@ CHECKED? RESTART T1is correspo!ds o 1e ?mai!? RO" ?S6NTAXK9? s$bro$ i!e: A es o. bi G o. FLA@S 7HL gi/e 1e 9ero .lag se d$ri!g s+! a) c1ec,i!g* a!d rese d$ri!g e)ec$ io!: ==8< ==8C ==8D CHKS6NTAX BIT G*AFLA@SB RET DEFB NFF*NFF*NFF Tes bi G o. FLA@S: Fi!is1ed: U!$sed loca io!s:

THE ?SHADO5 ERROR? RESTART C$mps o 1e re;$ired ro$ i!e o deal 7i 1 ?!e7? repor messages: T1is ro$ i!e ca! be called b+ $si!g a RST 3= i!s r$c io! .ollo7ed b+ 1e error code Ai! 1e ra!ge NFF:::N8JB: ==3= ==38 ==34 ==3E SHKERR RST CR CR DEFB 8<*CHKS6NTAX 9*==J<*STKERROR ==4A*TESTKS% NFF*NFF*NFF C$mp o STKERROR i. c1ec,i!g s+! a)* or o TESTKS% d$ri!g r$! ime: U!$sed loca io!s: co! ai! 1e error code: o be co!sidered

THE ?"AIN RO" ERROR? RESTART Be.ore calli!g 1is ro$ i!e* AERRKNRB m$s ==3< ==3C RO"ERR RES CR 4*ATSFLA@B ==L=*R"ERRK3

Sig!al ? 1e mode is $!c1a!ged? F$mp .or7ard:

==3E

DEFB

NFF*NFF

U!$sed loca io!s:

THE ?CREATE NE5 S6STE" SARIABLES? RESTART T1e ro$ i!e is e! ered a =8FG: ==4= ==44 ==4J NE5SARS C% DEFB DEFB =8FG*CRTKSARS NFF*NFF*NFF NFF*NFF C$mp .or7ard immedia el+: U!$sed loca io!s:

THE ?"ASKABLE INTERRU%T? ROUTINE 51ile 1e ?s1ado7? RO" is pagedKi!* ==4< ==4D INTKSERS EI RET o pri!

1e ,e+board is !o

sca!!ed:

E!able i! err$p s: Re $r! immedia el+: 1e re;$ired repor message:

THE ?TESTKS%? ROUTINE C1ec, i. i is !ecessar+ ==4A ==4D TESTKS% CALL C%

==GG*CHECKKS% =3E<*RE%K"S@

Use ?mai!? RO" error 1a!dler i. re;$ired: %ri! 1e repor message: 1e

THE ?"AIN RO" ERROR? ROUT NE T1e pressi!g o. BREAK d$ri!g 1e loadi!g o. ?a$ or$!? programs 7HL rese s+s emI o 1er7ise 1e error ro$ i!e co! i!$es: ==L= ==L8 ==L4 ==LJ ==LD ==LD ==LF ==E4 ==EE ==E< ==EA ==EC ==EF ==J= ==J8 ==JL R"ERRK3 RST CR CALL CALL BIT CR BIT CR LD C% CR LD %USH RST DEFB DEFB 8<*CHKS6NTAX 9*==J<*STKERROR ==GG*CHECKKS% 8GBD*RCLKTKCH 8*AFLA@S4B 9*==J<*STKERROR L*AFLA@S4B 9*==J<*STKERROR A*AERRKNRB N8L N9*==J<*STKERROR HL*N==== HL =*"AINKRO" NFF*NFF*NFF NFF*NFF C$mp .or7ard i. c1ec,i!g s+! a): Use ?mai!? RO" error 1a!dler i. re;$ired: Reclaim all emporar+ c1a!!els Z s7i c1 o.. dri/e mo ors: C$mp .or7ard i. !o d$ri!g 1e loadi!g o. a! ?a$ or$!? program:

Fe c1 1e error code: C1ec, i. a emp i!g o BREAK i! o loadi!g o. a! a$ or$! program: C$mp i. !o : O 1er7ise rese 1e s+s em b+ F$mpi!g o 1e address N==== i! 1e ?mai!? RO": U!$sed loca io!s:

1e

THE ?NONK"ASKABLE INTERRU%T? ROUTINE As 7i 1 mas,able i! err$p s* 1ere are !o ser/ice ro$ i!es: ==JJ N"INTKSRS RETN Re $r! immedia el+: 1e same

THE ?STKERROR? ROUTINE T1is ro$ i!e m$s be e! ered 7i 1 1e error code i! AERRKNRB* a!d 1as e..ec as 1e ?mai!? RO" ?ERROR? res ar : ==J< ==JB ==JE ==G3 ==GE ==GJ STERROR LD LD LD LD %USH RST HL*ACHADDB AXK%TRB*HL S%*AERRKS%B HL*N8JCE HL =*"AINKRO"

T1e address o. 1e c1arac er reac1ed b+ 1e i! erpre er is copied i! o 1e error poi! er: Clear mac1i!e s ac,: Re $r! /ia ?mai!? RO" ?SETKSTK? ro$ i!e o 1e error 1a!dler ro$ i!e:

THE ?CHECKKS%? ROUTINE Use 1e ?mai!? RO" error 1a!dler o!l+ i. bi ==GG ==GB ==GC ==<= CHECKKS% BIT RET LD RST 3*AFLA@S4B 9 S%*AERRKS%B =*"AINKRO" o call

3 o. FLA@S4 is se :

Re $r!: ANormall+ bi 3 is al7a+s rese B "a,e error 1a!dler ro$ i!e 1e re $r! addrcs= Z e)i : 1e re;$ired ro$ i!e i! 1e ?mai!? RO":

THE ?CALBASK3? ROUTINE T1is ro$ i!e $ses 1e SBRT area ==<8 ==<3 ==<4 ==<L ==<< ==<D ==<A ==<B ==<E ==<F ==D3 ==D4 ==DJ ==DG CALBASK3 LD INC LD LD INC EX EX LD %US1 LD %USH LD %USH C% E*AHLB HL D*AHLB AECBDB*DE HL AS%B*HL

DE*HL HL*N==== HL HL*N===< HL HL*NECBD HL =G==*UN%A@E

Fe c1 1e address o. 1e s$bro$ i!e o be called I! o 1e DE regis er pair: Use 1e address 7i 1 1e CALL i! SBRT area: %oi! s o 1e re $r! address: E)c1a!ge 7i 1 i!i ial /al$e o. DE regis er pair Asee ==8LB: Res ore i!i ial /al$e o. DE: Sig!al >a ?mai!? RO" ro$ i!e 1as bee! called>: Re $r! address o 1e s1ado7 RO" is N===<: Call i!direc l+ 1e SBRT s$bro$ i!e a. er 1a/i!g pagedKo$ 1e ?s1ado7? RO":

T1e co! rol ro$ i!e T1is ro$ i!e is called .rom STKSHADO5 a I 1as 4 mai! as,s' ===< 71e! 1e s1ado7 RO" is pagedKi!: o a ?mai!? RO" 1e re;$ired ?i!p$ ?

K I. 1e pagi!g o. 1e s1ado7 RO" is 1e re $r! a. er a call s$bro$ i!e* 1e! i re $r!s o 1e calli!g ro$ i!e: K I. a! I! er.ace?s c1a!!el 1as bee! re;$es ed* i or ?o$ p$ ? ro$ i!e: F$mps o

K I. a! error 1as occ$rred i! 1e ?mai!? RO"* a c1ec, is made o see i. 1e error code is a ?1oo, code? Aa!d calls 1e re;$ired ro$ i!e i. i isB: I. i is !o a ?1oo, code?* 1e! i c1ec,s o de ermi!e 71e 1er 1e error is >No!se!se i! BASIC>* >I!/alid .ile!ame>* or >I!/alid s ream>: I. i is a!+ o. 1ese* probabl+ a ?!e7? comma!d 1as bee! $sed: I. so* 1e ro$ i!e correspo!di!g o 1e comma!d is called* o 1er7ise 1e error is prod$ced b+ F$mpi!g o 1e address =8F= A1eld i! 1e SECTOR s+s em /ariable K 1$s al eri!g 1is address o poi! a ro$ i!e i! RA" 7HL gi/e 1e possLDili + o. addi!g more ?!e7? comma!dsB: I! all o 1er cases* 1e mai! RO" error 1a!dler is $sed: ==DA ==DB ==DC ==DD ==DF ==A= ==A8 ==AL STARTK3 %USH LD OR CR %O% %O% LD RET AF A*H L N9*==AE*STARTK4 AF HL HL*AHKLB Sa/e A regis er: C1ec, i. 1e re $r! address is Xero: C$mp .or7ard i. i is !o : O 1er7ise a ?mai!? RO" ro$ i!e 1as bee! calledI clear s ac,: Res ore HL a!d re $r! o 1e calli!g ro$ i!e:

No7 see i. a! I! er.ace?s c1a!!el 1as bee! re;$es ed: ==AE STARTK4 %USH DE Sa/e DE emporaril+:

==AJ

LD

DE*N8EFE

==AD ==AB ==AC ==AE ==AF ==B3 ==B4 ==BJ ==BG ==B< ==BD ==BA ==BB A 1is poi! * RO": ==BC ==BD ==BF ==C8 ==C4 ==CE ==CJ ==CG ==C< ==CD ==CB ==CE ==D= ==D3 ==DJ ==D< ==DC ==DE ==E8 ==E3 ==EL STARTKL

SBC %O% CR %O% LD %USH LD ADD LD INC LD EX C%

HL*DE DE N9*==BC*STARTKL AF HL*N=G== HL HL*N===L HL*DE E*AHLB HL D*AHLB DE*HL AHLB

I. a c1a!!el 1as bee! re;$es ed* 1is is 1e re $r! address s ored b+ 1e CALL 8J3C i!side 1e ?mai!? RO" ?CALLKSUB? s$bro$ i!e: C$mp .or7ard i. !o c1a!!els 1a/e bee! re;$es ed: Res ore A regis er Ac1arac er o be ra!smi ed i. d$ri!g ?o$ p$ ?B: "a,e re $r! address 1e UN%A@E ro$ i!e: DE !o7 1olds Aaddress o. ro$ i!e poi! er K LB: HL 1olds 1e address o. 1e ro$ i!e poi! er: Fe c1 1e lo7 b+ e: Fe c1 1e 1ig1 b+ e: "o/e 1e address o HL: C$mp o 1e appropria e ?i!p$ ? or ?o$ p$ ? ro$ i!e: 1e ?mai!?

1e s1ado7 RO" 1as s$rel+ bee! pagedKi! b+ a! error i! RST LD OUT LD OUT %O% %O% %USH RST DEF5 LD C% CR BIT CR BIT CR LD LD C% C% 4=*NE5SARS A*N=8 ANFGB*A A*NEE ANEFB*A AF HL AF 8=*CALBAS N==GB AERRKNRB*A NFF N9*==ED*TESTCODE 8*AFLA@S4B 9*==EG*NRE%ORTK= G*A%%CK1iB 9*==EG*NRE%ORTK= HL*AEKLINEB A*AHLB NFG 9*=ADE*LOADKRUN Crea e i! er.ace /ariables i. !o!Ke)is e! * 1e! se!d some sig!als o 1e I! er.ace 8:

Remo/e A emporaril+: Re $r! address Apoi! s o 1e error code a. er a RST <B: Sa/e A agai!: T1is calls a si!gle ?LD A*AHLB? i!s r$c io!* so 1e error code is .e c1ed .rom 1e mai! RO" code: S ore 1e error code: C1ec, i. 1e error is ?OK?: C$mp i. i is !o : T1is is se 71e! $si!g 1e ?s1ado7? RO" .or 1e .irs ime Ai:e: a. er a NE5 comma!dB: @i/e a! error i. !o 1e .irs ime: @i/e a! error also i. 1e li!e is !o i! 1e edi i!g area: O 1er7ise .e c1 1e comma!d code .rom 1e edi i!g area: C1ec, i. 1e comma!d is ?RUN?: Load 1e ?r$!? program .rom "icrodri/e i. so:

?%rogram .i!is1ed? ==EG ==E< NRE%ORTK= RST DEFB 3=*SHKERR NFF 1e as, Call 1e error 1a!dli!g ro$ i!e: o be e)ec$ ed: Red$ce 1e ra!ge: C$mp i. i ?s a 1oo, code* or a! i!/alid code Agrea er 1a! =K43B: C$mp i. 1e error is

T1e error code i! A de ermi!es ==ED ==EB ==EE TESTKCODE SUB C% C%

N8B NC*8D<8*HOOKKCODE NF=

==F= ==F3 ==FL ==FJ ==F< ==FB ==FE =8=8 =8=3 =8=J =8=D =8=D =88= =88L =88E =88G

CR C% CR C% C% CO%6CHADD LD LD %O% BIT C% BIT C% SET RST CR LD

9*==FB*CO%6CHADD NF4 9*==FB*C=%6CHADD NFC N9*==3<*RO"ERR HL*ACHKADDB ACHADDKB*HL AF E*AFLA@XB N9*==3<*RO"ERR =*AFLA@S4B N9*==3<*RO"ERR =*AFLA@S4B 8<*CHKS6NTAX N9*=88B*RUNTI"E A%%CK1iB*NFF o .i!d 1e li!e

?No!se!se i! BASIC?: Also i. ?I!/alid .ile!ame?: Or ?I!/alid s ream?: I. !o!e o. 1ese* $se ?mai!? RO" error 1a!dler o sig!al 1e error: T1e c1arac er poi! er is sa/ed: Clear 1e s ac,: Use ?mai!? RO" error 1a!dler also i. i! IN%UT mode* or d$ri!g e)ec$ io! o. a ?!e7? comma!d: Sig!al >e)ec$ io! o. a ?!e7? comma!d> C$mp i. d$ri!g r$! ime: Sig!al >s+! a) 1a 1as prod$ced ime>: 1e error:

No7 a loop is e! ered =88B =88E =83= =83L =83J =83G =83< =83A =83B =83C =83E =84= =844 =84J =84G RUNTI"E LD LD BIT CR %USH RST DEF5 %O% RST DEF5 CR %RO@KLINE LD SCKLKLOO% LD C% CR

B*ASUB%%CB C*N== G*A%%CK1iB 9*=84=*%RO@KLINE BC 8=*CALBAS N8DFB BC l=*CALBAS N==8< =8JF*SKSTAT HL*A%RO@B A*A%%CK1iB AHLB NC*=84B*TESTKLO5

S a eme! co$! er: Co$! er o. ? > ? c1arac ers: C$mp .or7ard i. 1e li!e is i! 1e program area: Sa/e co$! ers: Call mai! RO" ?EKLINEKNO? Ai .e c1es 1e !$mber o. 1e li!e i! 1e edi i!g area* b$ is ac $all+ $sed o $pda e CHKADD o 1e 8s c1ar: i! 1e li!eB: Res ore co$! ers: Call @ETKCHAR i! 1e mai! RO" o $pda e HL o 1e 8s c1arac er i! 1e li!e: C$mp .or7ard: Fe c1 s ar o. program area: Compare 1e !$mber o. 1e i!e o be searc1ed 7i 1 1a o. 1e ?c$rre! ? li!e: C$mp i. 1e ?c$rre! ? li!e !o: is less 1a! or e;$al o 1a o. 1e li!e o be searc1ed .or:

No!se!se i! BASIC: =84D =84A =84B =84C =84E =8L8 =8L3 =8LL =8LE =8LJ =8LG =8L< =8LD =8LB =8LC =8LE LINEKLEN NRE%ORTK8 RST DEFB TESTKLO5 INC CR LD C% CR INC LD INC LD INC CR ADD CR LD 3=*SHKERR N== HL N9*=8LL*LINEKLEN A*A%%CKloB AHLB C*=84D*NRE%ORTK8 HL E*AHLB HL D*AHLB HL 9*=lJF*SKSTAT HL*DE =l44*SCKLKLOO% DE*N===J Call 1e error 1a!dli!g ro$ i!e: %oi! s o lo7 b+ e o. li!e !o: C$mp i. 1e ?c$rre! ? li!e is !o e)pec ed o!e: Compare also 1e 1ig1 b+ e o. 1e li!e !$mbers: @i/e a! error i. 1e li!e dDEs !o e)is : I!creme! 1e poi! er: Fe c1 lo7 b+ e o. 1e le!g 1: Fe c1 1ig1 b+ e: %oi! s o s ar o. 1e li!e: C$mp i. 1e li!e is .o$!d* o 1er7ise poi! s o !e) li!e: Co! i!$e $! il .o$!d: Le!g 1 o. a .loa i!g poi! !$mber: 1e

SKI%KNUN

=8E8

ADD

HL*DE

S,ip

1e .loa i!g poi! 1e s ar o.

represe! a : 1e s a eme!

T1is loop ad/a!ces 1e poi! er ?H% $! il i 1a 1as prod$ced 1e error: =8E3 =8E4 =8EE =8EG =8E< =8EA =8EC =8ED =8EF =8J8 =8J4 =8JE =8JG =8JD =8JB =8JD =8JF =8G8 =8G3 =8GE =8GJ =8G< =8GC EACHKST LD C% CR INC C% CR DEC C% CR C% CR BIT CR C% CR CR DCN9 DEC LD RST CR BIT C% A*AHLB N=E 9*=lLE*SKI%KNU" HL N33 N9*=8ED*CHKEND C N4A 9*=8JE*CHKESEN NCB N9*=lJD*CHKENDKL =*C 9*=8JF*SKSTAT N<= N9*=8E3*EACHKST =84D*NRE%ORTK8 =8E3*EACHKST HL ACHKADDB*HL 8<*CHKS6NTAX N9*=8AA*CLK5ORK G*A%%CK1iB 9*=8F=*ERRKJ

reac1es

CHKEND

CHKESEN CHKENDKL

SKSTAT

@e a c1arac er .rom li!e: Is i 1e ?!$mber? mar,er H I. so* ad/a!ce 1e poi! er a. er 1e ?!$mber?: %oi! s o !e) c1arac er: Is 1e c1arac er a ?>?H C$mp i i is !o : Decreme! co$! er .or eac1 ?>? .o$!d Is 1e c1arac er a colo!H C$mp i. i is: C$mp $!less 1e c1arac er is ?THEN?: C1ec, 71e 1er 1e !$mber o. ;$o es .o$!d is e/e! Ai:e: colo! or THEN are o$ o. a s ri!gB: C$mp i. 1e s a eme! is .i!is1ed: C1ec, 71e 1er 1e li!e is .i!is1ed: Co! i!$e 1e loop i. !o : @i/e a! error Abeca$se a 7ro!g !$mber o. ;$o es 1a/e bee! .o$!dB: Co! i!$e 7i 1 !e) s a eme! : No7 HL 1olds 1e s ar address o. 1e re;$ired s a eme! : Upda e CHKADD o 1is address: C$mp .or7ard i. d$ri!g r$! ime: @i/e a! error repor i. 1e li!e is !o i! 1e edi i!g area:

T1e .i!al loop is made d$ri!g s+! a) c1ec,i!g* .or remo/i!g all JKb+ e .loa i!g poi! !$mbers i!ser ed i! 1e li!e b+ 1e ?mai!? RO" i! erpre er: =8GF =8<= =8<3 =8<4 =8<L =8<J =8<< =8<D =8<C =8<D =8<F =8D= =8DL =8DE =8DG =8DD =8DA =8DD =8DE =8A= =8A4 =8AL =8AE =8AJ =8A< DEC LD INC LD C% CR %USH LD RST DEF5 %USH LD AND SBC CR EX LD AND SBC LD %O% %O% LD C% CR HL C*N== HL A*AHLB N=E N9*=8AE*NEXTNU" BC BC*N===J 8=*CALBAS N8DE< HL DE*ACHADDKB A HL*DE NC*=8A4*NXTK8 DE*HL BC*N===J A HL*BC ACHADDKB*HL HL BC A*AHLB N=D N9*=8<3*RCL"KNU" T1is bala!ces 1e INC belo7: Clear C regis er: %oi! s o !e) c1arac er: Fe c1 1e c1arac er: C$mp i. 1e c1arac er is !o 1e s ar o. a ?!$mber?: Sa/e 1e co$! er: ?J? b+ es 1a/e o be reclaimed: Call RECLAI"K3 i! 1e ?mai!? RO" o reclaim 1e ?!$mber?: Sa/e HL Apoi! s a. er 1e reclaimed ?!$mber? B: C$mp .or7ard i. 1e ?J? b+ es reclaimed 7ere a. er 1e c1arac er poi! ed b+ CHADDK: O 1er7ise CHADDK !eeds o be $pda ed: Firs mo/e i i! o HL: T1e c1arac er poi! ed b+ CHADDK 1as bee! mo/ed ?J? b+ es do7!: S ore 1e !e7 /al$e: Res ore poi! er a!d co$! er: C$mp bac, i! o 1e loop $! il 1e li!e is .i!is1ed:

RCLNKNU"

NXTK8 NEXTNU"

No7 =8AA =8AB =8AD

1e 7or,i!g areas a!d CLK5ORK RST DEF5 CALL

1e !e7 s+s em /ariables are cleared: Clear 7or, areas b+ calli!g mai! RO" ?SETK5ORK? ro$ i!e: Rese some ?!e7? /ariables o NFF: is a ?!e7? o

8=*CALBAS N8JBF =3LD*RESKSARS

Fi!all+* comma!d* =8B= =8B8 =8B4 =8BE =8BG =8BA =8BC =8BF =8C8 =8CL =8CJ =8CD =8CB =8CE =8D= =8D4 =8DE =8D< =8DA =8DD =8DF =8E3 =8EL =8EG =8ED

1e comma!d code is .e c1ed .rom 1e li!e* a!d i. i 1e appropria e ro$ i!e is called: RST DEF5 SUB C% C% C% C% C% C% C% C% C% C% C% C% C% C% C% C% C% C% C% C% C% C% 8=*CALBAS N==3= NCE N=8 9*=L<J*CATKS6N N=3 9*=LBL*FR"TKS6N N=4 9*=E4D*"OSEKS6N N=L 9*=E4l*ERASEKS6N N=E 9*=LED*O%ENKS6N N3A 9*=<3F*SASEKS6N N38 9*=<DL*LOADKS6N N=< 9*=<DE*SERIFKS6N N=G 9*=<A<*"R@KS6N N3D 9*=EED*CLS2KS6N N3F 9*=EGF*CLR2KS6N

Call NEXTKCHAR i! 1e mai! RO" .e c1 1e comma!d code: Red$ce ra!ge o. 1e code: Ia 1e comma!d a ?CAT? C1ec, CAT s+! a) i. so: Also .or ?FOR"AT?*::: :::?"OSE?*::: :::?ERASE?*::: :::?O%EN?*::: :::?SASE?*::: :::?LOAD?*::: :::?SERIF6?*::: :::?"ER@E?*::: :::?CLS2?*::: :::a!d ?CLEAR2? comma!d:

I. 1e comma!d 1a 1as prod$ced 1e error 7as !o!e o. 1e address 1eld i! SECTOR s+s em /ariable: =8EC =8EF No7 =8F= =8F4 =8FJ ERRKS LD C% HL*ASECTORB AHLB

1ese* a F$mp is made

C$mp o 1e address 1eld i! SECTOR A!ormall+ ERRKJ belo7B:

1e error prod$ced b+ ERRKJ LD LD RST

1e mai! RO" is co!.irmed: Res ore i!i ial CHKADD co! e! s: @i/e 1e appropria e error:

HL*ACHADDKB ACHKADDB*HL 3<*RO"ERR

THE ?CREATE NE5 S6STE"S SARIABLES? ROUTINE T1is ro$ i!e is $sed o crea e 1e ?!e7? s+s em /ariables i. !o!e)is e! a!d i is called .rom 1e res ar ==4=: "a!+ /ariables are i!i ialised o i s de.a$l /al$e: =8FG =8FA =8FD =8FE =3== =3=4 CRTKSARS LD LD ADD CR LD %USH HL*ACHANSB DE*NA4LD HL*DE C*=34E*SARKEXIST HL*N=33L HL Fe c1 s ar o. c1a!!el area: T1is is FFFFKECBJ: T1e carr+ .lag is !o7 se i 1e CHANS area s ar s a. er 1e address NECBJ: C$mp i. 1e ?!e7? /ariables alread+ e)is : %reKload mac1i!eKs ac, 7i 1 1e address DEFAHLT belo7:

=3=L =3=G =3=A =3=D =38= =384 =38J =38D =38A =38C =38D =33= =338

LD LD LD LD LD LD LD %USH LD %USH LD %USH C%

HL*ASTKBOTB ASTKENDB*HL HL*NECD3 A"E"B*HL HL*NECBE BC*N==4A DE*N==== DE E*N=< DE DE*N8JEE DE =G==*UN%A@E

Clear 1e calc$la or s ac,: Se "E" 7i 1 1e address o. "E"BOT area: O!e loca io! be.ore 1e !e7 space is !eeded: Le!g 1 o. space !eeded: Sig!al ?a mai! RO" ro$ i!e 1as bee! called?: S ore re $r! address o 1e s1ado7 RO": Re $r! address o mai! RO" is "AKEKROO": 1e program co! i!$es 1ere

A. er 1e ?i!ser io!? o. 1e !e7 space 1as bee! made* 7i 1 1e i!i ialisa io! o. some /ariables: =33L =33G =33A =33D =33F =348 =34L I. =34E =34D DEFAULT LD LD LD LDIR LD LD RET HL*N=34A BC*N==84 DE*NECBJ A*N=8 ACO%IESB*A

Base address o. ?de.a$l /al$es? able: Le!g 1 o. able: S ar o. ?!e7 /ariables? area: S ore de.a$l /al$es: Se CO%IES o N=8: Fi!is1ed: 8 o. FLA@S4 is rese : ?Ne7 /ariables alread+ e)is ?: Fi!is1ed: 1e ?!e7? s+s em /ariables .rom

1e !e7 /ariables alread+ e)is * bi SARKEXIST RES 8*AFLA@S4B RET

THE ?S6STE" SARIABLES DEFAHLT SALDES? TABLE T1is able co! ai!s 1e de.a$l /al$es o. all FLA@S4 o SERKFL: =34A DEFB N=3

=34B =34D =3L= =3L4 =3LJ =3LG =3LD =3LA =3LB

DEF5 LD CALL LD RET DEF5 DEFB DEFB DEF5

N=8F= HL*N==== N==== AHKLB*HL N===C N=8 N== N====

De.a$l /al$e .or FLA@S4 Abi 8 is se o sig!al 1a 1e a1eado7 RO" 1as bee! paged .or 1e .irs ime Asee ==D3B: De.a$l .or SECTOR is ERRKJ address: T1is s1or s$bro$ i!e is 1e SBRT ?/ariable?* $sed o call mai! RO" ro$ i!es .rom 1e s1ado7 RO": de.a$l .or BAUD is N===C Ai:e: DJ== ba$dB: De.a$l .or NTSTAT: De.a$l .or IOBORD colo$r Ablac,B: De.a$l .or SERKFL: o HDK88* 1eir /al$es

THE ?RESET NE5 S6STE" SARIABLES? SUBROUTINE Be.ore $si!g 1e ?!e7? s+s em /ariables .rom NTRES% are rese o NFF: =3LD =3E= =3E3 =3EL =3EE =3EG RESKSARS EACHKSAR LD LD LD INC DCN9 RET HL*NTRES% B*N33 AHLB*NFF HL =3E3*EACHKSAR

%oi! s o 1e 8s /ariable: T1e bloc, is made b+ ?4L? b+ es: S ore NFF i! all 1e b+ es i! 1e bloc,: Fi!is1ed:

THE ?SHADO5 RE%ORT %RINTIN@? ROUTINE

T1is ro$ i!e is /er+ similar o ?"AINK4? AN84=4B i! 1e ?mai!? RO"* b$ repor message pri! ed is o!e o. 1e ?s1ado7? repor : =3E< =3EC =3ED =3EE =3J8 =3JE =3JD =3JB =3JC =3JE =3JF =3G= =3G4 =3GL =3GE =3G< =3GB =3GE =3<8 =3<3 =3<E =3<J =3<< =3<C =3<D =3<F =3D4 =3DG =3D< =3DB =3DD =3DF =3A= =3A3 =3AL =3AE =3AJ =3A< =3AD =3AA =3AC =3B= =3B8 =3B3 =3BE =3BJ RE%K"S@ LD AFLA@S4B*N== EI HALT CALL 8GBD*RCLKTKCH E*AFLA@SB 8*AFLA@S3B 9*=3JE*FETCHKERR 8=*CALBAS N=ECD HL A*AHLB AERRKNRB*A A AF HL*N==== AFLA@XB*H AXK%TRK1iB*H ADEFADDB*HL L ANEC8JB*HL 8=*CALBAS N8JB= E*AFLA@XB 8=*CALBAS N=DJE E*ATSFLA@B 4*ATSFLA@B AF HL*N=3BG B*N=L

1e

RES BIT CR RST DEF5 FETCHKERR %O% LD LD INC %USH LD LD LD LD INC LD RST DEF5 RES RST DEF5 SET RES %O% LD LD C%IR %RKRE%KL% LD C% CR %USH RST DEF5 %O% INC CR ENDK%RK"S LD INC INC LD %USH RST

Firs clear FLA@S4: E!able i! err$p s: Accep o!e i! err$p : Reclaim emporar+ c1a!!els a!d s7i c1 o.. dri/e mo ors: Sig!al ?read+ .or a !e7 ,e+?: C$mp i. 1e pri! er b$..er 1as !o bee! $sed* o 1er7ise call CO%6KBUFF i! 1e mai! RO" o emp + 1e b$..er: T1is address poi! s o 1e error code Aa. er a RST 3=B: Fe c1 error code: S ore i i! o ERRKNR: I!creme! error !$mber: Sa/e 1e !e7 /al$e: T1e s+s em /ariables FLA@X* XK%TRK1i a!d DEFADD are all se o Xero: No7 HL 1olds N===8: Displaceme! .or s ream = is made N===8 Ai:e: rese s ream = o 1e >K> c1a!!elB: Clear 7or, areas* calc$la or s ac, b+ calli!g SETK"IN: Sig!al ?edi i!g mode?: Clear lo7er scree! b+ calli!g CLSKLO5ER: Sig!al ? 1e lo7er scree! is o be cleared?: Sig!al ? 1e mode is o be co!sideK red $!c1a!ged?: Res ore error !$mber: Base address o. ?repor messages? able: Ha,e BC 1old a s$..icie! l+ 1ig1 !$mber: Ad/a!ce HL o 1e re;$ired repor message i! 1e able: Fe c1 c1arac er o. message: %ri! i $!less reac1ed 1e ?mar,er? o. !e) message: Sa/e poi! er: Call mai! RO" ?%RINTKA? res ar o pri! 1e c1arac er: Res ore poi! er: %oi! o !e) c1arac er: Co! i!$e 7i 1 !e) c1arac er: Clear mac1i!e s ac,: Ig!ore also 1e address N84=4 poi! ed b+ ERRKS% A 1a is replaced 7i 1 1e N84LD belo7B: Re $r! o 1e mai! RO" i! 1e middle o. 1e ?pri! repor message ro$ i!e: error code* i!creme! ed b+ 8:

A*AHLB N3= C*=3AC*ENDK%RK"S HL 8=*CALBAS N==8= HL HL =3DF*%RKRE%KL% S%*AERRKS%B S% S% HL*N84LD HL =*"AINKRO"

THE ?SHADO5? RE%ORT "ESSA@ES Be.ore eac1 repor 1ere is 1e correspo!de!

=3BG =3B< =3C< =3CD =3DA =3DB =3F= =3F8 =4=A =4=B =48G =48< =43C =43D =4L4 =4LL =4E= =4E8 =4JG =4J< =4GC =4GD =4<E =4<F =4AL =4AE =4B< =4BD =4D8 =4D3 =4E< =4ED =L== =L=8 =L8= =L88 =L3G =L3< =L4J =L4G =LLJ =LLG =LE8 =LE3 =LED =LEE =LGE =LGJ =L<E

DEFB DEF" DEFB DEF" DEFB DEF" DEFB DEF" DEFB DEF" DEFB DEF" DEFB DEF" DEFB DEF" DEFB DEF" DEFB DEF" DEFB DEF" DEFB DEF" DEFB DEF" DEFB DEF" DEFB DEF" DEFB DEF" DEFB DEF" DEFB DEF" DEFB DEF" DEFB DEF" DEFB DEF" DEFB DEF" DEFB DEF" DEFB DEF" DEFB

N== >%rogram .i!is1ed> N=8 >No!se!se i! BASIC> N=3 >I!/alid s ream !$mber> N=4 >I!/alid de/ice e)pressio!> N=L >I!/alid !ame> N=E >I!/alid dri/e !$mber> N=J >I!/alid s a io! !$mber> N=G >"issi!g !ame> N=< >"issi!g s a io! !$mber> N=D >"issi!g dri/e !$mber> N=A >"issi!g ba$d ra e> N=B >Header misma c1 error> N=C >S ream alread+ ope!> N=D >5ri i!g o a ?read? .ile> N=E >Readi!g a ?7ri e? .ile> N=F >Dri/e ?7ri e? pro ec ed> N8= >"icrodri/e .$ll> N88 >"icrodri/e !o prese! > N83 >File !o .o$!d> N84 >Hoo, code error> N8L >CODE error> N8E >"ER@E error> N8J >Seri.ica io! 1as .ailed> N8G >5ro!g .ile +pe> N8<

T1e s+! a) c1ec,i!g ro$ i!es T1e ro$ i!es i! 1is sec io! o. 1e s1ado7 RO" c1ec, 1e s+! a) o. comma!ds a!d call 1e comma!d ro$ i!es d$ri!g r$! ime: 1e ?!e7?

THE ?CAT? CO""AND S6NTAX ROUTINE T1is ro$ i!e c1ec,s 1a 1e comma!d is i! 1e .orm CAT !* or CAT 2s*! 1e! se s SKSTR8 a!d DKSTR8 s+s em /ariables be.ore e)i i!g i! s+! a) ime or e)ec$ i!g 1e CAT d$ri!g r$! ime: =L<J =L<D CATKS6N LD LD HL*SKSTR8 AHLB*N=3 Firs ma,e 1e scree! ?c$rre! ? s ream:

=L<B =L<C =L<E =LD= =LD3 =LDL =LDG =LDD =LDB =LDE =LA8 =LA4 =LAL =LAJ =LAD =LAC =LAF

RST DEF5 C% CR C% "ISSIN@KD C% C% CR CALL CALL CR RST DEF5 CATKSCRN CALL CALL

8=*CALBAS N==3= N=D 9*=LDL*"ISSIN@KD N4A 9*=J<4*NRE%ORTKD N34 N9*=LAJ*CATKSCRN =JLE*EX%TKSTR" =EB8*SE%ARATOR N9*=LB3*ORE%ORTK8 8=*CALBAS N==3= =J8E*EX%TKNU" =EBG*STKEND

CALL =JJD*CHECKK"K3 C% 8EG=*CATKRUN 3=*SHKERR N==

Ad/a!ce CHKADD 7i 1 a call o ?NEXTKCHAR? i! 1e mai! RO": I. 1e li!e e!ds 1ere* F$mp o prod$ce a! error: @i/e a! error also i. 1e s a eme! e!ds 7i 1 a colo!: C$mp i. a. er 1e ,e+7ord 1ere is !o 1e ?1as1? c1arac er: O 1er7ise e/al$a e s ream !$mber: @i/e a! error i. a. er 1e s ream !$mber 1ere is !o separa or: Ad/a!ce CHKADD o !e) c1arac er: E/al$a e dri/e !$mber: Co!.irm e!d o. s a eme! a!d e)i d$ri!g s+! a) ime: C1ec,s 1a dri/e !$mber 1eld i! DKSTR8 is i! ra!ge: Do 1e CATalog$e: Call 1e error 1a!dli!g ro$ i!e:

?No!se!se* i! BASIC? =LB3 ORE%ORTK8 RST =LB4 DEFB

THE ?FOR"AT? CO""AND S6NTAX ROUTINE A FOR"AT comma!d ma+ 1a/e o!e o. 1e .ollo7i!g .orms' FOR"AT >m>I!I>!ame> KFOR"AT >b>I! K FOR"AT > >I! K FOR"AT >!>I!: T1is ro$ i!e 1a!dles all .orms a!d se s NKSTR8* LKSTR8 a!d DKSTR8 as re;$ired be.ore e)i i!g d$ri!g s+! a) c1ec,i!g* or e)ec$ i!g 1e comma!d d$ri!g r$! ime: =LBL =LBG =LBA =LBC =LBF =LC3 =LCE =LCG =LCD =LCB =LCD =LD= =LD4 =LDE =LDG =LDA =LDD =LDE =LE8 =LEL =LEG =LEA FORK" NOKFORK" FR"TKS6N CALL CALL CR CALL CALL LD C% CR C% CR CALL C% NOTKFORKB C% CR CALL LD AND C% LD C% CALL C% =EF3*EX%TKS%EC =EBl*SE%ARATOR N9*=LBF*NOKFORK" =J3F*EX%TKNA"E =EBG*STKEND A*ALKSTR8B NEL 9*=LCD*FORKBKT NL3 N9*=LD4*NOTKFORKB =JB=*TESTKBAUD =ACD*SETKBAUD NLE N9*=LEG*FORK" =J<F*TESTKSTAT A*ADKSTR8B A 9*=JDF*NRE%ORTKJ ANTSTATB*A =EC8*END8 =J<E*TESTK"NA" 8EGE*FORKRUN E/al$a e As ri!gBAsepara orBA!$mberB a!d se LKSTR8* DKSTR8: I. 1ere is !o a .$r 1er separa or* !o .ile!ame is o be e)pec ed* so F$mp: E/al$a e >!ame> a!d se NKSTR8: Co!.irm e!d o. s a eme! a!d e)i d$ri!g s+! a) c1ec,i!g: Fe c1 c1a!!el speci.ier: C$mp 7i 1 FOR"AT >T> Tes .or FOR"AT >B> K !o e 1a 1e ro$ i!e is 1e same as 1a o. FOR"AT >T>: C$mp 7i 1 >N> a!d >"> c1a!!els: C1ec, 1a DKSTR8 1olds a /alid ba$d ra e: Se BAUD /ariable .rom DKSTR8 /al$e A 1e ac $al FOR"AT 7i 1 RS343 li!,B: C$mp i. !o a FOR"AT >N> comma!d: C1ec, 1a DKSTR8 1olds a /alid s a io! !$mber: @i/e a! error i. a emp i!g o FOR"AT >!>?I= Ai:e: 7i 1 1e ?broadcas ? speci.ierB: T1is is 1e ac $al FOR"AT comma!d 7i 1 1e !e 7or,: Fi!is1ed: C1ec, 1a 1e /ario$s parame ers are correc : Do 1e FOR"AT >"> comma!d:

FORKBKT

T1E ?O%EN? CO""AND S6NTAX ROUTINE T1is ro$ i!e deals 7i 1 O%EN 2sI>m>I!I>!ame> K O%EN 2sI>b> K O%EN 2sI> > K O%EN 2sI>!>I! comma!ds: All parame ers are s ored i! o SKSTR8* NKSTR8* DKSTR8 a!d LKSTR8 /ariables be.ore e)i i!g d$ri!g s+! a) c1ec,i!g or e)ec$ i!g 1e comma!d d$ri!g r$! ime: =LED =LF= =LF4 =LFE =LF< =LFB =LFD =E== =E=4 =E=J =E=G =E=D =E=C =E=D =E=F =E88 =E8L =E8J =E8< =E8A =E8C =E8F =E38 =E34 =E3J =E3D =E3C O%ENKS6N CALL CALL CR CALL CALL CR CALL CALL LD RST DEF5 LD AND SBC CR LD C% CR C% CR C% C% CR CALL C% CALL C% =JLE*EX%TKSTR" =EB8*SE%ARATOR N9*=LB3*ORE%ORTK8 =EF3*EX%TKS%EC =EB8*SE%ARATOR N9*=E==*NOTKO%K" =J3F*EX%TKNA"E =EBG*STKEND A*ASKSTR8B 8=*CALBAS N8G3G HL*N==88 A HL*BC C*=E3F*NRE%ORTKC A*ALKSTR8B NEL 9*=E8C*O%ENKRS NL3 N9*=E8F*NOTKO%KB =BLG*O%KRSCHAN NLE N9*=E3=*O%K"KC =J<F*TESTKSTAT =EA4*O%ENKNKST =J<E*TESTK"NA" 8EGA*O%KRUN E/al$a e s ream !$mber: @i/e a! error repor i. 1e separa or 1as bee! missed a. er ?s ream !o:? E/al$a e c1a!!el speci.ier* Asepara or !$meric e)pressio!B: C$mp i. !o .$r 1er separa or is prese! : O 1er7ise e/al$a e >!ame>: Co!.irm e!d o. s a eme! a!d e)i i. s+! a) is bei!g c1ec,ed: Fe c1 s ream !$mber: Call mai! RO" ?STRKDATA8? ro$ i!eI o! e)i * BC 1olds ?s ream da a?: I! .ac * F$mp i. 1e c$rre! s ream is alread+ ope!ed 7i 1 a ?!e7? c1a!!el: Fe c1 c1a!!el speci.ier: C$mp i. ope!i!g a ? ? c1a!!el: C$mp i. !o a ?b? c1a!!el:

NOTKO%K"

O%ENKRS NOTKO%KB

O%K"KC

Do 1e O%EN re.erred o RS343 li!,: C$mp i. !o a ?!? c1a!!el Ai:e: 7i 1 ?m? c1a!!elB: C1ec, 1a DKSTR8 1olds a /alid s a io! !$mber: Do 1e O%EN re.erred o 1e !e 7or,: C1ec, 1a all parame ers are /alid: Do 1e O%EN >"> comma!d: Call 1e error 1a!dli!g ro$ i!e:

?S ream alread+ ope!? =E3F NRE%ORTKC RST 3=*SHKERR =E4= DEFB N=B THE ?ERASE? CO""AND S6NTAX ROUTINE T1is comma!d 1as o!l+ o!e .orm a!d* 1a! 1e precedi!g o!es: =E48 =E4L =E4G =E4A ERASEKS6N CALL CALL CALL C% =JA4*EX%TKEX%R =EBG*STKEND =J<E*TESTK"NA" 8EJJ*ERASEKRUN 1$s*

1is ro$ i!e is more s raig1 .or7ard E/al$a e A>m>I!I>!ame>B Co!.irm e!d o. s a eme! a!d e)i d$ri!g s+! a) c1ec,i!g: C1ec, 1a all parame ers are /alid: Do 1e ERASE comma!d:

THE ?"OSE? CO""AND S6NTAX ROUTINE A ?"OSE? comma!d re;$ires 7o se s o. parame ers* .or 1e ?i!p$ ? c1a!!el a!d .or 1e ?o$ p$ ? c1a!!el: T1ese parame ers are s ored respec i/el+ i! 1e 7o areas DKSTR8 a!d DKSTR3: =E4D =EL= =EL4 =ELL =ELJ "OSEKS6N CALL CALL RST DEF5 C% =JBD*EX%TKEX%8 =EDF*EXKDKSTR 8=*CALBAS N==8< NCC E/al$a e s ream !$mber* or c1a!!el e)pressio!: E)c1a!ge DKSTR8 a!d DKSTR3 co! e! s: Call @ETKCHAR i! 1e mai! RO": T1e ,e+7ord ?TO? m$s be prese!

=EL< =ELA =ELD =EE= =EE8 =EE4 =EEJ

CR CALL CALL RST DEF5 CALL C%

N9*=E<L*NONSENSE =JBD*EX%TKEX%8 =EDF*EXKDKSTR 8=*CALBAS N==8< =EBG*STKEND 8EJB*"OSEKRUN

be 7ee! 1e 7o e)pressio!s: E/al$a e 3!d s ream !$mber* or c1a!!el e)pressio!: E)c1a!ge agai! DKSTR areas: Call @ETKCHAR i! 1e mai! RO": Co!.irm e!d o. s a eme! d$ri!g s+! a) c1ec,i!g: Do 1e "OSE comma!d* a!d e)i

THE ?CLS2? CO""AND ROUTINE T1is ro$ i!e 1as 1e as,s o. bo 1 ?s+! a) c1ec,i!g? a!d ?e)ec$ io!?: D$ri!g r$! ime* ATTRK%* ATTRKT* "ASKK%* "ASKKT* %KFLA@ a!d BORDCR s+s em /ariables are rese o 1e ?i!i ia% /al$e Aas a. er a NE5 comma!dB: =EED =EEA =EEC =EEE =EJ= =EJ8 =EJ4 =EJJ =EJD =EJC =EJF =EG3 =EGE =EGG =EGD =EGA =EGC CLS2KS6N RST DEF5 C% CR RST DEF5 CALL LD LD LD LD LD LD OUT RST DEF5 C% 8=*CALBAS N==3= N34 N9*=E<L*NONSENSE 8=*CALBAS N==3= =EBG*STKEND HL*N==4< AATTRK%B*HL AATTRKTB*HL ABORDCRB*L A%KFLA@B*H A*N=G ANFEB*A 8=*CALBAS N=DJB =ECl*END8 Ad/a!ce CHKADD a. er 1e ,e+7ord CLS: T1e c1arac er m$s be a ?2?: Ad/a!ce CHKADD agai!: Co!.irm e!d o. s a eme! a!d e)ii d$ri!g s+! a) c1ec,i!g: N4< is 1e a rib$ e b+ e: S ore N4< i! o ATTRK%* clear "ASKK%: S ore N4< i! o ATTRKT* clear "ASKKT: S ore N4< also .or lo7er scree! a rib$ e: Clear %KFLA@: Se 71i e border: Call mai! RO" ?CLS? ro$ i!e: Fi!is1ed:

THE ?CLEAR2? CO""AND ROUTINE As i! 1e pre/io$s ro$ i!e* 1is ro$ i!e bo 1 ?c1ec,s? a!d ?e)ec$ es? 1e comma!d: All s reams are closed i! $r!* 7i 1 bi 8 o. FLA@S4 se o sig!al 1a 1e remai!i!g b$..er co! e! s are o be erased A!o da a is se! * as opposed o 1e case o. a CLOSE2 comma!dB: =EGF =E<= =E<3 =E<L =E<G =E<< =E<A =E<D =E<E =E<F =ED4 =EDJ =EDG =ED< =EDA =EDC CLR2KS6N NONSENSE RST DEF5 C% C% RST DEF5 CALL 8=*CALBAS N==3= N34 N9*=LB3*ORE%ORTK8 8=*CALBAS N==3= =EBG*STKEND A AF 8*AFLA@S4B 8G8<*CLOSE AF A N8= C*=E<E*ALLKSTR"S =EC8*END8 Ad/a!ce CHKADD: T1e c1arac er m$s be a ?2?:

Ad/a!ce CHKADD agai!: Co!.irm e!d o. s a eme! a!d e)i d$ri!g s+! a) c1ec,i!g: S ar 7i 1 s ream =: Sa/e s ream !$mber: Sig!al ?CLEAR2 comma!d?: Close 1e c$rre! s ream: Res ore s ream !$mber: Eac1 s ream i! $r! is e)ami!ed: Co! i!$e $! il all s reams =::8E 1a/e bee! closed: Fi!is1ed: 1ose o. 1e DKSTR3

XOR ALLKSTR"S %USH SET CALL %O% INC C% CR C%

THE ?EXCHAN@E FILE S%ECIFIERS? SUBROUTINE T1is s$bro$ i!e e)c1a!ges 1e co! e! s o. DKSTR8 area 7i 1 area a!d /iceK/ersa:

=EDF =EA3 =EAE =EAG =EA< =EAD =EAA =EAB =EAC =EAD =EAE =EB=

EXKDKSTR

LD LD LD ALLKB6TES LD LD LD LD LD INC INC DCN9 RET

HL*NECDJ DE*NECDE B*N=< A*ADEB C*AHLB AHLB*A A*C ADEB*A HL DE =EAG*ALLKB6TES

S ar o. .irs area: S ar o. 3!d area: Bo 1 areas are < b+ es i! le!g 1: Fe c1 a b+ e .rom DKSTR3: Fe c1 a b+ e .rom DKSTR8: S ore i! o DKSTR8 1e b+ e comi!g .rom DKSTR3: B+ e .rom DKSTR8: S ore i i! o DKSTR9: Ad/a!ce 1e poi! ers: Co! i!$e $! il 1e areas 1a/e bee! e)c1a!ged: Fi!is1ed:

THE ?SE%ARATOR? SUBROUTINE T1is s1or s$bro$ i!e is called se/eral imes o see i. 1e c1arac er 1eld i! 1e acc$m$la or is a /alid separa or Ai:e: a comma or a semicolo!B: A re $r! 7i 1 1e 9ero .lag rese is made i. 1e c1arac er is !o a separa or: =EB8 =EB4 =EBL =EBJ SE%ARATOR C% RET C% RET N3C 9 N4B Is 1e c1arac er Re $r! 7i 1 Xero Is 1e c1arac er Re $r! 7i 1 Xero a commaH .lag se i. so: a semicolo!H .lag se i. so:

THE ?END OF STATE"ENT? ROUTINE A. er 1e s+! a) o. 1e ?!e7? comma!ds 1as bee! c1ec,ed* a F$mp is made 1ere o co!.irm 1a 1e s a eme! is .i!is1ed: A! error repor is gi/e! i. 1ere are some c1arac ers le. i! 1e li!e: A re $r! is made o 1e calli!g ro$ i!e o!l+ d$ri!g r$! ime* o 1er7ise 1e co! rol re $r!s o 1e ?mai!? RO" i! erpre er: =EBG =EBD =EBB =EBD =EBF =EC= STKEND C% CR C% CR N=D 9*=EBF*TESTKRET N4A N9*=E<L*NONSENSE C$mp i. 1e s a eme! e!ds 7i 1 ENTER: @i/e a! error i. c1arac er is !o a colo! Ai:e: 1e s a eme! is !o .i!is1edB: Re $r! o!l+ d$ri!g r$! ime* o 1er7ise co! i!$e belo7:

TESTKRET

RST 8<*CHKS6NTAX RET N9

THE ?RETURN TO THE "AIN INTER%RETER? ROUTINE T1e co! rol re $r!s o 1e mai! i! erpre er* 71e! a ?!e7? comma!d 1as bee! c1ec,ed or e)ec$ ed* .or 1e i! erpre a io! o. 1e !e) s a eme! : =EC8 =ECE =ECD =ECC =ECD =ECF =ED8 =ED4 =EDL =EDJ =ED< =EDA =EDB =EDD =EE= =EE8 END8 LD LD LD RST CR LD IN RRA CR LD IN RRA CR RETADKRUN LD RETADKS6N %USH RST S%*AERRKS%B Clear mac1i!e s ac,: AERRKNRB*NFF Clear error code: HL*N8BFL Re $r! address o mai! RO" is 8<*CHKS6NTAX ST"TKNEXT i. s+! a) bei!g c1ec,ed: 9*=EE=*RETADKRUNKS6N A*NGF @i/e* a! error i. BREAK is pressed A*ANFEB d$ri!g r$! ime: C*=EDD*RETADKRUN A*NFE A*ANFEB NC*=EE3*BREAKK%@" HL*N8BGD HL =*"AINKRO" AERRKNRB*N8L Re $r! address d$ri!g r$! ime is ST"TKRK8: Sa/e 1e re $r! address: Re $r! o 1e mai! RO" i! erpre er: S ore 1e error code a!d call

?BREAK i! o program? =EE3 BREAKK%@" LD

=EEJ

RST

3<*RO"ERR

1e error 1a!dli!g ro$ i!e:

THE ?ESALUATE STRIN@ EX%RESSION? SUBROUTINE A call o 1e mai! RO" ?EX%TKEX%? AclassKDAB s$bro$ i!e is made* o e/al$a e a s ri!g e)pressio!: D$ri!g r$! ime 1e parame ers o. 1e s ri!g As ar a!d le!g 1B are re $r!ed i! 1e DE a!d BC regis er pairs: =EEG =EE< =EEA =EEB =EEC =EED =EEE =EF= =EF8 EX%TKSTR RST 8=*CALBAS DEF5 N8C<C RST 8<*CHKS6NTAX RET 9 %USH AF RST DEF5 %O% RET 8=*CALBAS N3BF8 AF Call ?EX%TKEX%? i! 1e mai! RO":

Re $r! i. s+! a) is bei!g c1ec,ed Sa/e 1e Xero .lag a!d 1e c1arac er .ollo7i!g 1e s ri!g: Call ?STKKFETCH? i! 1e mai! RO" o .e c1 1e parame ers: 9ero .lag rese o sig!al ?r$! ime? Fi!is1ed:

THE ?ESALUATE CHANNEL S%ECIFIER? SUBROUTINE T1e s$bro$ i!e is e! ered a EX%TKS%EC or a EX%KS%EC3 depe!di!g $po! 71e 1er or !o 1e c1arac er poi! er is o be $pda ed o 1e !e) c1arac er: A si!gle c1arac er s ri!g is e/al$a ed* a!d i s $pper case ASCII /al$e is s ored i! o LKSTR8 d$ri!g r$! ime: I. a separa or is prese! a. er 1e si!gle c1arac er s ri!g* 1e! 1e ro$ i!e co! i!$es i! o EX%TKNU": =EF3 =EF4 =EFE =EF< =EFA =EFB =EFC =EFD =EFE =J== =J=8 =J=3 =J=L =J=J =J=< =J=B =J=C =J=E =J=F =J88 =J83 =J8L =J8E =J8< =J8B =J8C EX%TKS%EC RST 8=*CALBAS DEF5 N==3= EX%KS%EC3 CALL DEEG*EX%TKSTR CR 9*=J=C*TESTKNEXT %USH AF LD DEC OR CR LD RST DEF5 CR AND LD %O% TESTKNEXT C% RET C% RET C% RET CALL C% RST DEF5 A*C A B N9*=J3D*NRE%ORTK4 A*ADEB 8=*CALBAS N3C<D NC*=J3D*NRE%ORTK4 NDF ALKSTR8B*A AF N=D 9 N4A 9 NAE NC =EB8*SE%ARATOR N9*=LB3*ORE%ORTK8 8=*CALBAS N==3= Ad/a!ce CHKADD: E/al$a e s ri!g e)pressio!: C$mp i. s+! a) is bei!g c1ec,ed: Sa/e 1e c1arac er .ollo7i!g 1e s ri!g: ?A? 1olds 1e lo7 b+ e o. 1e s ri!g le!g 1: C$mp i. 1ere is more 1a! o!e c1arac er i! 1e s ri!g Aalso i. 1e s ri!g is !$llB: Fe c1 1e c1a!!el speci.ier: Call ?AL%HA? o see 71e 1e ! isi /alid le er: C$mp i. i is !o a /alid le er "a,e 1e le er $pper case: S ore 1e c1a!!el speci.ier: T1e ?!e) c1arac er? is res ored: Re $r! i. i is ENTER* or a colo!*

Re $r! also 7i 1 a ,e+7ord: O 1er7ise a separa or m$s be .o$!d: @i/e a! error i. !o .o$!d: A !$meric e)pressio! Ai:e: dri/e !o:*s a io! !o:* ba$d ra eB is e)pec ed: B$ .irs ad/a!ce CHKADD pas 1e separa or:

THE ?ESALUATE NU"ERIC EX%RESSION? SUBROUTINE T1is s$bro$ i!e is $sed 71e!e/er a si!gle !$meric e)pressio! is o be e/al$a ed: T1e res$l is re $r!ed d$ri!g r$! ime i! o 1e BC regis er pair a!d i! o 1e DKSTR8 s+s em /ariable: =J8E EX%TKNU" RST 8=*CALBAS Call EX%TKNU" i! 1e mai! RO" o

=J8F =J38 =J33 =J34 =J3L =J3E =J3G =J3B =J3C

DEF5 RST RET %USH RST DEF5 LD %O% RET

N8C<3 8<*CHKS6NTAX 9 AF 8=*CALBAS N8EDD ADKSTR8B*BC AF

e/al$a e 1e e)pressio!: Re $r! i. s+! a) is bei!g c1ec,ed: Sa/e c1arac er .ollo7i!g 1e e)pressio! a!d Xero .lag: Call FINDKINT3 o .e c1 1e /al$e .rom calc$la or s ac,: S ore 1e /al$e: Res ore c1arac er a!d Xero .lag: Fi!is1ed:

?I!/alid de/ice e)pressio!? =J3D =J3E NRE%ORTK4 RST DEFB 3=*SHKERR N=3 Call 1e error 1a!dli!g ro$ i!e:

THE ?ESALUATE FILENA"E? SUBROUTiNE A s ri!g e)pressio! is e/al$a ed a!d* pro/ided 1a 1e le!g 1 is 7i 1i! 1e ra!ge 8::8= c1arac ers* 1e ?le!g 1? a!d 1e ?s ar ? o. 1a s ri!g are s ored i! o NKSTR8 a!d ANKSTR8 N 3B: =J3F =J4= =J43 =J4E =J4J =J4G =J4< =J4D =J4B =J4E =JL= =JL3 =JLJ =JLA =JLB EX%TKNA"E RST DEF5 CALL RET %USH LD OR CR LD SBC CR LD LD %O% RET 8=*CALBAS N==3= =EEG*EX%TKSTR 9 AF A*C B 9*=JLC*NRE%ORTKL HL*N===A HL*BC C*=JLC*NRE%ORTKL ANKSTR8B*BC ANKSTR8N3B*DE AF Ad/a!ce CHKADD: E/al$a e 1e s ri!g: Re $r! i. s+! a) is bei!g c1ec,ed: Sa/e Xero .lag a!d ?!e) c1arac er?: @i/e a! error 7i 1 !$ll s ri!g: @i/e 1e error also i. ?le!g 1? e)ceeds e! c1arac ers: S ore 1e ?le!g 1?: S ore 1e ?s ar ?: Res ore A a!d Xero .lag: Fi!is1ed:

?I!/alid !ame? =JLC =JLD NRE%ORTKL RST DEFB 3=*SHKERR N=4 Call 1e error 1a!dli!g ro$ i!e: 1e res$l * i! 1e ra!ge =::8E* is

THE ?ESALUATE STREA" NU"BER? SUBROUTINE A si!gle !$meric e)pressio! is e/al$a ed a!d s ored i! o SKSTR8 /ariable d$ri!g r$! ime: =JLE =JLF =JE8 =JE3 =JEL =JEE =JEJ =JEG =JE< =JEA =JEC =JEE =JJ8 =JJ3 EX%TKSTR" RST DEF5 RST DEF5 RST RET %USH RST DEF5 C% CR LD %O% RET 8=*CALBAS N==3= 8=*CALBAS N8C<3 8<*CHKS6NTAX 9 AF 8=*CALBAS N8EDD N8= NC*=JJ4*NRE%ORTK3 ASKSTR8B*A AF

Ad/a!ce CHKADD: Call EX%TK8NU" o e/al$a e a !$meric e)pressio!: Re $r! i. s+! a) is bei!g c1ec,ed: Sa/e ?!e) c1arac er? a!d Xero .lag: Call FINDKINT8 o .e c1 1e /al$e: Tes .or !$mbers grea er 1a! 8E:

S ore s ream !$mber: Res ore A a!d Xero .lag: Fi!is1ed:

?I!/alid s ream !$mber?

=JJ4 =JJL

NRE%ORTK3 RST DEFB

3=*SHKERR N=8

Call 1e error 1a!dli!g ro$ i!e: 1e "icrodri/e

THE ?CHECK >"> %ARA"ETERS? SUBROUTINE A re $r! o 1e calli!g ro$ i!e is made o!l+ i. LKSTR8 de!o es de/ice bei!g $sed* a!d i. DKSTR8 1olds a /alid dri/e !$mber: =JJE =JJ< =JJA =JJD =JG8 =JG3 =JG4 =JGE =JGJ =JGG =JG< =JGA =JGB =JGE =J<= CHECKK" LD C% C% CHECKK"K3 LD LD OR CR INC LD OR CR DEC LD SBC RET A*ALKSTR8B NLD N9*=J3D*NRE%ORTK4 DE*ADKSTR8B A*E D 9*=J<8*NRE%ORTKE DE A*E D 9*=J<4*NRE%ORTKD DE HL*N===< HL*DE NC

Fe c1 c1a!!el speci.ier: Is i >">H Repor 1e error i. i is !o : Fe c1 dri/e !$mber: Repor a! error i. Xero: Tes agai!s NFFFF: Repor a! error i. !o dri/e !$mber 1as bee! e/al$a ed: Bala!ce 1e ?INC? abo/e: Is dri/e !$mber 7i 1i! ra!ge 8::<H Re $r! i. i! ra!ge:

?I!/alid dri/e !$mber? =J<8 =J<3 NRE%ORTKE RST DEFB 3=*SHKERR N=L Call 1e error 1a!dli!g ro$ i!e:

?"issi!g dri/e !$mber? =J<4 =J<L NRE%ORTKD RST DEFB 3=*SHKERR N=< Call 1e error 1a!dli!g ro$ i!e: o

THE ?CHECK >"> %ARA"ETERS AND FILENA"E? SUBROUTINE T1is s$bro$ i!e adds o 1e es s per.ormed b+ 1e pre/io$s o!e* also a c1ec, NKSTR8K1i* 1a 1olds NFF 71e! !o .ile!ame 1as bee! e/al$a ed: =J<E =J<< =J<B =J<C TESTK"NA" CALL LD AND RET =JJE*CHECKK" A*ANKSTR8K1iB A 9 C1ec, >m> parame ers: Fe c1 1ig1 b+ e o. !ame le!g 1: Is i =H Re $r! i. so:

?"issi!g !ame? =J<D =J<E RST DEFB 3=*SHKERR N=J Call 1e error 1a!dli!g ro$ i!e:

THE ?CHECK STATION NU"BER? SUBROUTINE A re $r! o 1e calli!g ro$ i!e is made o!l+ i. DKSTR8 1olds a /alid s a io! !$mber i! 1e ra!ge =::JL: =J<F =JD4 =JDL =JDE =JDJ =JD< =JDD =JDC =JDE TESTKSTAT LD INC LD OR CR DEC LD SBC RET DE*ADKSTR8B DE A*E D 9*=JA8*NRE%ORTK< DE HL*N==L= HL*DE NC Fe c1 s a io! !$mber: Tes agai!s NFFFF: No s a io! !$mber 1as bee! e/al$a ed* so gi/e a! error Bala!ce 1e ?INC? abo/e: Re $r! o!l+ i. 1e /al$e is !o grea er 1a! JL decimal:

?I!/alid s a io! !$mber?

=JDF =JA=

RST DEFB

3=*SHKERR N=E

Call 1e error 1a!dli!g ro$ i!e:

?"issi!g s a io! !$mber? =JA8 =JA3 NRE%ORTK< RST DEFB 3=*SHKERR N=G Call 1e error 1a!dli!g ro$ i!e:

THE ?ESALUATE >X>INI>NA"E>? SUBROUTINE A call o 1e s$bro$ i!e EX%TKS%EC 7ill e/al$a e 1e ?>X>IN?* 71ile 1e s$bro$ i!e EX%TKNA"E is $sed o e/al$a e 1e .ile!ame: A separa or m$s be .o$!d be 7ee! 1em: =JA4 =JAJ =JAD =JAC =JAF EX%TKEX%R CALL CALL C% CALL RET =EF3*EX%TKS%EC =EB8*SE%ARATOR N9*=LB3*ORE%ORTK8 =J3F*EX%TKNA"E E/al$a e c1a!!el speci.ier a!d dri/e !$mber: A separa or m$s be prese! : E/al$a e 1e .ile!ame: Fi!is1ed: is !o 1e

THE ?CHECK BAUD RATE? SUBROUTINE T1is ro$ i!e simpl+ c1ec,s 1a DKSTR8 1olds a /alid ba$d ra e Ai:e: i se o NFFFFB: A!+ /al$e belo7 NFFFF is accep ed Ab$ la er ro$!ded o !eares ?s a!dard? /al$eB: =JB= =JB4 =JBL =JBE =JBJ TESTKBAUD LD INC LD OR RET HL*ADKSTR8B HL A*L H N9 Fe c1 ba$d ra e: Accep a!+ /al$e e)cep NFFFF:

?"issi!g ba$d ra e? =JBG =JB< RST DEFB 3=*SHKERR N=D Call 1e error 1a!dli!g ro$ i!e:

THE ?ESALUATE STREA" OR EX%RESSION? SUBROUTINE T1is s$bro$ i!e is $sed o dec, 1e s+! a) o. 1e "OSE Comma!d: I. 1e ?c$rre! ? c1arac er is a 1as1 sig! A2B* 1e! a s ream !$mber is e/al$a ed a!d s ored i! o SKSTR8 d$ri!g r$! ime: O 1er7ise a c1a!!el e)pressio! li,e ?>)>I! [>!ame>\? is e/al$a ed* a!d NKSTR8* DKSTR8 a!d LKSTR8 are se as re;$ired a!d* i. 1e c1a!!el speci.ier is >"> or >N>* 1e parame ers are c1ec,ed o be i! ra!ge: =JBD =JBA =JBC =JBE =JC8 =JCL =JCG =JCD =JCC =JCD =JCE =JD8 =JD4 =JDL =JDJ =JDG =JDD =JDC EX%TKEX%8 RST DEF5 C% C% CALL CALL CR CALL ENDHERE RST RET LD C% RET C% RET C% C% C% 8=*CALBAS N==3= N34 9*=JLE*EX%TKSTR" =EFE*EX%KS%EC3 =EB8*SE%ARATOR N9*=JCC*ENDHERE =J3F*EX%TKNA"E 8<*CHKS6NTAX 9 A*ALSTRK8B NEL 9 NL3 9 NLE 9*=J<F*TESTKSTAT =J<E*TESTK"NA" Ad/a!ce CHKADD: Is 1e prese! code a! 1as1 sig!H E/al$a e s ream !$mber i. so* o 1er7ise e/al$a e >)>I!: C$mp i. 1ere is !o .$r 1er separa or: O 1er7ise deal 7i 1 >.ile!ame>: Re $r! i. s+! a) is bei!g c1ec,ed: Fe c1 c1a!!el speci.ier: Re $r! i. I is >T>: Re $r! i. i B$ is >B>: is >N>:

c1ec, s a io! !o: i. i

O 1er7ise c1ec, >m> parame ers: o :FFB:

=JDF:::=JFF

U!$sed loca io!s Aall se

THE ?UN%A@E? SUBROUTINE T1is s$bro$ i!e is ac $all+ made b+ a si!gle RET i!s r$c io!* b$ 1e 1ard7are de ec s 1a 1e %rogram Co$! er reac1es 1e address N=G== a!d pagesKi! 1e ?mai!? RO": =G== UN%A@E RET RET$r! o ?mai!? RO": 1e SASE* s$bro$ i!e r$! ime 1e are properl+

THE ?ESALUATE %ARA"ETERS? SUBROUTINE T1is /er+ impor a! s$bro$ i!e is called o e/al$a e 1e s+! a) o. LOAD* SERIF6 a!d "ER@E comma!ds re.erred o 1e ?!e7? c1a!!els: T1e is e! ered 7i 1 CHKADD poi! i!g o 1e comma!d codeI o! e)i d$ri!g /ariables DKSTR8* LKSTR8* NKSTR8* HDK==* HDK=B* HDK=D* HDK=F* HDK88 se : =G=8 =G=3 =G=L =G=J =G=< =G=D =G=B =G=E =G88 =G84 =G8J =G8G =G8A =G8C =G8E =G33 =G34 =G3E =G3G =G3D =G3B =G3D =G3F =G48 =G44 =G4E =G4G =G4D EX%TK%R"S RST DEF5 C% CR RST DEF5 CALL CALL CR CALL NOKNA"E %USH LD C% CR SET NOTKNET %O% C% CR C% CR C% CR C% CR C% CR C% C% 8=*CALBAS N==3= N3A N9*=G4C*ORE%K8K3 8=*CALBAS N==3= =EFE*EX%KS%EC3 =EB8*SE%ARATOR N9*=G8J*NOKNA"E =J3F*EX%TKNA"E AF A*ALKSTR8B NLE N9*=833*NOTKNET 4*AFLA@S4B AF N=D 9*=GE=*ENDKEX%T N4A 9*=GE=*ENDKEX%T NAA 9*=GG8*SCREENQ NAF 9*=G<D*CODE NCA 9*DG4E*LINE NEL 9*=GD3*DATA

T1e !e) c1arac er is .e c1ed .rom 1e li!e: I m$s be a ?(?: @i/e a! error i. !o a ?(?: Ad/a!ce CHKADD pas 1e ?(?: E/al$a e >)>I!: C1ec, 1a 1e separa or dDEs e)is : C$mp i. !o !ame is o be e)pec ed: E/al$a e >.ile!ame>: T1e !e) c1arac er is sa/ed: Fe c1 c1a!!el speci.ier: C$mp i. 1e c1a!!el is !o >N>* o 1er7ise sig!al >!e 7or,i!g>: Res ore ?!e) c1arac er?: C$mp i. 1e s a eme! e!ds 7i 1 ENTER* or 7i 1 a colo!: C$mp i. 1e s a eme! SCREENQ: C$mp 7i 1 CODE: C$mp 7i 1 LINE: C$mp 7i 1 DATA* o 1er7ise gi/e a! error repor : co! i!$es 7i 1

?No!se!se i! BASIC? =G4C =G4D ORE%K8K3 RST DEFB 3=*SHKERR N== Call 1e error 1a!dli!g ro$ i!e:

No7 deal 7i 1 LINE: =G4E =G4F =GL8 =GL3 =GLL =GLG =GL< =GLA =GLE I. LINE RST DEF5 RST DEF5 CALL RST DEF5 LD CR 8=*CALBAS N==3= 8=*CALBAS N8C<3 =EBG*STKEND 8=*CALBAS N8EDD AHDK88B*BC =GE4*%RO@ Ad/a!ce CHKADD: Call EX%TK8NU" o e/al$a e 1e a$ os ar li!e !$mber: Co!.irm e!d o. s a eme! * a!d e)i d$ri!g s+! a) c1ec,i!g: Fe c1 1e a$ os ar li!e !$mber .rom 1e calc$la or s ac,: S ore a$ os ar li!e !$mber: C$mp .or7ard: 1e s+! a) c1ec,i!g e!ds 1ere:

1ere are !o parame ers Ai:e: BASIC programB*

=GE= =GE4 =GEL =GEG =GEA =GEE =GJ3 =GJ4 =GJE =GJ< =GJB =GJD =GG=

ENDKEX%T %RO@

CALL XOR LD LD LD LD SCF SBC LD LD SBC LD RET

=EBG*STKEND A AHDK==B*A HL*AEKLINEB DE*A%RO@B AHDK=DB*DE HL*DE AHDK=BB*HL HL*ASARSB HL*DE AHDK=FB*HL

Co!.irm e!d o. s a eme! a!d e)i d$ri!g s+! a) c1ec,i!g: S ore = i! o HDK== Asig!alli!g ?program? .ile +peB: Address pas 1e las loca io! o. /ariables area: T1e ?s ar ? o. da a is .e c1ed .rom %RO@* a!d s ored i! o HDK=D: T1is calc$la es AAEKLINEBKA%RO@BBK8* i:e: 1e le!g 1 o. 1e program a!d i s /ariables: T1e ?le!g 1? is s ored: No7 calc$la e ASARSBKA%RO@B* i:e: 1e le!g 1 o. 1e program o!l+: S ore i i! o HDK=F: Fi!is1ed: 1e s+s em

I. 1e o,e! is SCREENQ* /ariables: =GG8 =GG3 =GGL =GGG =GGA =GGD =G<= =G<4 =G<E =G<< SCREENQ RST DEF5 CALL LD LD LD LD LD LD RET

1e parame ers are e! ered direc l+ i! o Ad/a!ce CHKADD:

8=*CALBAS N==3= =EBG*STKEND HL*N8B== AHDK=BB*HL HL*NL=== AHDK=DB*HL A*N=4 AHDK==B*A

Co!.irm e!d o. s a eme! a!d e)i d$ri!g s+! a) c1ec,i!g: T1e ?le!g 1? o. 1e displa+ .ile a!d a rib$ es is s ored: T1e s ar address o. 1e displa+ .ile: Sig!al ?b+ es? .ile +pe: Fi!is1ed:

No7 deal 7i 1 CODE: =G<D =G<A =G<C =G<E =GD= =GD3 =GDL =GD< =GDA =GDB =GDD =GDF =GA= =GA3 =GAE =GAG =GAB =GAD =GAE =GB= =GB3 =GB4 =GBE =GBJ =GB< =GBD CODE RST DEF5 C% CR C% CR BIT CR RST DEF5 8=*CALBAS N==3= N=D 9*=GDA*DEFLTK= N4A N9*%ARK8 E*AFLA@S4B N9*ORE%K8K3 8=*CALBAS N8CEJ =GAG*TESTKSASE 8=*CALBAS N8C<3 =E<8*SE%ARATOR 9*=G<3*%ARK3 E*AFLA@S4B N9*=G4C*ORE%KlK3 8=*CALBAS N8CEJ =GB<*ENDKCODE 8=*CALBAS N==3= 8=*CALBAS N8CB3 8=*CALBAS N==8< Ad/a!ce CHKADD: I. 1ere a e !o .$r 1er parame ers* F$mp o $se ?=? as de.a$l /al$e: C$mp i 1ere are parame ers o be e/al$a ed Ai:e: 1e !e) c1arac er is !o a colo!B: @i/e a! error i. SASE >!ame>CODE is e!co$! ered b+ i sel. A call o mai! RO" ro$ i!e ?USEK9ERO? is made o $se a /al$e o. Xero as de.a$l C$mp .or7ard: O 1er7ise call EX%TK8NU" o $se 1e speci.ied /al$e: C$mp i. a separa or is prese! : @i/e a! error i. a parame er 1as bee! missed i! a SASE !ame CODE comma!d: Use Xero also .or 1e 3!d parame er* C$mp .or7ard: Ad/a!ce CHKADD: E/al$a e 1e 3!d parame er b+ calli!g EX%TK8NU": Call @ETKCHAR o .e c1 1e ?las ? c1arac er i! 1e s a eme! :

DEFLTK=

CR RST DEF5 CALL CR TESTKSASE BIT CR RST DEF5 CR %ARK3 RST DEF5 RST DEF5 ENDKCODE RST DEF5 %ARK8

=GBB =GBE =GBF =GC8 =GCE =GCJ =GC< =GCC =GCE =GD8 Fi!all+ =GD3 =GDJ

CALL RST DEF5 LD RST DEF5 LD LD LD RET 1e ro$ i!e BIT CR

=EBG*STKEND 8=*CALBAS N8EDD AHDK=BB*BC 8=*CALBAS N8EDD AHDK=DB*BC A*N=4 AHDK==B*A

Co!.irm e!d o. s a eme! a!d e)i i. s+! a) is bei!g c1ec,ed: Fe c1 1e >le!g 1> .rom 1e calc$la or s ac, a!d s ore i : Fe c1 1e >s ar > .rom 1e calc$la or s ac, a!d s ore i : Sig!al ?b+ es? .ile Fi!is1ed: +pe:

o e/al$a e DATA parame ers: J*AFLA@S4B 9*=GDA*NOK"KARR C$mp $!less a a! arra+: emp i!g o "ER@E

DATA

?"ER@E error? =GD< =GDD =GDA =GDB =GDD =GDE =GE= =GE3 =GEL =GEG =GEB =GED =GF8 =GF3 NOK"KARR RST DEFB RST DEF5 RST DEF5 SET CR LD BIT CR LD RST CR 3=*SHKERR N8L 8=*CALBAS N==3= 8=*CALBAS N3<B3 G*C NC*=GF3*EXISTIN@ HL*N==== L*AFLA@S4B N9*=<=E*LDKDATA AERRKNRB*N=8 3<*RO"ERR 9*=GFJ*@KT6%E Call 1e error 1a!dli!g ro$ i!e: Ad/a!ce CHKADD o poi! o 1e arra+ !ame: Call LOOKKSARS o loo, .or 1e arra+ !ame: Se bi G o. arra+ !ame: C$mp i. 1a!dli!g a! e)is i!g arra+: Sig!al ?$si!g a !e7 arra+?: C$mp .or7ard i. LOADi!g 1e arra+: @i/e 1e error repor ?Sariable !o .o$!d? i. r+i!g o SASE a !o!e)is e! arra+: Co! i!$e o!l+ 71e! 1a!dli!g a !$meric or alp1a!$meric arra+* 1e ?b$g? Aprese! i! 1e

EXISTIN@

NOTE' T1is es .ails o e)cl$de simple s ri!gs* b$ mai! RO"B is correc ed a =GFF: =GFL =GFE =GFJ =GFG =GFD =GFD =GFF =<=8 =<=4 =<=L =<=E =<=< =<=D =<=A =<=D =<=E =<=F =<83 =<8L =<8J =<8< NONSKBSC @KT6%E RST DEFB RST CR BIT CR BIT CR INC LD LD INC LD LD INC LD LD LD BIT CR INC 3=*SHKERR N== 8<*CHKS6NTAX 9*=<8C*ENDKDATA E*AFLA@S4B 9*=<=4*SRKDATA G*AHLB 9*=GFL*NONSKBSC HL A*AHLB AHDK=BKloB*A HL A*AHLB AHDK=BK1iB*A HL A*C AHDK=FKloB*A A*N=8 J*C 9*=<8D*NU"KARR A

?No!se!se i! BASIC? C$mp .or7ard i. s+! a) is bei!g c1ec,ed: C$mp .or7ard i. !o d$ri!g a SASE comma!d: @i/e a! error i. r+i!g o SASE a simple s ri!g: %oi! o 1e ?le!g 1? o. 1e arra+: Fe c1 lo7 b+ e: S ore i : %oi! o 1ig1 b+ e o. ?le!g 1?: Fe c1 1ig1 b+ e: S ore i : Ad/a!ce o 1e s ar o. 1e arra+: S ore arra+ !ame i! o HDK=F: Sig!al ?!$meric arra+?: C$mp i. reall+ a !$meric arra+: O 1er7ise AM3 o sig!al

SRKDATA

LDKDATA

=<8D =<8C =<8D =<8E =<3= =<33 =<3L =<3E =<3G =<3A =<3E

NU"KARR ENDKDATA

LD EX RST DEF5 C% CR RST DEF5 CALL LD RET

AHDK==B*A DE*HL 8=*CALBAS N==3= N3D N9*=GFL*NONSKBSC 8=*CALBAS N==3= =EBG*STKEND AHDK=DB*DE

?alp1a!$meric arra+?: S ore .ile +pe: DE 1olds 1e ?s ar ? o. 1e arra+ Aor N==== 7i 1 ?NE5? arra+ o be loadedB: Ad/a!ce CHKADD: C1ec, 1a 1e ?B? dDEs e)is : Repor a! error i. !o : Ad/a!ce CHKADD: Co!.irm e!d o. s a eme! a!d e)i d$ri!g s+! a) c1ec,i!g: S ore >s ar > o. 1e arra+: Fi!is1ed:

THE ?SASE? CO""AND S6NTAX ROUTINE T1e ac $al sa/i!g is 1a!dled direc l+ 7i 1 >B> a!d >N> c1a!!els* or b+ SASEKRUN i. 1e ?N> c1a!!el is bei!g $sed: =<3F =<44 =<4J =<4D =<4B =<4D =<4F =<L8 =<LL =<LG =<LD SASEKS6N SET CALL LD C% CR C% CR CALL CALL CR CALL C% E*AFLA@S4B =G=8*EX%TK%R"S A*ALKSTR8B NL3 9*=<LF*SAKHEADER NLE N9*=<LD*SASEK" =J<F*TESTKSTAT =EAD*O%KTE"%KN =<LF*SAKHEADER =J<E*TESTK"NA" 8EGF*SASEKRUN Sig!al >Sa/i!g>: C1ec, s+! a) a!d se /ariables: Fe c1 c1a!!el speci.ier: C$mp 7i 1 >B> c1a!!el bei!g $sed: C$mp 7i 1 o 1er 1a! >N> c1a!!el bei!g $sed Ai:e: 7i 1 >"> c1a!!elB: C1ec, s a io! !$mber: Ope! a emporar+ >N> c1a!!el: C$mp .or7ard: C1ec, >"> parame ers: C$mp .or7ard: 1e

SASEK"

No7 a loop is e! ered !i!e b+ es a,e! .rom =<LF =<E8 =<EL =<EG =<E< =<EA =<ED =<J8 =<J4 =<JJ =<J< =<JA =<JD =<JE =<G3 =<G4 =<GL =<GJ =<GD =<GA =<GB =<GD SAKHEADER LD LD HDKLOO% CALL INC DCN9 LD BIT CR LD C% CR LD ADD SABLOCK LD SAKBLKKL% LD OR CR CALL DEC INC CR SKBLKKEND C%

o SASE o 1e >N> or >B> de/ices 1e ?1eader?* i:e: 1e s+s em /ariables HDK== o HDK88: B*N=D HL*NECEJ =<<=*SAKB6TE HL =<EL*HDKLOO% HL*AHDK=DB 4*AFLA@S4B 9*=<JE*SAKBLOCK A*AHDK==B N=4 NC*=<JE*SAKBLOCK DE*N==8L HL*DE BC*AHDK=BB A*C B 9*=<GD*SKBLKKEND =<<=*SAKB6TE BC HL =<G3*SAKBLKKL% =D<<*TSTK"RK" Ni!e b+ es are o be sa/ed: S ar o. HD /ariables: Sa/e 1e b+ e poi! ed b+ HL: Eac1 1eader b+ e i! $r! is sa/ed: Fe c1 ?s ar o. da a bloc,?: C$mp i. >B> c1a!!el is bei!g $sed:

C$mp also i. sa/i!g a bloc, o. memor+ Ai:e: SASE::CODEB: O 1er7ise 1e da a o be sa/ed 1a/e bee! mo/ed $p b+ ?3GJ? b+ es a. er 1e i!ser io! o. 1e >N> c1a!!el: Fe c1 1e ?le!g 1? o. 1e bloc,: C$mp .or7ard 71e! 1e co$! er 1as reac1ed Xero: Se!d 1e b+ e poi! ed b+ HL: Decreme! ?le!g 1?: %oi! o !e) b+ e: C$mp bac, $! il 1e 71ole bloc, 1as bee! sa/ed: C$mp .or7ard o se!d 1e ?e!d o. .ile? bloc, Ao!l+ 7i 1 Ne 7or,B:

THE ?SASE A B6TE TO NET5ORK OR RS343 LINK? SUBROUTINE T1e b+ e poi! ed b+ 1e HL regis er pair is .e c1ed a!d se! b+ $si!g 1e >B> or 1e >N> c1a!!el o$ p$ ro$ i!g* depe!di!g $po! 1e s a e o. bi 4 o. 1e FLA@S4 /ariable: =<<= =<<8 =<<3 =<<J =<<G =<<D =<<C =<<E =<D8 =<D3 =<D4 SAKB6TE %USH %USH BIT LD CR CALL CR CALL %O% %O% RET HL BC 4*AFLA@S4B A*AHLB N9*=<<E*SAKNET =CEA*BCHANKOUT =<D8*SAKBKEND =DJC*NCHANKOUT BC HL Sa/e HL a!d BC regis er pairs: Tes ?!e 7or,i!g? bi : Fe c1 1e b+ e o be sa/ed: C$mp i. !e 7or, is bei!g $sed: O 1er7ise se!d 1e b+ e 1ro$g1 1e RS343 li!,: E)i : Use >N> c1a!!el o$ p$ ro$ i!e o se!d 1e b+ e: Res ore regis ers a!d re $r!:

SAKNET SAKBKEND

TUE ?LOAD? CO""AND S6NTAX ROUTINE T1e s+! a) is c1ec,ed 7i 1 a si!gle call =<DL =<D< =<DB LOADKS6N SET CALL C% L*AFLA@S4B =G=8*EX%TK%R"S =<AF*LDKSFK"R

1e EX%TK%R"S s$bro$ i!e:

Sig!al ?doi!g a LOAD comma!d?: C1ec, s+! a) a!d se /ariables: Do 1e LOAD:

THE ?SERIF6? CO""AND S6NTAX ROUTINE Agai! 1e s+! a) c1ec,i!g is 1a!dled b+ EX%TK%R"S: =<DE SERIFKS6N =<A3 =<AE SET CALL C% G*AFLA@S4B =G=8*EX%TK%R"S O<AF*LDKSFK"R Sig!al ?doi!g a SERIF6 comma!d?: C1ec, s+! a) a!d se /ariables: Do 1e SERIF6: 1e LOADKSERIF6K

THE ?"ER@E? CO""AND S6NTAX ROUTINE T1e s+! a) is 1a!dled b+ EXFTK%R"S "ER@E ro$ i!e belo7: =<A< =<AC "R@KS6N SET CALL

1e ro$ i!e co! i!$es i! o

J*AFLA@S4B =G=8*EX%TK%R"S

Sig!al ?doi!g a "ER@E comma!d?: C1ec, s+! a) a!d se /ariables:

THE >LOADKSERIF6K"ER@E? CO""ANDS ROUTINE T1e ac io! o be per.ormed depe!ds o! 1e s a e o. bi s L*J*G o. FLA@S4: T1e ?old? 1eader Is e)pec ed o be i! 1e HD area* a!d is immedia el+ ra!s.erred i! o 1e DKSTR3 area* 71ile 1e ?!e7? 1eader is loaded i! o 1e HD area: =<AF =<B3 =<BE =<B< =<BA =<BD =<BF =<C8 =<C4 =<CE =<C< =<CB =<CD =<D= =<D4 TSKLKNET TSKLKRS LDKSFK"R LD LD LD LDIR LD C% CR C% CR CALL CALL CR CALL CALL LD A*ALKSTR8B NLE 9*=<CD*TSKLKNET NL3 9*=<D4*TSKLKRS =J<E*TESTK"NA" 8E<=*FK"KHEAD =<F3*TESTKT6%E =J<F*TESTKSTAT =EAD*O%KTE"%KN HL*NECEJ HL*NECEJ DE*NECDE BC*N===G S ar o. HD area: S ar o. DKSTR3 area: T1ere are ?G? b+ es o be copied AHDK88 is !o a..ec edB: Cop+ 1e ?old? 1eader i! o 1e DKSTR3 area: Fe c1 c1a!!el speci.ier: C$mp i. !e 7or, is bei!g $sed: C$mp i. RS343 li!, is bei!g $sed: C1ec, >"> parame ers: Fe c1 .irs !i!e b+ es .rom car ridge a!d s ore i! o HD area: C$mp .or7ard: C1ec, s a io! !$mber: Ope! a emporar+ >N> c1a!!el: S ar o. HD area:

=<DJ =<D< =<DD =<DA =<DD =<E= =<E4 =<EE =<EG =<EA =<EC =<ED =<EE =<EF =<F= =<F3 =<FE =<FJ =<FD =<FA =<FC =<FE =D==

LD LDKHEADER %USH %USH BIT CR LDKHDKNET CALL CR CR LDKHDKRS CALL CR LDKHDRK3 %O% %O% LD INC DCN9 TESTKT6%E LD LD LD C% CR C% CR CR +pe?

B*N=D HL BC 4*AFLA@S4B 9*=<EG*LDKHDKRS =D83*NCHANKIN NC*=<E=*LDKHDKNET =<EC*LDKHDRK3 =B<8*BCHANKIN NC*=<EG*LDKHDKRS BC HL AHLB*A HL =<D<*LDKHEADER A*AECDEB B*A A*AHDK==B B N9*=D=3*NRE%ORTKN N=4 9*=D88*TKHKCODE C*=D=L*TSTK"ER@E

Ni!e b+ es are !o7 e)pec ed: Sa/e HL a!d BC regis er pairs: C$mp i. $si!g RS343 li!,: Fe c1 a b+ e .rom >N> c1a!!el: Repea $! il 1e b+ e is accep able: C$mp .or7ard: Fe c1 a b+ e .rom RS343 li!,: Repea $! il 1e b+ e is accep able: Res ore regis ers: S ore 1e b+ e i! o 1e HO area: Ad/a!ce 1e poi! er: @o aro$!d 1e loop agai!: Fe c1 ?old? +pe .rom DKSTR3 area a!d s ore i! o B regis er: Fe c1 ?!e7? .ile +pe: Compare 7i 1 1e ?old? o!e: @i/e a! error i. i does !o ma c1: C$mp i. 1a!dli!g a bloc, o. b+ es: C$mp 7i 1 o 1er +pes Ab$ +pes grea er 1a! 4B: re.$se

?5ro!g .ile =D=3 =D=4 =D=L =D=< =D=A =D=E

NRE%ORTKN RST DEFB TSTK"ER@E BIT CR BIT C%

3=*SHKERR N8J J*AFLA@S4B N9*=DJG*"ER@EKBLK G*AFLA@S4B 9*=DA4*LDK%RKAR

Call 1e error 1a!dli!g ro$ i!e: C$mp i. doi!g a "ER@E: C$mp i. !o doi!g a SERIF6 Ai:e: doi!g a LOADB:

No7 deal 7i 1 loadi!g o. .iles o. o. all .ile +pes: =D88 =D8E TK"KCODE BIT CR

+pe 4 Ai:e: CODE a!d SCREENSB* or /eri.+i!g Allo7 .or 1e loadi!g or /eri.+i!g* b$ !o .or 1e mergei!g o. a ?CODE? bloc,: Call 1e error 1a!dli!g ro$ i!e: @e ?old? le!g 1 .rom DKSTR3: @e ?!e7? le!g 1: C$mp .or7ard i. ?old? le!g 1 is = Ai:e: !o speci.ied i! 1e comma!dB: Accep 1e ?old? le!g 1 i. i is grea er 1a! or e;$al o 1e ?!e7? o!e: B$ gi/e a! error i. a emp i!g o LOAD or SERIF6 a larger bloc, 1a! 1as bee! re;$es ed: Call 1e error 1a!dli!g ro$ i!e:

J*AFLA@S4B 9*=D8D*LDKBLOCK

?"ER@E error? =D8G =D8< =D8D =D8C =D3= =D38 =D33 =D3L =D3J =D3< =D3C ?CODE error? =D3E =D3F RST DEFB 3=*SHKERR N84 LDKBLOCK RST DEFB LD LD LD OR CR SBC CR BIT CR 3=*SHKERR N8L HL*ANECDFB DE*AHDK=BB A*H L 9*=D43*LDKBLKK3 HL*DE NC*=D43*LDKBLKK3 L*AFLA@S4B 9*=D4=*NRE%ORTKL

?Seri.ica io! 1as .ailed?

=D4= =D48 =D43 =D4E =D4< =D4A =D4C =D4F =DL8 =DLE =DLG =DLA =DLC =DLE =DE8 =DE3 =DE4 =DEL =DEJ =DED =DEC =DED =DEF =DJ3 =DJE

NRE%ORTKL RST DEFB LDKBLKK3 LD LD C% CR LD CR BIT CR LD C% CR LD ADD LD OR CR LD LD AND CR LD

3=*SHKERR N8E HL*AECE8B A*AIXNLB NCD N9*=DL8*LDKBLK8 HL*AECELB =DE3*LDKBLKL 4*AFLA@S4B 9*=DE3*LDKBLKKL A*AHDK==B N=4 9*=DE3*LDKBLKKL BC*N=8lL HL*BC A*H L N9*=DED*LDKBLKKE HL*AHDK=DB A*AHDK==B A N9*=DJ3*LDWNOK%@" HL*A%RO@B =AEC*LSKAN6 =D<<*TSTK"RK"

Call 1e error 1a!dli!g ro$ i!e: @e ?old? s ar .rom DKSTR3: Fe c1 speci.ier .rom 1e c1a!!el area: C$mp i. !o >">N<=* i:e: !o a emporar+ >"> c1a!!el: B$ i. 1e >"> c1a!!el is bei!g $sed* 1e ?s ar ? 1as bee! s ored i! o NECEL Asee N8E<4B: C$mp .or7ard: C$mp i. !o $si!g 1e !e 7or,: C$mp i. i is a bloc, o. b+ es:

LDKBLKK4

LDKBLKKL

O 1er7ise 1e da a 1as bee! mo/ed $p b+ ?3GJ? b+ es a. er 1e i!ser io! o. 1e >N> c1a!!el: Use ?old? s ar i. i 1as bee! speci.ied i! 1e comma!d* o 1er7ise $se ?!e7? s ar : Use 1e ?s ar ? i! HL .or o 1er 1a! ?program?: +pes

LDKBLKKE

LDKNOK%@" CALL CR

B$ 7i 1 ?program? +pe* 1e ?s ar ? is poi! ed b+ %RO@: Do 1e ac $al LOADi!g or SERIF6i!g: C$mp .or7ard o close 1e c1a!!el $sed:

No7 co!sider =DJG =DJA =DJC =DJE =DG8 =DG3 =DG4 =DGG =DG< =DGD =DGA =DGC =DGE =DGF =D<= =D<8 =D<L =D<E =D<J =D<< =D<B =D<D =D<F =DD3 TSTK"RK"

1e "ER@Ei!g o. a program: A*AHDK88K1iB NC= N9*=DG4*NOKAUTOST 8GBD*RCLKTKCH 3=*SHKERR N8L BC*AHDK=BB BC BC 8=*CALBAS N==4= AHLB*N<= DE*HL DE HL =AEC*LSKAN6 HL 8=*CALBAS N=<CE A*AIXNLB NCD N9*=DDL*TSTK"RKN 83AD*CLOSEK"3 =DA=*"ER@EKEND Co! i!$e o!l+ i. 1e co! e! o. HDK88 is s$..icie! l+ 1ig1* i:e: i. 1e program 7as !o sa/ed 7i 1 ?a$ os ar ? O 1er7ise reclaim c1a!!els a!d gi/e a ?"ER@E error?: Fe c1 ?le!g 1? o. program o be merged a!d sa/e i : Allo7s .or a .$r 1er loca io! o i!ser 1e ?e!d mar,er?: Call BCKS%ACES o ma,e 1e re;$ired room i! 7or,space: "ar, 1e e!d o. 1e space: HL !o7 poi! s o 1e s ar o. 1e space crea ed: Res ore le!g 1 o. program: Sa/e ?s ar ? poi! er: Load 1e program i! 1e 7or,space: Res ore ?s ar ? poi! er: Do 1e mergei!g 7i 1 1e e)is i!g program b+ e! eri!g i! o 1e mai! RO" ?"ER@E? co! rol ro$ i!e: C$mp i. 1e speci.ier is !o >">N<= i:e: i. o 1er 1a! >"> c1a!!el 1as bee! $sed: Close 1e >"> c1a!!el: C$mp .or7ard:

"ER@EKBLK LD AND CR CALL RST DEFB NOKAUTOST LD %USH INC RST DEF5 LD EX %O% %USH CALL %O% RST DEF5 LD C% CR CALL CR

=DDL TSTK"RKN =DD< =DDA =DDD =DA= "ER@EKEND

BIT CR CALL CALL C%

4*AFLA@S4B 9*=DA=*"ER@EKEND =EFE*SENDKNEOF 8GBD*RCLKTKCH =EC8*END8

E)i immedia el+ i. 1e >B> o$ p$ 1as bee! $sed: 51+H Reclaim 1e c1a!!el: Fi!is1ed: 1e LOADI!g o. a program or a! arra+:

T1e .i!al bra!c1 o. =DA4 =DAG =DAA =DAB =DAC =DAD =DAF =DB= =DB8 =DB3 =DBL =DBE =DB< =DBD =DBA =DBC =DBE =DC8 =DC3 =DC4 =DCL =DCE =DCG =DC< =DCB =DCC =DCE =DCF =DD= =DD3 =DDE =DDG =DDD =DDC =DDE =DE3 =DEL =DEG =DE< =DED =DEA =DEB =DEC =DED =DEE =DEF =DF= TKLDKNET LDK%RKAR LD LD %USH LD OR CR INC INC INC EX CR LD

1e ro$ i!e deals 7i 1 DE*AHDK=BB HL*AECE8B HL A*H L N9*=DBE*LDK%RO@ DE DE DE DE*HL =DBE*TSTKS%ACE HL*AECDFB DE*HL HL*DE C*=DCG*TSTKT6%E DE*N===E HL*DE B*H C*L 8=*CALBAS N8F=E HL A*AHDK==B A 9*=A8E*SETK%RO@ A*H L 9*=DF4*CRTKNE5 A*AIXNLB NCD N9*=DDE*TKLDKNET HL*AECELB =DE<*RCL"KOLD 4*AFLA@S4B 9*=DE<*RCL"KOLD DE*N=88L HL*DE HL B*AHLB HL C*AHLB HL BC BC BC 8=*CALBAS

Fe c1 ?!e7? le!g 1: Fe c1 ?old? s ar Ase o = 71e! loadi!g a ?!e7? arra+B: Sa/e i emporaril+: C$mp i. !o a ?!e7? arra+: I!creme! ?le!g 1? b+ 4* i:e: allo7s .or 1e i!ser io! o. arra+ !ame a!d 7oKb+ e le!g 1: "o/e ?le!g 1? i! o HL: C$mp .or7ard: Fe c1 ?old? le!g 1 Ai:e: le!g 1 o. e)is i!g program or arra+B .rom DKSTR3 area: HL 1olds 1e ?!e7? le!g 1: C$mp .or7ard i. 1e program Aor arra+B bei!g loaded is !o lo!ger 1a! 1e e)is i!g o!e: O 1er7ise a c1ec, m$s be made o e!s$re 1a 1ere is s$..icie! space i! memor+ .or 1e program Aor arra+B o be loaded* 7i 1 a call o mai! RO" ?TESTKROO"? s$bro$ i!e: Res ore ?old? s ar AN==== 71e! 1a!dli!g a ?!e7? arra+B: C$mp i. ? +pe? i!dica es a BASIC program AN==B: C$mp $!less a! ?old? arra+ is o be erased be.ore loadi!g 1e ?!e7? o!e: I. 1e c1a!!el speci.ier de!o es o 1er 1a! emporar+ >"> c1a!!els Ai:e: >">N<=HB* 1e ?s ar ? is alread+ 1eld i! HL: O 1er7ise 1e s ar address o. 1e arra+ is .e c1ed .rom DKSTR3 area: C$mp i. $si!g 1e E8E343 li!,:

LDK%RO@

EX SCF SBC CR TSTKS%ACE LD ADD LD LD RST DEF5 TSTKT6%E %O% LD AND CR LD OR CR LD C% CR LD CR BIT CR LD ADD DEC LD DEC LD DEC INC INC INC RST

RCL"KOLD

O 1er7ise 1e arra+ 1as bee! mo/ed ?3GJ? b+ es $p a. er 1e i!ser io! o. >N> c1a!!el: %oi! s o 1e 1ig1 b+ e o. ?arra+ le!g 1?: Fe c1 1ig1 b+ e: %oi! s o 1e lo7 b+ e: Fe c1 lo7 b+ e: %oi! s o 1e arra+ !ame: I!cl$de ?le!g 1? a!d ?!ame? i! 1e arra+ le!g 1: Call RECLAI"K3 o dele e 1e arra+:

=DF8 =DF4 =DFJ =DFG =DFB =DFC =DFD =DFE =DFF =A=3 =A=4 =A=L =A=J =A=G =A=< =A=D =A=A =A=B =A=C =A=D =A=E =A=F =A83

CRTKNE5

DEF5 LD DEC LD %USH INC INC INC LD %USH RST DEF5 INC %O% LD %O% INC LD INC LD INC

N8DE< HL*AEKLINEB HL BC*AHDK=BB BC BC BC BC A*AECE4B AF 8=*CALBAS N8JEE HL AF AHLB*A DE HL AHLB*E HL AHLB*D HL =AEC*LSKAN6 =D<<*TSTK"RK"

%oi! s

1e e!d o. /ariables area:

Fe c1 1e le!g 1 o. 1e arra+ o be loaded: Sa/e i : I!cl$de i! 1e le!g 1 o!e b+ e .or arra+ !ame a!d 7o .or ?le!g 1 o. arra+ Fe c1 arra+ !ame .rom DKSTR3 area: Sa/e i brie.l+: Call "AKEKROO" o crea e 1e space .or 1e arra+: %oi! s o 1e .irs ?!e7? loca io! i!ser ed: Res ore arra+ !ame a!d s ore i! o 1e 8s loca io!: Fe c1 ?arra+ le!g 1?: S ore i i! o 1e .ollo7i!g 7o loca io!s: T1e arra+ 7ill be loaded .rom 1is loca io!: Load arra+ or BASIC program: C$mp bac, o close 1e c1a!!el: o be cres ed a!d some

ENDKLDK%R CALL C%

I. 1e .ile loaded is a program* ac io!s o be per.ormed: =A8E =A8D =A8D =A3= =A38 =A33 =A3L =A3< =A3B =A3C =A3E =A3F =A44 =A4L =A4G =A4A =A4B =A4D =A4F =AL4 =ALJ =ALG =ALA =ALE =AE8 =AEE =AEJ =AED =AEA SETK%RO@ RES LD LD DEC RST DEF5 LD LD RST DEF5 INC LD ADD LD LD LD AND CR SET LD LD LD LD LD LD DEC LD INC CR

1e space re;$ired is

NOKAUTO

8*AFLA@S4B DE*A%RO@B HL*AEKLINEB HL 8=*CALBAS N8DEE BC*AHDK=BB HL*A%RO@B 8=*CALBAS N8JEE HL BC*AHDK=FB HL*BC ASARSB*HL A*AHDK88K1iB H*A NC= N9*=ALE*NOKAUTO 8*AFLA@S4B A*AHDK88KloB L*A ANE5%%CB*HL ANS%%CB*N== HL*A%RO@B DE*AHDK=BB HL ADATADDB*HL HL =A=F*ENDKLDK%R

Sig!al ?!o a$ os ar ? Fe c1 s ar o. e)is i!g program: Fe c1 e!d o. e)is i!g program: Call RECLAI"K8 i! 1e mai! RO" o dele e 1e program: Fe c1 le!g 1 o. program a!d /ariables: Fe c1 s ar address o. program: Call "AKEKROO" o crea e 1e re;$ired space: %oi! s o 1e .irs loca io!: Fe c1 program le!g 1: Calc$la e a!d s ore 1e s ar o. /ariables area: T1is is se o NFF 71e! !o a$ os ar is re;$ired: C$mp 7i 1 ?!o a$ os ar ?: Sig!al ?a$ os ar ? Asee N==LDB: Fe c1 lo7 b+ e o. a$ os ar li!e !$mber: S ore a$ os ar li!e !o: Clear NS%%C o sig!al ?F$mp?: Fe c1 s ar address o. program area: Fe c1 program le!g 1: "a,e DATADD poi! o 1e las b+ e o. 1e CHANS area: Bala!ce 1e DEC abo/e: C$mp bac, o LOAD 1e !e7 program:

THE ?LOAD OR SERIF6? SUBROUTINE T1is s$bro$ i!e is $sed o LOAD or SERIF6 Adepe!di!g $po! 1e s a e o. bi G o. FLA@S4 s+s em /ariableB a bloc, o. b+ es: I m$s be e! ered 7i 1 1e ?s ar ?

a!d 1e ?le!g 1? i! properl+ se : =AEC =AED =AEE =AEF =AJ3 =AJL =AJJ =AJD =AJA =AJB =AJC =AG= =AG3 =AGE =AGG =AGD =AGC =AGE =AGF =A<= =A<8 =A<E =A<G LSKAN6 LD OR RET LD C% CR CALL RET %USH %USH BIT CR CALL CR CR CALL CR %O% DEC %O% BIT CR LD CR C% CR

1e HL a!d DE regis er pairs* a!d 7i 1 all s+s em /ariables A*D E 9 A*AIXNLB NCD N9*=AJA*LSKBN 8EAD*LSK"CH HL DE 4*AFLA@S4B 9*=AGD*LSKB =D83*NCHANKIN NC*=AG3*LSKN =AGE*LSKBNKE =B<8*BCHANKIN NC*=AGD*LSKB DE DE HL G*AFLA@S4B N9*=A<A*SRKBN AHLB*A =A<F*LSBNKEND AHLB 9*=A<F*LSBNKEND Re $r! i. ?le!g 1? is Xero: Fe c1 c1a!!el speci.ier a!d F$mp i. 1a!dli!g 7i 1 RS343 or !e 7or,: LOAD or SERIF6 .rom "icrodri/e: Fi!is1ed: Sa/e ?s ar ? a!d ?le!g 1?: C$mp i. RS343 li!, is bei!g $sed: Fe c1 a b+ e b+ $si!g 1e >N> c1a!!el I!p$ ro$ i!e: C$mp .or7ard: Fe c1 a b+ e b+ $si!g 1e >B> c1a!!el i!p$ ro$ i!e: Res ore ?le!g 1? a!d decrease i : Res ore ?s ar ?: C$mp 71e! SERIF6IN@: T1e ac $al LOAD* i:e: s recei/ed b+ e: C$mp .or7ard: T1e ac $al SERIF6* i:e: recei/ed b+ e 7i 1 1a memor+: Co! i!$e o!l+ i. 1e b+ ore 1e 1e

LSKBN

LSKN LSKB LSKBNKE

=A<< =A<A SRKBN =A<B

compare 1eld i!

es are e;$al:

?Seri.ica io! 1as .ailed? =A<D =A<E =A<F =AD= =AD8 =AD3 =ADL LSBNKEND RST DEFB INC LD OR CR RET 3=*SHKERR N8E HL A*E D N9*=AJA*LSKBN Call 1e error 1a!dli!g ro$ i!e: "o/e ?s ar ? o! o address 1e !e) loca io!: Repea $! il ?le!g 1? 1as reac1ed =: Fi!is1ed:

THE ?LOAD >RUN> %RO@RA"? ROUTINE Firs 1e /ario$s s+s em /ariables are properl+ se * 1e! a !i!eKb+ e 1eader is .e c1ed .rom 1e .irs record o. 1e program called ?r$!?: T1e ro$ i!e co! i!$es i! o 1e middle o. 1e LOADWSERIF6K"ER@E comma!ds ro$ i!e: =ADE =AD< =ADC =ADF =AA4 =AAJ =AAA =AAE =AB8 =ABL =ABG =ABA LOADKRUN LD LD LD LD LD LD SET CALL LD LD LD LDIR BC*N===8 ADKSTR8B*BC BC*N===4 ANKSTR8B*BC BC*N=ACJ ANKSTR8N3B*BC L*AFLA@S4B =GE4*%RO@ HL*NECEJ DE*NECDE BC*N===D Load .rom dri/e 8: T1e .ile!ame ?r$!? is 1ree c1arac ers i! le!g 1: T1e .ile!ame is s ored .rom 1is loca io!: Sig!al ?loadi!g?: Se HD /ariablea as re;$ired: Cop+ ?old? 1eader i! o DKSTR3 area: Clear 1e ?F$mp? sig!al se b+ $si!g

=ABC =AC= =AC4 =ACJ

SET CALL C% DEF"

G*ANS%%CB 8E<=*FK"KHEAD =<F3*TESTKT6%E >r$!>

1e RUN comma!d: Load 1e ?!e7? DKb+ e 1eader: C$mp bac, i! 1e middle o. 1e LOADKSERIF6K"ER@E comma!ds ro$ i!e: T1e ?r$!? .ile!ame:

T1e RSK343 li!, ro$ i!es THE ?SET T1is ro$ /ariable 1e BAUD ?FOR"AT? =ACD =ACD =AD= =AD8 =AD3 =AD4 =ADL =ADE =ADJ =AD< =ADA =ADB =ADD =ADF =AE= =AE8 =AE3 =AEL =AEE =AEJ =AEG =AE< =AEC >BAUD> S6STE" SARIABLE? ROUTINE i!e is e! ered 7i 1 a ba$d ra e i! 1e ra!ge =: :JEE4L i! 1e s+s em DKSTR8: I ro$!ds 1e /al$e o 1e !eares ?s a!dard? /al$e a!d se s s+s em /ariable 7i 1 1e appropria e imi!g co!s a! : I is $sed b+ 1e comma!d ro$ i!e: BC*ADKSTR8B HL*N=AEF E*AHLB HL D*AHLB HL DE*HL A*H NL< NC*=AEL*ENDKSET A HL*BC NC*=AEL*ENDKSET DE*HL HL HL =AD=*NXTKENTR6 DE*HL E*AHLB HL D*AHLB ABAUDB*DE =EC8*END8 Fe c1 ba$d ra e: S ar o. RS343 imi!g co!s a! s able: Fe c1 a! e! r+ i! 1e DE regis er pair: %ass 1e /al$e o HL: Fe c1 1ig1 b+ e: C$mp i. 1e e!d o. 1e able 1as bee! reac1ed: C$mp also i. 1is /al$e is grea er 1a! or e;$al o 1e s$pplied o!e: Res ore 1e ?poi! er? i! HL: S,ip 1e co!s a! a!d F$mp bac, o e)ami!e 1e !e) able e! r+: Res ore 1e poi! er i! HL: Fe c1 1e imi!g co!s a! : S ore 1e co!s a! : Fi!is1ed:

SETKBAUD

LD LD NXTKENTR6 LD INC LD INC EX LD C% CR AND SBC CR EX INC INC CR ENDKSET EX LD INC LD LD C%

THE ?RS343 TI"IN@ CONSTANTS? TABLE T1e ?D? e! ries i! 1is able are 1e ?s a!dard? ba$d ra e /al$es A.rom GE o 8D3==B* eac1 o!e .ollo7ed b+ 1e ? imi!g co!s a! ? o be s ored i! 1e BAUD s+s em /ariable: =AEF =AF8 =AF4 =AFE =AFG =AFD =AFB =AFD =AFF =B=8 =B=4 =B=E =B=G =B=D =B=B =B=D =B=F =B88 DEF5 DEF5 DEF5 DEF5 DEF5 DEF5 DEF5 DEF5 DEF5 DEF5 DEF5 DEF5 DEF5 DEF5 DEF5 DEF5 DEF5 DEF5 N==43 N=A<3 N==JE N=LCE N=83C N=8BE N=3E< N==DE N=LB= N==JE N=DJ= N==4J N83C= N==8A N3E<= N===C NLB== N===E Firs ba$d ra eME= Ab$ is .or GE ba$dB: 3!d ba$d ra eM88=: Co!s a! .or 88= ba$d: 4rd ba$d ra eM4==: Co!s a! .or 4== ba$d: L 1 ba$d ra eMJ==: Co!s a! : E 1 ba$d ra eM83==: Co!s a! : J 1 ba$d ra eM3L==: Co!s a! : G 1 ba$d ra eML<==: Co!s a! : < 1 ba$d ra eMDJ==: Co!s a! : Las ba$d ra eMlD3==: Co!s a! : 1e co!s a!

THE ?O%EN RS343 CHANNEL IN CHANS AREA? SUBROUTINE T1is s$bro$ i!e ope!s a perma!e! >B> or >T> c1a!!el Adepe!di!g $po! 1e speci.ier 1eld i! LKSTR8B a 1e e!d o. 1e CHANS area: O! re $r!* 1e DE regis er pair 7ill 1old 1e s ar o. 1e c1a!!el: =B84 =B8J =B8G =B8A =B8B =B8C =B8E =B8F =B3= =B34 =B3L =B3G =B3A =B3C =B3D =B4= =B43 =B44 =B4L =B4G =B4< =B4B =B4C =B4D =B4E =B4F =BL3 =BL4 =BLL =BLE =BLJ O%KRSKCH LD DEC LD %USH RST DEF5 %O% %USH CALL %O% LD LD LDDR INC LD C% RET %USH LD ADD LD LD INC LD INC LD LD INC LD %O% RET HL*A%RO@B HL BC*N===B BC 8=*CALBAS N8JEE BC DE 8JD8*RESTKNKAD DE HL*N=BJE BC*N===B DE A*ALKSTR8B NL3 N9 DE HL*N===E HL*DE DE*N=CEA AHLB*E HL AHLB*D HL DE*N=BGE AHLB*E HL AHLB*D DE T1e s ar address o. 1e c1a!!el: T1e c1a!!el is ?88? b+ es i! le!g 1: Call "AKEKROO" o crea e 1e re;$ired space: Res ore ?le!g 1?: Sa/e address o. las b+ e i! 1e i!ser ed area: Res ore s ar address o. ?.ile!ame? i. i 1as bee! mo/ed $p a. er 1e i!ser io! o. 1e !e7 space: Res ore ?e!d o. c1a!!el? address: Las b+ e i! 1e >T> c1a!!el da a able: Le!g 1 o. 1e able: Cop+ 1e ?T? c1a!!el da a: %oi! o 1e 8s loca io! o. 1e c1a!!el: Fe c1 c1a!!el speci.ier: Re $r! i. 1e re;$es ed c1a!!el 7as !o 1e ?B? c1a!!el: Sa/e c1a!!el s ar address: %oi! o 1e ?s1ado7 RO" o$ p$ ro$ i!e? poi! er: 1e address o. 1e BCHAN0OUT ro$ i!e: S ore 1e lo7 b+ e: S ore 1e 1ig1 b+ e: %oi! o 1e ?s1ado7 RO" i!p$ ro$ i!e? poi! er: T1e address o. 1e B0IN%UT ro$ i!e* S ore 1e lo7 b+ e: S ore 1e 1ig1 b+ e: Res ore c1a!!el s ar Fi!is1ed: address:

THE ?ATTACH CHANNEL TO A STREA"? ROUTINE T1e e! r+ poi! is O%KRSCHAN i. 1e c1a!!el is >B> or >T>* o 1er7ise 1e ro$ i!e is e! ered a O%KSTREA" 7i 1 >N> c1a!!el A.rom =EAJB* 7i 1 DE 1oldi!g 1e c1a!!el s ar address: T1e correc displaceme! is calc$la ed .or 1e s ream 71ose !$mber is 1eld i! SKSTR8* a!d s ored i! 1e STR"S area: =BLG =BLA =BLD =BLE =BLF =BE= =BE3 =BE4 =BEJ =BED =BEA =BEB =BED O%KRSCHAN CALL O%KSTREA" LD DEC EX AND SBC EX LD LD RLCA LD LD ADD =Bl4*O%KRSKCH HL*ACHANSB HL DE*HL A HL*DE DE*HL HL*NEC8J A*ASKSTR8B C*A B*N== HL*BC Crea e 1e c1a!!el area: Calc$la e 1e displaceme! s ored i! STR"S: o be

%ass 1e displaceme! o DE: Loca io! i! STR"S .or s ream =: Fe c1 s ream !$mber a!d do$ble i : "o/e 1e o..se o 1e BC regis er pair: I!de) i! o 1e STR"S area:

=BEE =BEF =BJ= =BJ8

LD INC LD C%

AHLB*E HL AHLB*D =EC8*END8

S ore

1e displaceme! :

Fi!is1ed:

THE ?>T> CHANNEL DATA? TABLE T1e ?88? b+ es 1a composes a >T> RS343 c1a!!el are as .ollo7s' =BJL =BJJ =BJ< =BJD =BJB =BJD DEF5 DEF5 DEFB DEF5 DEF5 DEF5 N===< N===< NEL N=C4C N=BJF N===B "ai! RO" ?o$ p$ ? ro$ i!e: "ai! RO" ?i!p$ ? ro$ i!e: >T> Ac1a!!el speci.ierB: S1ado7 RO" ?o$ p$ ? ro$ i!e: S1ado7 RO" ?i!p$ ? ro$ i!e: Le!g 1 o. 1is c1a!!el: 1e ser/ice ro$ i!e is

THE ?>T> CHANNEL IN%UT? ROUTINE T1e ac $al ?i!p$ ? is 1a!dled b+ 1e CALLKIN% ro$ i!eI TCHANKIN belo7: =BJF =BG3 TKIN%UT LD C% HL*N=BGB =CBD*CALLKIN%

Address o. TCHANKIN ro$ i!e: C$mp .or7ard: 1e ser/ice

THE ?>B> CHANNEL IN%UT? ROUTINE As 7i 1 1e >T> c1a!!el* 1e ?i!p$ ? is 1a!dled b+ CALLKIN%I 1o7e/er ro$ i!e is BCHANKIN: =BGE =BG< BKIN%UT LD C% HL*N=B<8 =CBD*CALLKIN% Address o. BCHANKIN ro$ i!e: C$mp .or7ard: is 1a 1e mos

THE ?>T> CHANNEL IN%UT? SERSICE ROUTINE T1e o!l+ di..ere!ce i! respec o 1e >B> i!p$ o. 1e recei/ed c1arac er is al7a+s cleared: =BGB =BGE =B<= TCHANKIN CALL =B<8*BCHANKIN RES G*A RET

sig!i.ica!

bi

Use 1e >B> c1a!!el i!p$ ser/ice ro$ i!e: Accep o!l+ codes i! 1e ra!ge N==::: NGF AASCII G bi B: Fi!is1ed:

THE ?>B> CHANNEL IN%UT? SERSICE ROUTINE T1is s$bro$ i!e is also called b+ $si!g 1e 1oo, code N8DI i al7a+s re $r!s carr+ se i. a! accep able b+ e 1as bee! read i! 1e A regis er .rom 1e RS343 li!,* or Xero .lag se 71e! !o b+ e 1as bee! read: =B<8 =B<L =B<E =B<J =B<< =B<A =B<B =B<C =B<D =B<E =BD= =BD3 =BD4 =BDE =BDD =BDA =BDB =BDE =BA= BCHANKIN LD LD AND CR LD INC LD SCF RET LD IN RRCA CR LD RST DI LD OUT LD HL*NECCG A*AHLB A 9*=B<E*RECKB6TE AHLB*N== HL A*AHLB A*NGF A*ANFEB C*=BDA*RECK%ROC AERRKNRB*N8L 3<*RO"ERR A*AIOBORDB ANFEB*A DE*ABAUDB Fe c1 co! e! s o. SERKFLKlo s+s em /ariable: %roceed i! recei/i!g 1e b+ e i. i 1olds Xero: O 1er7ise clear SERKFLKlo a!d .e c1 1e b+ e .rom SERKFLK1i: Sig!al ?accep able code?: Read por NGFFE:

RECKB6TE

RECK%ROC

Ro a e bi = i! o carr+: C$mp i. S%ACE !o bei!g pressed: O 1er7ise gi/e 1e ?Brea, i! o program? error repor : Disable i! err$p s: Fe c1 !e7 border colo$r: C1a!ge border colo$r: Fe c1 imi!g co!s a! :

=BAL =BAG =BA< =BAD =BAB =BAD =BAF

LD LD LD SRL RR LD OUT

HL*N=43= B*D C*E B C A*NFE ANEFB*A

Repea ?<==? imes 1e es : Cop+ imi!g co!s a! i! o 1e BC regis er pair: "a,e BC 1old Aco!s a! P3B: "a,e 1ig1 1e CTS li!e:

No7 a loop is e! ered o c1ec, i. a ?s ar bi ? is .o$!d .rom 1e TXda a li!e: A ?s ar bi ? is de ec ed i. 1e TXda a li!e is 1ig1 .or a leas ?GG? T c+cles: I. a. er abo$ 3E ms !o ?s ar bi ? is .o$!d* 1e ro$ i!e co! i!$es .or7ard: =BB8 =BB4 =BBL =BBJ =BB< =BBD =BBB =BBD =BBE =BC= =BC3 =BC4 =BCE =BCJ =BCG =BC< =BCA =BCB =BCD =BCF READKRS IN RLCA CR IN RLCA CR IN RLCA CR IN RLCA CR A*ANFGB NC*=BCE*TSTKA@AIN A*ANFGB NC*=BCE*TSTKA@AIN A*ANFGB NC*=BCE*TSTKA@AIN A*ANFGB C*=BD8*STARTKBIT HL A*H L N9*=BB8*READKRS AF A*NEE ANEFB*A =BF=*5AITK8 C$mp i. 1e begi!!i!g o. a ?s ar bi ? is .o$!d: Decrease 1e co$! er: Repea 1e es $! il 1e co$! er reac1es Xero: Sa/e Xero .lag se : "a,e 1e CTS li!e lo7 agai!: C$mp .or7ard o repea 1e es : Read TXda a li!e: S1i. s a e i! o carr+: C$mp i. 1e li!e 1as a lo7 le/el: Repea 1e es 1ree imes* i:e: ma,e s$re 1a TXda a is s ill 1ig1 a. er GG T c+cles*

TSTKA@AIN DEC LD OR CR %USH LD OUT CR

T1is loop is $sed o read 1e eig1 da a bi s 1a .ollo7s 1e ?s ar ? bi : Firs * a dela+ e;$al o AABAUDB(8:EB(3J T c+cles is e! ered* so 1e .irs readi!g is made a 1e middle o. 1e .irs da a bi : T1e se/e! s$bse;$e! readi!gs are separa ed b+ a dela+ o. ALGN3J(ABAUDBB T c+cles* 1a is 1e le!g 1 o. eac1 bi : =BD8 =BD3 =BD4 =BDE =BDJ =BDG =BD< =BDD =BDA =BDB =BDC =BDD =BDF =BE8 =BE4 =BEL =BEJ =BE< =BEA =BEC =BED STARTKBIT LD LD LD DEC DEC DEC SERIALKIN ADD NO% BDKDELA6 DEC LD OR CR ADD IN RLCA RR CR LD OUT LD C%L H*B L*C B*N<= HL HL HL HL*DE HL A*H C N9*=BDA*BDKDELA6 A*N== A*ANFGB B NC*=BD<*SERIALKIN A*NEE ANEFB*A A*B @e ABAUDP3B i! o HL:

Se a mar,er i! o bi G: Decrease HL 1ree imes* i:e: s1or 1e loop b+ G< T c+cles* bala!ci!g 1e ime spe! be.ore: Add ABAUDB o HL: 5ai L T c+cles: I!ser a dela+ A3J(BAUDB T c+cles i! le!g 1: 5ai G T c+cles: Read a bi : S1i. i i! o carr+ .lag* 1e! i! o 1e B regis er: Repea $! il 1e ?mar,er? is .o$!d Ai:e:* < bi s 1a/e bee! readB* "a,e 1e CTS li!e 1a/i!g a lo7 le/el: Fe c1 1e recei/ed b+ e: Compleme! i A 1e bi s are se! i!/er ed 1ro$g1 1e RS343 li!,B:

=BEE =BEF =BF= =BF8 =BF3 =BF4 =BFL =BFJ =BFG =BF<

5AITK8 5AITK3

SCF %USH ADD DEC LD OR CR ADD ADD ADD

AF HL*DE HL A*H L N9*=BF8*5AITK3 HL*DE HL*DE HL*DE

Sig!al ?accep able codes? 71e! e)i : Sa/e 1e b+ e a!d carr+ .lag: "a,e HL 1old ABAUDB: 5ai $! il 1e .irs s op bi is .i!is1ed:

HL !o7 1olds ABAUDB(4:

No7 a loop similar o 1a a =BB8 is e! ered: I. 1e TXda a li!e is .o$!d 1ig1 .or a leas GG T c+cles* 1e ?se!di!g? de/ice is se!di!g 1e ?s ar ? bi .or a seco!d b+ e* e/e! i. 1e CTS li!e 1as a lo7 sig!al le/el: T1is b+ e is o be read a!d s ored i! o SERKFL: =BFD =BFA =BFB =BFC =BFE =C=< =C=8 =C=4 =C=E =C=J =C=< =C=A =C=B =C=D =C=E =C8= =C83 =C84 =C8L =C8J TKFURTHER DEC LD OR CR IN RLCA CR IN RLCA CR IN RLCA CR IN RLCA CR LD LD SRL RR HL A*L H 9*=C4J*ENDKRSKIN A*ANFGB NC*=BFD*TKFURTHER A*ANFGB NC*=BFD*TKFURTHER A*ANFGB NC*=BFD*TKFURT"ER A*ANFGB NC*=BFD*TKFURTHER H*D L*E H L 1e same as Fe c1 imi!g co!s a! i! o HL: Decrease co$! er: Repea es $! il i 1as reac1ed =:

E)i i. 1ere is !o .$r 1er b+ e o be recei/ed: Read TXda a li!e: S1i. recei/ed bi i! o carr+: C$mp bac, 7i 1 TXda s lo7: O 1er7ise repea 1e es 1ree imes o e!s$re 1a TXda a is s ill 1ig1 a. er GG T c+cles*

Calc$la e ABAUDBP3 i! o HL: 1e+ are

T1e !e) i!s r$c io!s are !o comme! ed: =C8< =C8A =C8B =C8C =C8D =C8E =C8F =C3= =C38 =C33 =C3L =C3J =C3< =C3D =C3B LD DEC DEC DEC SERKINK3 ADD NO% BDKDELA63 DEC LD OR CR ADD IN RLCA RR CR

1ose s ored .rom =BD4 abo/e* so

B*N== HL HL HL HL*DE HL A*H L N9*=C8F*BDKDELA63 A*N== A*ANFGB B NC*=C8D*SERKINK3 1e .irs o!e

Fi!all+* 1e las b+ e recei/ed is s ored i! o SERKFL* a!d re $r!ed i! o 1e A regis er: =C3D =C4= LD LD HL*NECCG AHLB*N=8

%oi! s o SERKFLKlo Se i o N=8* i!dica i!g 1a SERKFLK1i 1olds a /alid b+ e:

=C43 =C44 =C4L =C4E =C4J =C4D =C4A =C4B

INC LD C%L LD ENDKRSKIN CALL %O% EI RET

HL A*B AHLB*A =CAD*BORDREST AF

%oi! s o SERKFLK1i: Fe c1 1e recei/ed b+ e: Compleme! i a!d s ore i! o SERKFLK1i: Res ore border colo$r: Res ore .irs b+ e a!d .lags: E!able i! err$p s: Fi!is1ed:

THE ?>T> CHANNEL OUT%UT? ROUTINE T1e > > c1a!!el o$ p$ i!/ol/es 1e ?se!di!g? o/er 1e RS343 li!, o. 1e c1arac er 1eld i! o 1e A regis er* pro/ided 1a i is 7i 1i! 1e ra!ge N3=:::NGF: C1arac ers .rom N<= o NAL are se! as ?H?* 71ile o,e!s are deK o,e!ised: Codes lo7er 1a! N3= are ig!ored* e)cep .or N=D 1a se!ds bo 1 CR a!d LF codes: T1e ro$ i!e $!.or $!a el+ co! ai!s a mis a,e as i does !o s$ppress 1e ?leadi!g space? .lag Abi = o. FLA@SB as re;$ired: T1e res$l is 1a 71e! se!di!g 7o o,e!s Ai:e:* THEN @OTOB* 7o spaces are i!ser ed be 7ee! 1em* i!s ead o. o!e: T1e correc ro$ i!e s1o$ld i!cl$de 1e .ollo7i!g 7o i!s r$c io!s a. er 1e .i!al ?RET C?' ?CR N9*BCHANKOUT? a!d ?SET =*AFLA@SB?* a!d a ?RES =*AFLA@SB? be.ore 1e ?C% NGF?: =C4C =C4E =CL= =CL3 =CL4 =CLE =CLJ =CL< =CLA =CLC =CLE =CE= =CE4 =CEE =CEG =CED TCHANKOUT CF CR SUB RST DEF5 RET NOTKTOKEN C% CR LD NOTK@RA%H C% CR CALL LD CALL NOTKCR C% RET NAE C*=CLJ*NOTKTOKEN NAE 8=*CALBAS N=C8= NGF C*=CLC*NOTK@RA%H A*N4F N=D N9*=CEG*NOTKCR =CEA*BCHANKOUT A*N=A =CEA*BCHANKOUT N3= C C$mp i. 1e code is !o a o,e! code:

Red$ce ra!ge o. o,e!* a!d de o,e!ise i b+ calli!g rec$rsi/el+ 1is ro$ i!e /ia mai! RO" ?%OKTOKENS? ro$ i!e: C$mp i. 1e c1arac er is !o a grap1ic c1arac er: O 1er7ise se!d a ?H?: Is 1e code ?ENTER?H C$mp i. !o : O 1er7ise se!d 1e CR code: Follo7 i 7i 1 a li!e.eed code: Ig!ore all codes lo7er 1a! N3=* o 1er7ise $se BCHANKOUT belo7 o se!d 1e c1arac er:

THE ?>B> CHANNEL OUT%UT? ROUTINE T1e < bi s 1a .orms 1e b+ e 1eld i! 1e A regis er are se! i!/er ed 1ro$g1 1e RS343 li!,* a. er a! i!i ial ?s ar ? bi A1ig1B* a!d .ollo7ed b+ 7o ?s op? bi s Aor ra 1er a ?do$ble le!g 1? s op bi * 7i 1 lo7 sig!al le/elB: As 7i 1 ?b? c1a!!el i!p$ * 1e bi s 1a/e a .i)ed le!g 1* depe!di!g $po! 1e selec ed ba$d ra e: T1is s$bro$ i!e is also called b+ 1e ?1oo, code? N8E: =CEA =CEC =CED =CEE =CJ8 =CJ4 =CJE =CJG =CJ< =CJA =CJD =CJE =CJF =CG= =CGl =CG3 BCHANKOUT LD C%L LD LD OUT LD OUT C%L OUT LD LD LD BDKDELK8 DEC LD OR CR B*N=B C*A A*AIOBORDB ANFEB*A A*NEF ANEFB*A ANFGB*A HL*ABAUDB D*H E*L DE A*D E N9*=CJF*BDKDELK8 Co$! s ?88? bi s: I!/er 1e eig1 da a bi s: C 1olds 1e b+ e o be se! : Fe c1 !e7 border colo$r: C1a!ge border colo$r: Rese CTS a!d selec RS343: "a,e RXda a 1a/e a lo7 sig!al le/el: Fe c1 imi!g co!s a! : Cop+ i! o DE regis er pair: Firs l+ 7ai A3J(ABAUDBB T c+cles:

=CGL =CGJ =CG< =CGA =CGC =CGD =C<= =C<3 =C<L =C<J =C<G =C<< =C<A =C<C =C<D =C<E =C<F =CD= =CDl =CD4 =CDL =CDE =CDG =CDD =CDA =CDC =CDE =CA= =CA3 =CAL =CAE =CAJ =CAG

TESTKDTR

LD IN OR IN RRA C% IN AND CR SCF DI SERKOUTKL ADC OUT LD LD DEC LD OR CR DEC XOR SRL DCN9 DI LD LD LD OUT OUT DEC LD OR CR

A*NGF A*ANFEB NFE A*ANFEB NC*=CBL*BRKKINOUT A*ANEFB N=< 9*=CGL*TESTKDTR AN== ANFGB*A D*H E*L DE A*D E N9*=C<E*BDKDELK3 DE A C =C<<*SERKOUTKL A*N=8 C*NEF B*NEE ANFGB*A ACB*B HL A*L H N9*=CAL*BDKDELK4

Read por

NGFFE AS%ACE ,e+B:

Read por NFEFE ACA%S SHIFT ,e+B o!l+ i. S%ACE is bei!g pressed: Tes bi =: @i/e a! error i. BREAK is pressed: Read DTR li!e: O!l+ bi 4: C$mp bac, $! il DTR is .o$!d 1ig1: Se carr+ .lag As ar bi B: Disable i! err$p s: I! .ac * s1i. carr+ i! o bi = o. acc$m$la or: Se!d 1is bi o/er RS343 li!,: Cop+ imi!g co!s a! i! o DE: 5ai se! 3J(ABAUDB T c+cles a. er 1a/i!g eac1 bi :

BDKDELK3

5ai J T c+cles: Clear A .or !e) pass: S1i. 1e bi o be se! Loop .or all 88 bi s: E!able i! err$p s:

i! o carr+:

BDKDELK4

"a,e RXda a 1a/i!g a 1ig1 le/el: T$r! o.. RS343: I!ser a .i!al dela+ be.ore re $r!i!g /ia 1e borderKres ore ro$ i!e belo7:

THE ?BORDER COLOUR RESTORE? SUBROUTINE T1is s$bro$ i!e is $sed 71e!e/er 1e border colo$r 1as bee! c1a!ged o IOBORD d$ri!g a! IPO opera io!* a!d !eeds o be res ored o i s origi!al s a e: =CAD BORDKREST =CAC =CAE =CAF =CB= =CB8 =CB4 LD AND RRCA RRCA RRCA OUT RET A*ABORDCRB N4< Fe c1 lo7er scree! a rib$ e: O!l+ bi s 4*L*E* i:e: BORDER: Ro a e colo$r i! o bi s =*l*3: Res ore colo$r: Fi!is1ed:

ANFEB*A

THE ?BREAK INTO IPO O%ERATION? ROUTINE 51e!e/er BREAK is pressed d$ri!g a! IPO opera io!* 1e i! err$p s 1a/e o be e!abled* 1e border colo$r o be res ored a!d 1e error >BREAK i! o program> be gi/e!: =CBL =CBE =CB< =CBC BRKKINOUT EI CALL LD RST =CAD*BORDKREST AERRKNRB*NlL 3<*RO"ERR E!able i! err$p s: Res ore border colo$r: S ore error code a!d gi/e

1e error:

THE ?CALLKIN%? ROUTINE All i!p$ s .rom >B>* >T>* >N> a!d >"> c1a!!els are 1a!dled b+ loadi!g HL 7i 1 1e address o. 1e ser/ice ?i!p$ ? ro$ i!e .or 1e c1a!!el* a!d 1e! F$mpi!g o 1is ro$ i!e: T1e ro$ i!e 1a!dles bo 1 IN%UT a!d INKE6Q comma!ds re.erred o 1e ?!e7? c1a!!els:

=CBD =CC8 =CC3 =CCE =CCJ =CCG =CC< =CCD =CCC =CCE

CALLKIN%

RES %USH LD LD INC LD AND LD SBC CR

4*ATSFLA@B HL HL*AERRKS%B E*AHLB HL D*AHLB A HL*N8=GF HL*DE N9*=CFB*INKE6Q

?T1e mode is o be co!sidered as bei!g $!c1a!ged? Sa/e address o. 1e ser/ice ro$ i!e: %oi! s o 1e error address: Fe c1 lo7 b+ e o. error addres Fe c1 1ig1 b+ e: %repare .or a r$e s$b rac io!: T1is is EDKERROR: C$mp .or7ard i. !o d$ri!g a! IN%UT comma!d: o a! I! er.ace c1a!!el: Res ore address o. ser/ice ro$ i!e: Clear mac1i!e s ac,: Remo/e EDKERROR: T1e old /al$e o. ERRKS% is res ored: Sa/e address o. 1e ser/ice ro$ i!e: Re $r! address is IN%UTKEND belo7: C$mp o 1e ser/ice ro$ i!e:

No7 deal 7i 1 ?IN%UT 2? comma!d re.erred =CD= =CD8 =CDE =CDJ =CDG =CDB =CDC =CDF =CE= %O% LD %O% %O% LD %USH LD %USH C% HL S%*AERRKS%B DE DE AERRKS%B*DE HL DE*N=CE8 DE AHLB

INKA@AIN

51e! 1e c1arac er 1as bee! read .rom 1e re;$ired c1a!!el* a re $r! is made 1ere o add 1e c1arac er o 1e IN%UT li!e* or o re $r! i. 1e c1arac er is ENTER: =CE8 =CE4 =CEE =CED =CEA =CEB =CED =CEF =CF8 =CF3 =CFL =CFE =CFG =CF< IN%UTKEND CR CR ORE%ORTK< LD RST NOKREAD %O% CR ACCKCODE C% CR RST DEF5 %O% CR ENDKIN%UT %O% C% C*=CED*ACCKCODE 9*=CEA*NOKREAD AERRKNRB*N=G 3<*RO"ERR HL =CDB*INKA@AIN N=D 9*=CFG*ENDKIN%UT 8=*CALBAS N=F<E HL =CDB*INKA@AIN HL =G==*UN%A@E C$mp 7i 1 accep able codes: C$mp 7i 1 !o da a read: O 1er7ise repor 1e ?E!d o. .ile? error: Res ore address o. ser/ice ro$ i!e a!d r+ agai!: C$mp i. 1e code is ENTER: O 1er7ise 1e c1arac er is o be added o 1e IN%UT li!e K so e! er i! o 1e mai! RO" ?ADDKCHAR? s$bro$ i!e: Res ore address o. ser/ice ro$ i!e a!d read 1e !e) b+ e: Remo/e address o. ser/ice ro$ i!e: Re $r! o 1e mai! RO" calli!g ro$ i!e:

E! er 1ere =CFB =CFC =CFF =D== INKE6Q

o deal 7i 1 %O% LD %USH C%

1e INKE6Q .$!c io! Aa si!gle c1arac er is re $r!edB: Address o. ser/ice ro$ i!e: Re $r! address is INKQKEND belo7: C$mp o 1e ser/ice ro$ i!e:

HL DE*N=D=8 DE AHLB

A. er 1a/i!g read =D=8 =D=3 =D=4 =D=G =D=D =D=B INKQKEND

1e b+ e* a re $r! is made 1ere: C 9 L*AFLA@S4B 9*=CEE*ORE%ORTK< N=8 Re $r! 7i 1 accep able codes* or !o c1arac er read: @i/e 1e ?e!d o. .ile? error i. bi L o. FLA@S4 is rese : O 1er7ise 1e "OSE comma!d 1as bee! $sed K so re $r! 7i 1 carr+ a!d Xero .lags bo 1 rese :

RET RET BIT CR OR RET

T1e Ne 7or, ro$ i!es THE ?>N> CHANNEL IN%UT? ROUTINE T1e ac $al ?i!p$ ? is 1a!dled /ia ro$ i!e is NCHANKIN: =D=C =D=F NKIN%UT LD C% 1e CALLKIN% ro$ i!e abo/e: T1e ser/ice Address o. NCHANKIN ro$ i!e: C$mp o 1e co! rol ro$ i!e:

HL*N=D83 =CBD*CALLKIN%

THE ?>N> CHANNEL IN%UT? SERSICE ROUTINE T1e ac $al >!> i!p$ i!/ol/es 1e readi!g o. 1e b+ e .rom 1e !e 7or, b$..er: I. !o o 1er b+ es are .o$!d i! 1e b$..er* a .$r 1er da a bloc, is o be recei/ed Apro/ided 1a 1e ?c$rre! ? bloc, is !o 1e ?EOF? o!eB be.ore readi!g 1e b+ e: =D83 =D8J =D8D =D8A NCHANKIN LD LD AND CR IX*ACURCHLB A*ANCOBLB A 9*=D8E*TESTKBUFF Fe c1 s ar o. >!> c1a!!el: T1is 1olds = 71ile ?recei/i!g?: C$mp i. i is a >read> .ile:

?Readi!g a ?7ri e? .ile? =D8C =D8D =D8E =D38 =D33 =D3L =D3G =D3< =D3D =D3B =D3D =D3E =D48 =D44 =D4J =D4G RST DEFB TESTKBUFF LD AND CR LD DEC SUB CR LD INC LD ADD LD SCF RET 3=*SHKERR N=D A*ANCIBLB A 9*=D4<*TSTKNKEOF E*ANCCURB A E C*=D4<*TSTKNKEOF D*N== E ANCCURB*E IX*DE A*AIXN3=B Call 1e error 1a!dli!g ro$ i!e: Fe c1 !$mber o. b+ es o be read .rom 1e b$..er: I. NCIBL 1olds Xero* 1e! 1e b$..er is emp +: O 1er7ise .e c1 1e c$rre! posi io!: Decrease !$mber o. b+ es o be read .rom 1e b$..er: S$b rac posi io! .rom 1e res$l : C$mp i. all b+ es 1a/e bee! read: Clear D regis er: Upda e 1e c1arac er posi io!: %oi! s o ?b+ e o be read K 3=?: Read 1e b+ e: Carr+ is se o sig!al ?accep able b+ e?: Fi!is1ed: 1is da a bloc, is 1e las

I. !o da a is .o$!d i! o!e: =D4< =D4B =D4C =D4E TSTKNKEOF LD AND CR RET

1e b$..er* co!sider 71e 1er A*ANCT6%EB A 9*=D4F*@ETKNKBUF

Fe c1 pac,e +pe: C$mp i. pac,e +pe M =: I!dica i!g a !ormal pac,e : O 1er7ise re $r! 7i 1 bo 1 Xero a!d carr+ .lags rese o sig!al ?e!d o. .ile?: 1e c$rre! da a bloc, is !o 1e

A .$r 1er da a bloc, is ?EOF? o!e: =D4F =DL3 =DLL =DLE =DL< =DLA =DLD @ETKNKBUF LD OUT DI TR6KA@AIN CALL CR CALL CR

o be recei/ed i.

A*AIOBORDB ANFEB*A =F8E*5TKSCOUT NC*=DEF*TI"EKOUT =E8<*@ETKNBLK N9*=DEF*TI"EKOUT

Fe c1 !e7 border colo$r: C1a!ge border colo$r: Disable i! err$p s: 5ai .or a ?sco$ ? leader: C$mp i. ? ime o$ ? occ$rs: 5ai .or 1eader a!d da a bloc,: C$mp 7i 1 a!+ error:

=DLF =DE8 =DE4 =DEG =DEA =DED =DEF TI"EKOUT =DJ3 =DJ4 =DJE =DJJ =DJD =DJB

EI CALL LD LD LD CR LD AND CR DI CALL AND RET

=CAD*BORDKREST ANCCURB*N== A*ANTT6%EB ANCT6%EB*A =D8E*TESTKBUFF A*ANCIRISB A 9*=DLE*TR6KA@AIN =CAD*BORDKREST N==

E!able i! err$p s: Res ore border colo$r: T1e posi io! is =: Cop+ 1is b+ e o sig!al 1e pac,e +pe: Tr+ !o7 o .e c1 1e b+ e: Fe c1 des i!a io! s a io! !o: T1ere is !o ? imeKo$ ? 71e! broadcas i!g ANCIRISM=B: E!able i! err$p s: Res ore border colo$r: Re $r! 7i 1 Xero .lag se a!d carr+ rese * sig!alli!g 1a !o da a 1as bee! read:

THE ?>N> CHANNEL OUT%UT? ROUTINE T1e ro$ i!e 1a 1a!dles 1e >!> c1a!!el o$ p$ is ;$i e s raig1 .or7ard: I i!/ol/es 1e s ori!g o. 1e b+ e 1eld i! 1e A regis er i! o 1e 3EEKb+ e b$..erI 71e!e/er 1is is .illed* 1e s$bro$ i!e SK%ACKK8 is called* so 1e da a bloc, is se! o/er 1e !e 7or,: =DJC NCHANKOUT =DG= =DG8 =DGL =DGE =DGJ ?5ri i!g =DG< =DGD =DGA =DGD =DGE =D<= =DB8 =D<3 =D<E =D<J =D<< =D<B =D<D =D<F =DD3 LD LD LD AND LD CR IX*ACURCHLB B*A A*ANCIBLB A A*B 9*=DGA*TESTKOUT %oi! o s ar o. c1a!!el: Sa/e emporaril+ i! o B 1e b+ e o be se! : T1is 1olds = .or ?7ri e? c1a!!el: Se Xero .lag as re;$ired: Res ore 1e b+ e o be se! : Co! i!$e o!l+ i. $si!g a ?7ri e? c1a!!el ANCIBLM=B: Call 1e error 1a!dli!g ro$ i!e: Fe c1 le!g 1 o. o$ p$ b$..er: I!cl$de 1e c$rre! b+ e i! 1e le!g 1 co$! : C$mp $!less 1e b$..er is .illed: Sa/e 1e b+ e o be se! : Sig!al !ormal pac,e +pe: Se!d 1e pac,e : Res ore 1e b+ e o be se! : ?O!l+ 8 b+ e i! 1e b$..er?: S ore !e7 b$..er le!g 1: "a,e IX poi! o ?.irs .ree b+ e i! 1e b$..er K 3=B: S ore b+ e i! 1e b$..er: Fi!is1ed:

o a ?read? .ile? RST DEFB LD INC 3=*SHKERR N=C E*ANCOBLB E N9*=D<<*STKBFKLEN AF A =DAB*SK%ACKK8 AF E*N=8 ANCOBLB*E D*N== IX*DE AIXN3=B*A

TESTKOUT

CR %USH XOR CALL %O% LD STKBFKLEN LD LD ADD LD RET

THE ?OUTKBLKKN? SUBROUTINE T1is s$bro$ i!e calls 1e OUT%AK s$bro$ i!e o se!d o/er 1e !e 7or, 1e bloc, o. b+ es s ar i!g .rom AHLB* a!d 71ose le!g 1 is 1eld i! o 1e E regis er: T1e! a ?respo!se b+ e? is o be recei/ed i! o 1e NTRES% s+s em /ariable Apro/ided 1a +o$ are !o $si!g 1e broadcas B: T1e Xero .lag is re $r!ed rese i. !o respo!se b+ e 1as bee! recei/ed: T1is s$bro$ i!e is called .rom SENDK%ACK belo7 o se!d 1e 1eader a!d 1e! 1e da a bloc, o/er 1e !e 7or,: =DD4 =DDJ =DDD =DDA =DD4 =DDE =DA= OUTKBLKKN CALL LD AND RET LD LD LD =FCE*OUT%AK A*ANCIRISB A 9 HL*NECCD AHLB*N== E*N=8 Se!d 1e bloc,: T1is 1olds Xero 71e! broadcas i!g: Re $r! i. broadcas i!g: Address o. NTRES% s+s em /ariable: Firs clear NTRES%: A si!gle b+ e is o be recei/ed

=DA3 =DAE =DAJ =DAD =DAA

CALL RET LD DEC RET

=FD3*IN%AK N9 A*ANTRES%B A

i! o NTRESF: @e respo!se b+ e AN=8B: Re $r! 7i 1 Xero .lag rese i. 1e !e 7or, 7as i!ac i/e: No7 .e c1 1e respo!se b+ e: I m$s be N=8: Re $r! 7i 1 Xero .lag rese i. i is !o N=8:

THE ?SK%ACKK8? SUBROUTINE T1is s$bro$ i!e simpl+ calls SENDK%ACK belo7: I. broadcas i!g* a cer ai! dela+ is o be i!ser ed a. er 1a/i!g se! 1e pac,e : =DAB =DAE =DAF SK%ACKK8 CALL RET C% =DB3*SENDK%ACK N9 =E=F*BRKDELA6 Se!d 1e pac,e : Re $r! i. !o broadcas i!g: O 1er7ise e)i 1ro$g1 1e dela+ ro$ i!e:

THE ?SENDK%ACK? SUBROUTINE T1is s$bro$ i!e is also called b+ $si!g ?1oo, code? N4=: I se!ds o/er 1e !e 7or, a SCOUT leader* .ollo7ed b+ 1e 1eader a!d 1e da a bloc, .or 1e >!> c1a!!el poi! ed b+ 1e IX regis er: O! e! r+* 1e A regis er ma+ 1old N=8 or N== depe!di!g $po! 71e 1er 1e bloc, is 1e ?e!d o. .ile? o!e or !o : NCNU"B is i!creme! ed be.ore re $r!i!g: T1e Xero .lag is re $r!ed se i. 1e des i!a io! s a io! !$mber de!o es 1a 1e ?broadcas i!g? is bei!g $sed: =DB3 SENDK%ACK =DBE =DB< =DBB =DBD =DBF =DC= =DC4 No7 =DCL =DCE =DCJ =DCG =DCD =DCC =DCF =DD= LD LD LD OUT %USH %O% LD ADD 1e c1ec,s$m o. CHKS8 XOR ADD INC DCN9 LD LD ADD %USH ANCT6%EB*A B*ANCOBLB A*AIOBORDB ANFEB*A IX DE HL*N==8E HL*DE S ore pac,e +pe* i:e: N== .or !ormal* N=8 .or e!d o. .ile: Fe c1 bloc, le!g 1: Fe c1 !e7 border colo$r: "a,e DE poi! o 1e s ar o. 1e >!> c1a!!el: Add 1is o..se o poi! o 1e s ar o. 1e 3EEKb+ e b$..er:

1e da a bloc, is calc$la ed: A A*AHLB HL =DCE*CHKS8 ANCDCSB*A HL*N===B HL*DE HL Firs clear A regis er: Add 1is b+ e: %oi! o !e) loca io!: Repea .or all b+ es i! 1e bloc,: S ore 1e c1ec,s$m ob ai!ed: No7 poi! s o NCIRIS: Sa/e 1e poi! er:

T1e c1ec,s$m o. =DD8 =DD4 =DDL =DDE =DDJ =DD<

1e 1eader is calc$la ed: LD XOR ADD INC DCN9 LD B*N=G A A*AHLB HL =DDL*CHKS3 AHLB*A C1ec,s$m is .or G b+ es: Clear A regis er: Add 1is b+ e: %oi! o !e) loca io!: Repea .or all b+ es: S ore c1ec,s$m i! o NCHCS:

CHKS3

No7 1e SCOUT leader* .ollo7ed b+ 1e <Kb+ e 1eader* is se! * a!d a respo!se code is recei/ed Ai. !o broadcas i!gB: =DDD =DD, =DD= DI SENDSCOUT CALL DFb8*SENDKSC %O% HL Disable i! err$p s: Se!d 1e SCOUT Ai:e: a leader .ollo7ed b+ s a io! !$mberB: Res ore poi! er o NCIEIS*

=DD8 =DD8 =DE8 =DEL =DEJ =DE< =DED =DEC =DED =DF= =DF8 =DF3 =DFL =DFJ No7 =DF< =DF< =DF= =E== =E=3 =E=E =E=J =E=D =E=, =E== =E=8 INCUBLKN

%USH LD CALL CR %USH %O% LD ADD LD LD AND CR LD DCN9

HL 8*L< DIID4*OUTKBLKKN N9*=DDA*SENDSCOUT IX HL DE*N==8E HL*DE E*ANCOBLB A*E A 9*=DFD*INCKBLKN B*N3= =DFJ*S%KDLK8

i:e: S ar o. 1eader bloc,: T1e 1eader Is made b+ ?<? b+ es: T1e 1eader is se! * a!d 1e respo!se code recei/ed: Repea $! il s$ccess.$ll+: "a,e HL poi! o 1e s ar o. 1e >!> c1a!!el: No7 poi! s o 1e s ar o. 1e da a bloc,: @e bloc, le!g 1: I. NCOBL is Xero Ai:e: i. 1e b$..er is emp +BI !o da a !eeds o be se! : 5ai L8< T c+cles be.ore proceedi!g:

S%KDLK8

1e da a bloc, is se! * a!d NCNU"B $pda ed: CALL CR INC CR INC %O% CALL EI LD AND RET =DD4*OUTKBLKKN N9*=DDA*SENDSCOUT ANCNU"BKloB N9*=E=E*S%KNKEND ANCNU"BK1iB HL =CAD*BORDKREST A*ANCIRISB A Se!d 1e da a bloc, a!d ge 1e respo!se code: Repea $! il s$cces.$ll+: I!creme! lo7 b+ e o. bloc, !$mber: I!creme! also 1ig1 b+ e 71e! lo7 b+ e reac1es Xero: Res ore poi! er o NCIRIS: Res ore border colo$r: E!able i! err$p s: @e des i!a io! s a io! !$mber: Se Xero .lag i. NCIRIS is = Ai:e: broadcas i!gB: Fi!is1ed:

S%KNKEND

THE ?BRKDELA6? SUBROUTINE T1is s1or s$bro$ i!e i!ser s a dela+ o. abo$ L= msec: 71e! i is called: I s as, is 1a o. separa i!g o$ p$ s d$ri!g ?broadcas s? ra!smissio!s: =E=8 =E83 =E84 =E8L =E8E =E8G BRKDELA6 DLKLOO% LD DEC LD OR CR RET DE*N8E== DE A*E D N9*=E83*DLKLOO% Se a co$! er: Decrease i : C1ec, 71e 1er 1e co$! er 1as reac1ed Xero: Repea i. !o : Fi!is1ed:

THE ?HEADER AND DATA BLOCK RECEISIN@? ROUTINES T1e .ollo7i!g 7o s$bro$ i!es are $sed o ge .rom 1e Ne 7or, a! <Kb+ e 1eader a!d a da a bloc, respec i/el+: Bo 1 re;$ire 1a 1e IX regis er poi! o 1e s ar o. 1e >!> c1a!!el: T1e Xero .lag is re $r!ed rese 7i 1 a!+ error: =E8< =E8B =E8D =E3= =E38 No7 =E3L =E3E =E3G =E3< @ETKNBLK LD LD CALL RET LD HL*NECCE E*N=< =FD3*IN%AK N9 HL*NECCE %oi! o NTDEST* i:e: .irs b+ e o. 1eader bloc,: Le!g 1 o. 1e bloc,: Recei/e 1e 1eader: Re $r! 7i 1 !e 7or, i!ac i/e Ai:e: !o 1eader 1as bee! .o$!dB: %oi! s agai! o NTDEST:

1e 1eader c1ec,s$m is calc$la ed* a!d compared 7i 1 NTCHS c1ec,s$m: XOR LD ADD INC A B*N=G A*AHLB HL Firs clear A: C1ec,s$m .or !e) G b+ es: Add 1is b+ e: %oi! o !e) loca io!:

CHKS4

=E3D =E3B =E3C Some o 1er =E3D =E4= =E48 =E44 =E4J =E4G =E4A =E4D =E4E =EL= =EL4 =ELL =ELE =EL< =ELB =ELE =ELF =EE8 =EE4 =EEL =EEE =EEJ =EEG =EEA =EED =EEF =EJ3 =EJL BRCAST

DCN9 C% RET

=E3G*CHKS4 AHLB N9

Repea .or all b+ es: Compare 7i 1 NTCHS c1ec,s$m: Re $r! i. 1e+ do !o ma c1:

es s are !o7 made: LD AND CR C% RET LD C% RET CR LD OR RET A*ANTDESTB A 9*=EL=*BRCAST ANCSELFB N9 A*ANTSRCEB ANCIRISB N9 =ELE*TESTKBLKN A*ANCIRISB A N9 HL*ANTNU"BB E*A"CNU"BKloB D*ANCNU"BK1iB A HL*DE 9*=EJE*@ETKNBUFF HL A*H C N9 =EJE*@ETKNBUFF ANCNU"BKloB NC*=EJ3*@ETNBKEND ANCNU"BK1iB N=8 Fe c1 des i!a io! s a io! !$mber: C$mp i. broadcas i!g: O 1er7ise compare 7i 1 NCSELF: Re $r! i. 1is da a bloc, is .or a!o 1er Spec r$m: So$rce s a io! !$mber: Compare agai!s NCIRIS: Re $r! i. 1e ra!smi i!g Spec r$m is !o 1e re;$ired o!e: C$mp .or7ard: "a,e s$re 1a i is broadcas i!g Ai:e: NTDEST a!d NCIRIS bo 1 =B: Re $r! i. +o$ are !o 7ai i!g .or a broadcas : Fe c1 !$mber o. bloc, bei!g ra!smi ed: Fe c1 !$mber o. e)pec ed bloc,: C$mp i. 1e bloc, recei/ed is 1e e)pec ed o!e: Accep also 1e pre/io$s bloc, Aalread+ recei/ed* b$ ?respo!se? los B: B$ re.$se o 1er bloc,s: Recei/e 1e bloc,: Decrease NCNU"B* i:e: ?ig!ore? 1is bloc,: Re $r! 7i 1 Xero .lag rese * so 1e proced$re is repea ed: 1e da a bloc, .rom 1a

TESTKBLKN LD LD LD AND SBC CR DEC LD OR RET CALL DEC CR DEC @ETNBKEND OR RET

No7 .ollo7s

1e seco!d ro$ i!e* $sed LD AND CALL LD AND CR %USH %O% LD ADD %USH LD CALL %O% RET LD LD LD SUB INC

o ge

1e !e 7or,:

=EJE @ETKNBUFF =EJ< =EJD =EJC =EbF =EG4 =EG3 =EGL =EGE =EG< =EGD =EHA =EGB =EGE =EGF =E<4 =E<4 =E<L =E<G =E<<

A*ANTDESTB A N9*=FBE*SENDKRES% A*ANTLENB A 9*=ED4*STOREKLEN IX HL DE*N==8E HL*DE HL E*A =FD3*IN%AK HL N9 A*ANTLENB B*A A*ANTDCSB AHLB HL

T1is 1olds Xero 71e! broadcas i!g: Se!d 1e ?respo!se? code A.or 1e 1eaderB $!less broadcas i!g: Fe c1 da a bloc, le!g 1: C$mp i. 1e da a bloc, is emp +: "a,e HL poi! o 1e s ar o. 1e c1a!!el: %oi! o 1e s ar o. da a b$..er: Sa/e s ar address: Le!g 1 o. 1e bloc, o be recei/ed goes i! o E: Recei/e 1e da a bloc,: Res ore s ar address: Re $r! i. 1e !e 7or, 7as i!ac i/e: %ass le!g 1 o. da a bloc, o 1e B regis er: S ar 7i 1 1e da a bloc, c1ec,s$m: S$b rac c$rre! b+ e: %oi! o !e) loca io!:

CHKSL

=E<D =E<B =E<C =E<F =ED4 =ED4 =EDJ =EDD =EDC =EDE =EA8 =EA3

DCN9 RET LD AND CALL STOREKLEN LD LD INC CR INC @ETBFKEND C% RET

=E<G*CHKSL N9 A*ANTDESTB A N9*=FBE*SENDKSCOUT A*ANTLENB ANCIBLB*A ANCNU"BKloB N9*=EA8*@ETBFKEND ANCNU"BK1iB A

Repea .or all b+ es i! 1e bloc,: Re $r! i. 1e c1ec,s$m is 7ro!g: T1is 1olds = 71e! broadcas i!g: Se!d respo!se code .or 1e da a bloc, A$!less broadcas i!gB: Fe c1 da a bloc, le!g 1: Cop+ i i! o NCIBL: Fi!all+ i!creme! bloc, !$mber: Re $r! 7i 1 Xero .lag se o sig!al ?bloc, s$ccess.$ll+ recei/ed?:

THE ?O%EN >N> CHANNEL? CO""AND ROUTINE T1is ro$ i!e is 1e ac $al O%EN comma!d re.erred o 1e !e 7or,: I is called .rom 1e ?O%EN? comma!d s+! a) ro$ i!e o a ac1 a perma!e! >!> c1a!!el o a s ream: =EA4 =EAJ O%ENKNKST CALL C% =EBE:O%K%ER"KN =BLA*O%KSTREA" Ope! a perma!e! >!> c1a!!el: A ac1 i o a s ream:

THE ?O%EN TE"%ORAR6 >N> CHANNEL? SUBROUTINE T1is s$bro$ i!e is also called b+ $si!g 1e ?1oo, code? N3D: I simpl+ ope!s a perma!e! ?!? c1a!!el* a!d 1e! ma,es i > emporar+> b+ se i!g bi G o. 1e c1a!!el speci.ier: T1e /ariables are o be se as .or 1e O%K%ER"KN s$bro$ i!e belo7: T1e s ar o. 1e c1a!!el area is re $r!ed i! 1e IX i!de) regis er: =EAD O%KTE"%KN =EAC =EB8 =EBL CALL LD SET RET =EBE*O%K%ER"KN IX*ACURCHLB G*AIXNLB Ope! a perma!e! >!> c1a!!el: Fe c1 s ar o. c1a!!el area: "a,e 1e c1a!!el emporar+: Fi!is1ed:

THE ?O%EN %ER"ANENT >N> CHANNEL> SUBROUTINE O! e! r+* DKSTR8 m$s 1old 1e des i!a io! s a io! !$mber o be copied i! o NCIRIS* 71ile NTSTAT m$s 1old 1e o7! s a io! !$mber o be copied i! o NCSELF: A perma!e! >!> c1a!!el is crea ed i! o 1e CHANS area* a!d i is made* 1e ?c$rre! ? c1a!!el: T1e ro$ i!e re $r!s 1e c1a!!el base address i! o 1e DE regis er pair: =EBE =EB< =EBD =EBC =EBD =EBE =EC4 =EC8 =EC3 =ECE =EC< =ECD =ECC =ECF =ED8 =EDL =EDE =EDJ =EDD =EDA =EDB O%K%ERNKN LD HL*A%RO@B DEC HL LD BC*N=88L %USH BC RST 8=*CALBAS DEF5 N8JEE INC HL %O% BC CALL IJD8*REST1N:*:AD LD EX LD LD LDIR LD LD INC LD LD INC XOR ACHURCHLB*HL DE*HL HL*N=EEA BC*N===B A*ADSTRK8B ADEB*A DE A*ANTSTATB ADEB*A DE A Fe c1 s ar address o. 1e c1a!!el crea ed: Le!g 1 o. 1e c1a!!el: Sa/e i brie.l+: Call mai! RO" ?"AKEKROO"? s$bro$ i!e o ma,e 1e re;$ired space: %oi! o 1e .irs !e7 loca io!: Res ore ?le!g 1? o. space i!ser ed: Res ore s ar address o. ?.ile!ame? possibl+ mo/ed $p a. er 1e i!ser io!: "a,e 1e C1a!!el ?c$rre! ? %ass ?s ar ? o DE: S ar o. >!> C1a!!el da a: Le!g 1 o. da a: Cop+ 1e da a i! o 1e c1a!!el area: Fe c1 des i!a io! s a io! !$mber: Cop+ i i! o NCIRIS: %oi! s o NCSELF: Fe c1 o7! s a io! !$mber: Cop+ i i! o NCSELF: %oi! s o NCNU"B: Clear i :

=EDC =EDD =EDE =EDF =EE= =EE4 =EEE =EED

LD LD LD INC LD LDIR LD RET

ADEB*A H*D L*E DE BC*N=8=J DE*ACURCHLB

Fill

1e remai!i!g b+ es 7i 1 Xeros:

Fe c1 s ar Fi!is1ed:

address o.

1e c1a!!el:

THE ?>N> CHANNEL DATA? TABLE T1e ?88? b+ es 1a composes =EEA =EEC =EEE =EEF =EF8 =EF4 DEF5 DEF5 DEFB DEF5 DEF5 DEF5 N===< N===< NL4 N=DJC N=D=C N=88L

1e i!i ial par

o. a >N> c1a!!el are as .ollo7s'

"ai! RO" ?o$ p$ ? ro$ i!e: "ai! RO" ?i!p$ ? ro$ i!e: >N> Ac1a!!el speci.ierB S1ado7 RO" ?o$ p$ ? ro$ i!e: S1ado7 RO" ?i!p$ ? ro$ i!e: Le!g 1 o. >!> c1a!!el: 1e c$rre!

THE ?SEND EOF BLOCK TO NET5ORK? SUBROUTINE T1is s$bro$ i!e is $sed 71e!e/er 1e remai!i!g b$..er co! e! s o. >!> c1a!!el 1a/e o be se! as 1e >e!d o. .ile> bloc,: =EFE =EFD =EFC =EFD =EFE =F== SENDKNEOF LD LD AND RET LD C% IX*ACURCHLB A*ANCOBLB A 9 A*N=8 =DAB*SK%ACKK8

Fe c1 s ar address o. c1a!!el: Fe c1 da a bloc, le!g 1: Re $r! i. 1is is a ?read? c1a!!el ANCOBLM=B: Sig!al ?EOF? pac,e : Se!d pac,e a!d e)i :

THE ?NET5ORK STATE? SUBROUTINE T1is s$bro$ i!e re $r!s 71e! 1e !e 7or, is co!sidered o be ?res i!g?* i:e: 71e! 1e !e 7or, li!e is i!ac i/e .or 4KL ms: T1e e)ac ime is ?ra!domised? as o pre/e! Spec r$ms .rom claimi!g 1e !e 7or, a 1e same ime: =F=4 =F=E =F=G =F=< =F=B =F=D NETKSTATE LD C% LD CALL CR RET A*R NC= B*A =F<E*CHKKREST C*=F=4*NETKSTATE @e a ra!dom /al$e: Allo7 o!l+ 1e ra!ge 8D3::3EE: %ass 1e /al$e o B: C1ec, !e 7or, s a e: Repea $! il 1e !e 7or, is res i!g* or BREAK pressed: Re $r! 71e! ?read+ o claim?:

THE ?CHECKKRESTIN@? SUBROUTINE T1is s$bro$ i!e c1ec,s 1e s a e o. 1e !e 7or, a!d re $r!s 7i 1 carr+ rese i. i is i!ac i/e .or a ?s$..icie! ? ime de ermi!ed b+ 1e /al$e passed o 1e B regis er AAB ( ELB K 33B T c+clesB: =F=E =F8= =F83 =F84 =F8E =F8J =FlG =F8D =F8A =F8B =F8D CHKKREST LD A*NGF IN A*ANFEB RRCA CR NC*=FLD*EKREADKN %USH BC %O% BC IN A*ANFGB RRCA RET C DCN9 =F8E*"AKESURE RET Firs c1ec, S%ACE ,e+: is pressed:

"AKESURE

@i/e a! error i. i 5ai 38 T c+cles:

C1ec, !e 7or, s a e: O!l+ bi =: Re $r! i. 1e !e 7or, is alread+ claimed b+ a!o 1er Spec r$m: Repea 1e es : Re $r! 7i 1 carr+ rese 71e! !e 7or, is res i!g:

THE ?5AITKSCOUT? SUBROUTINE

T1is s$bro$ i!e is $sed o ide! i.+ a SCOUT leader .rom 1e !e 7or,: T1is is do!e b+ c1ec,i!g 1e !e 7or, li!e .or abo$ G=== T c+cles* o pro/e 71e 1er i is res i!g: A. er 1is* 1e !e 7or, is e)ami!ed $! il i is ac i/e: A 1is poi! * 1e SCOUT is ide! i.ied: T1e s$bro$ i!e re $r!s 1e carr+ .lag rese i. ? imeKo$ ? 1as occ$rred a!d !o SCOUT 1as bee! ide! i.ied: Remember 1a 1ere are !o ? imeKo$ s? 71e! broadcas i!g: =F8E =F38 =F34 =F3J =F3< =F3D =F3A =F3B =F3C =F3E =F48 =F43 =F4L No7 =F4E =F4G =F4< =F4A =F4C =F4E =F4F =FL8 =FL3 =FL4 =FLL =FLJ =FLD =FLA =FLC =FLD =FLE =FE8 =FEE 5TKSCOUT CLAI"ED LD LD CALL CR DEC DEC LD OR CR LD AND CR RET HL*N=8C3 B*N<= =FDE*CHKKREST NC*=F4E*5TKS6NC HL HL A*H C N9*=F38*CLAI"ED A*ANCIRISB A 9*=F38*CLAI"ED Se a co$! er: T1is co!s a! allo7s 1e !e 7or, o be es ed .or J<D= T c+cles: C1ec, !e 7or, s a e: C$mp .or 7ai i!g 1e SCOUT: Loop agai! i. 1e !e 7or, is ac i/e* $! il 1e co$! er reac1es Xero:

T1ere is !o ? imeKo$ ? 71e! broadcas i!g: Re $r! 7i 1 carr+ rese ? imeKo$ ?: o sig!al

1e SCOUT p$lse is 7ai ed .or: 5TKS6NC IN A*ANFGB RRCA CR C*=FEJ*SCOUTKEND CD A*NGF IN A*ANFEB RRCA CR NC*=FLO*EKREADKN DEC HL LD A*H OR C CR N9*=F4E*5TKS6NC CD A*ANCIRISB AND A CR 9*=F4E*5TKS6NC RET EI CALL =CAD*BORDKREST LD AERRKNRB*N8L RST 3<*RO"ERR Read 1e !e 7or, li!e: O!l+ bi =: C$mp i. 1e SCOUT is ide! i.ied: C1ec, S%ACE ,e+: @i/e a! error i. i is pressed: decrease co$! er: Repea $! il i reac1es Xero: T1ere is !o ? imeKo$ ? 71e! broadcas i!g: Carr+ rese sig!als ? imeKo$ ?* E!able i! err$p s: Res ore border colo$r: @i/e 1e error ?BREAK i! o program?: =CBL: is .i!is1ed:

EKREADKN

NOTE' T1e abo/e ro$ i!e is a ?d$plica e? o. BRKKINOUT a 51e! =FEJ =FE< =FED =FEA =FEB =FED =FEF 1e SCOUT 1as bee! ide! i.Ied* SCOUTKEND LD L%KSCOUT DEC SCF RET DELA6KSC LD DCN9 CR L*N=D L 9 B*N=E =FED*DELA6KSC =FE<*L%KSCOUT

1e ro$ i!e 7ai s $! il i

Se a co$! er: Decrease i : Re $r! 7i 1 carr+ se A o sig!al ?sco$ ide! i.ied?B 71e! 1e co$! er reac1es Xero: 5ai a 71ile: @o bac, i! o 1e loop*

THE ?SENDKSCOUT? SUBROUTINE T1is is 1e opposi e o. 1e precedi!g ro$ i!eI 1e SCOUT leader* .ollo7ed b+ a! <Kbi s a io! !$mber* is se! o/er 1e !e 7or,: A. er 1a/i!g se! e/er+ bi * a es is made o see i. 1e !e 7or, 1as 1e e)pec ed s a e .rom 1e c$rre! bi /al$eI i. a!+ error is .o$!d* 1e! 1e 71ole proced$re is repea ed:

=FJ8 =FJL =FJJ =FJD =FJC =FJD =FJF =FG= =FG3 =FGL =FGE =FGG =FGD =FGB =FGD =FGF =F<8 =F<4 =F<L =F<J =F<G =F<D =F<B =F<D =F<F =FD8

SENDKSC

CALL LD LD LD LD IN RRCA CR OUT LD LD RLC RL LD DCN9 IN AND C% CR

=F=4*NETKSTATE C*NFG HL*N===D A*ANTSTATB E*A A*ANFGB C*=FJ8*SENDKSC ACB*H D*H H*N== E H B*N=< =FGD*SKSCKDEL A*ANFGB N=8 D 9*=FJ8*SENDKSC L N9*=FG3*ALLKBITS A*N=8 ANFGB*A B*N=E =F<F*ENDKSKDEL

5ai $! il 1e !e 7or, Is res i!g: O$ p$ por : HM= Aleader bi /al$eB LMD Abi co$! erB: Fe c1 global s a io! !$mber* %ass i o 1e E regis er: S ar agai! i. some da a is .o$!d i! o 1e !e 7or, li!e: Se!d a bi : Sa/e 1e bi i! o D: Clear H: Ro a e ?s a io! !o:? le. : Bi G o. s a io! !o: goes i! o bi = o. H: 5ai 8DJ T c+cles: Read 1e !e 7or,: O!l+ bi =: Repea agai! 1e proced$re i. 1e !e 7or, does !o 1a/e 1e rig1 s a e .rom 1e c$rre! bi /al$e: Decrease bi co$! er: Se!d all bi s: "a,e !e 7or, i!ac i/e: 5ai 8<L T c+cles:

ALLKBITS

SKSCKDEL

DEC CR LD OUT LD ENDKSKDEL DCN9 RET

Fi!is1ed:

THE ?IN%AK? SUBROUTINE T1is basic s$bro$ i!e is $sed o recei/e .rom 1e !e 7or, a bloc, o. b+ es: O! e! r+: HL m$s 1old 1e address .rom 71ic1 1e b+ es 7ill be loaded* 71ile E m$s 1old 1e le!g 1 o. 1e bloc,: T1e s$bro$ i!e re $r!s 7i 1 1e Xero .lag rese i. 1e !e 7or, is .o$!d i!ac i/e a!d !o da a 1as bee! read: T1e bi s are read e/er+ L= T c+cles: =FD3 =FDL =FDJ =FDG =FDD =FDB =FDC No7 =FDD =FDE =FAI =FA3 =FAL =FAE =FAJ =FA< =FAA =FAC =FAE =FB= =FB3 =FB4 =FBE IN%AK NKACTISE LD IN RRA CR BCN9 INC RET B*NFF A*ANFGB C*=FDD*IN%AKK3 =FDL*NKACTISE B Se a co$! er: Read 1e !e 7or,: O!l+ bi 4: C$mp i. .o$!d ac i/e: O 1er7ise r+ agai!: Re $r! 7i 1 Xero .lag rese o i!dica e ?!e 7or, i!ac i/e?:

1e bloc, is recei/ed: IN%AKK3 IN%AKKL LD LD LD OUT NO% NO% INC DEC INC DEC LD IN RRA RR C% B*E E*N<= A*NCE ANEFB*A IX IX IX IX A*N== A*ANFGB E NC*=FAE*UNTILK"K B 1olds 1e le!g 1 o. 1e bloc,: Se a mar,er i! o bi G: "a,e 5ai a!d CTS 1a/i!g a lo7 le/el* e!able !e 7or, comm: 5ai L< T c+cles a 1e s ar o. eac1 b+ e:

UNTILK"K

5ai G T c+cles: @e a bi i! o carr+ .lag: S1i. 1e bi i! o E: Repea .or < bi s:

=FB< =FBD =FBA =FBC =FBD

LD INC DCN9 C% RET

AHLB*E HL =FDE*IN%AKKL A

S ore 1e recei/ed b+ e: %oi! o !e) loca io!: @e !e) b+ e: Re $r! 7i 1 Xero .lag se ?s$ccess.$ll+ read?: o/er 1e !e 7or,

o sig!al

THE ?SEND RES%ONSE B6TE? SUBROUTINE A ?respo!se b+ e? is simpl+ a b+ e N=8 1a is se! 1a some da a 1as bee! s$ccess.$ll+ recei/ed: =FBE =FC= =FC4 =FCL SENDKRES% LD LD LD LD A*N=l HL*NECCD AHLB*A E*A T1is is S ore i

o co!.irm

1e respo!se b+ e: i! o NTRES%: o be se! :

A ?si!gle b+ e? is

T1e s$bro$ i!e co! i!$es i! o OUT%AK belo7: THE ?OUT%AK? SUBROUTINE T1is is 1e opposi e o 1e IN%AK s$bro$ i!e !e 7or, a bloc, o. b+ es: Agai!* o! e! r+ HL bloc, is s ored* a!d E m$s 1old i s le!g 1: c+clesB is se! * .ollo7ed b+ eac1 b+ e* 7i 1 1e < bi s Aeac1 L= T c+clesB: =FCE =FCJ =FC< =FCA =FCC =FCD =FCE =FCF =FD= =FD3 =FDL =FDE =FDJ =FDG =FDD =FDC =FDD =FDE =FDF =FE= =FE4 =FEE =FEG OUT%AK DELUOK8 OUT%AKKL XOR OUT LD DCN9 LD C%L SCF RLA LD OUT RRA AND DEC LD C% INC DEC %USH %O% C% LD OUT RET A ANFGB*A B*N=L =FCA*DELUOK8 A*AHLB a!d 1$s* is $sed o se!d o/er 1e m$s 1old 1e address .ro 71ic1 1e I!i iall+ a leader Ale!g 1 D< T a! i!i ial ?s ar ? period* a!d 1e!

Begi! 7i 1 a ?s ar ? leader: I!ser 1e re;$ired dela+:

B*N=A ANFGB*A A B D*N== N9*=FB3*UNTK"ARK HL E HL HL N9*=FCC*OUT%AKKL A*N=8 ANFGB*A

UNTK"ARK

@e 1e b+ e o be se! * Se!d 1e bi s i!/er ed: T1e s ar bi is 1ig1: Ro a e bi i! o A: ?8=? bi s o be se! As ar * da a* s opB: Se!d 1e bi : Ne) bi : B$ clear carr+: becrease bi co$! er: 5ai G T c+cles: Loop .or all bi s: %oi! o !e) loca io! i! 1e bloc,: Decrease ?bloc, le!g 1?: 5ai 33 T c+cles: Loop $! il all b+ es 1a/e bee! se! : Fi!all+ ma,e Fi!is1ed: 1e !e 7or, i!ac i/e:

T1e "icrodri/e ro$ i!es THE ?SET A TE"%ORAR6 >"> CHANNEL? SUBROUTINE T1is /er+ impor a! s$bro$ i!e se s a emporar+ >"> c1a!!el i! 1e CHANS areaI 1e "icrodri/e map is crea ed $!less i alread+ e)is s Ai. a!o 1er c1a!!el re.ers o 1e same dri/eB: T1e s$bro$ i!e re $r!s 7i 1 1e IX regis er poi! i!g o 1e s ar o. 1e c1a!!el* a!d 7i 1 1e HL regis er 1oldi!g a s$i able displaceme! o be e/e! $all+ i!ser ed i! 1e STRHS area o a ac1 1e c1a!!el o a s ream: No e 1a 1e HL? regis er is corr$p ed i. +o$ call 1is ro$ i!e .rom +o$r o7! program: =FE< =FED SETKTK"CH EXX LD HL*N==== S7ap regis ers: Sig!al ?map o be crea ed?:

=FEC =FED =FF8 =FFL =FFJ =FFD =FFB =FFD 8=== 8==3 8==L 8==J 8==D l==C 8==E 8==F 8=83 8=8E 8=8J 8=8A 8=8D 8=3= 8=33 8=3J 8=3< 8=3D 8=3A 8=3D 8=4= 8=43 No7 8=4L 8=4G 8=4< 8=4D 8=4C 8=4D 8=4E 8=L= 8=L8 8=LL 8=LG 8=LD 8=LC 8=LF 8=E3 8=EL 8=EE 8=E< 8=ED 8=ED 8=EF

CHKKLOO%

EXX LD LD ADD LD C% CR LD AND C% CR LD C% CR EXX LD LD LXX LD LD CALL CR BIT CR RST DEFB

IX*ACHANSB DE*N==8L IX*DE A*AIXN=B N<= 9*8=4L*CHANKS%C A*AIXNLB NGF NLD N9*8=3A*NEXTKCHAN A*ADKSTR8B ACHDRISB N9*8=3A*NEXTKCHAN L*ACH"A%KloB H*ACH"A%K1iB BC*ANKSTR8B HL:ANKSTR8N3B 848E*CHKKNA"E N9*8=3A*NEXTKCHAN 4*AIXN3LB 9*8=3A*NEXTKCHAN 3=*SHKERR N=D E*AIXNDB D*AlXN8=B IX*DE =FFJ*CHKKLOO%

S7ap regis ers agai!: S ar o. c1a!!el area: %oi! s o 1e s ar o. 1e c1a!!els O 1er 1a! 1e ?s a!dard? o!es: C$mp .or7ard i 1e CHANS area is .i!is1ed: Fe c1 c1a!!el speci.ier: Clear bi G: C$mp i. 1is is !o a! >m> c1a!!el: Fe c1 dri/e !$mber: C$mp i. 1is c1a!!el $ses a di..ere! dri/e: S7ap regis ers: "o/e address o. map area i! o H?L? S7ap regis ers agai!: Le!g 1 o. .ile!ame: S ar address o. .ile!ame: C1ec, !ame agai!s ?CHNA"E? o. 1is c1a!!el: C$mp i. !o 1e same .ile: T1is is se 7i 1 ?7ri e? .iles: Co! i!$e 7i 1 ?read? .iles: @i/e 1e ?Readi!g a ?7ri e? .ile? error i. 1e .ile is alread+ ope!ed .or 7ri i!g: Fe c1 le!g 1 o. c1a!!el i! o 1e DE regis er pair: %oi! o 1e !e) c1a!!el: Bac, agai!: 1e e!d o. 1e CHANS area:

NEXTKCHAN LD LD ADD CR 1e space .or CHANKS%C

1e !e7 c1a!!el is crea ed a

LD HL*A%RO@B DEC HL %USH HL LD BC*N=3E4 RST 8=*CALBAS DEF5 N8JEE %O% DE %USH DE LD HL*N84CC LD BC*N==8D LDIR LD A*ADKSTR8B LD ACHDRISB*A LD BC*N=3E4 %USH IX %O% HL CALL 8JD8*RESTKNKAD EX LD BIT CR DE*HL BC*ANKSTR8B G*B N9*8=JF*TESTK"A%

Fe c1 1e s ar address o. 1e c1a!!el* Sa/e i : Le!g 1 is ?EDE? b+ es: Call "AKEKROO" o crea e 1e re;$ired space: Res ore s ar address o. 1e c1a!!el: S ar o. >"> c1a!!el da a: Le!g 1 o. da a: S ore da a i! o 1e c1a!!el: Fe c1 dri/e !$mber: I!i ialise CHDRIS: Le!g 1 o. c1a!!el: Fe c1 s ar o. c1a!!el i! o HL: Res ore s ar o. ?.ile!ame? possibl+ mo/ed a. er 1e ?i!ser io!? o. 1e c1a!!el: T1e s ar address o. 1e .ile!ame goes o HL: Fe c1 le!g 1 o. .ile!ame: C$mp i. 1e !ame does !o e)is ANKSTR8 M NFFFFB:

T1e c1a!!el !ame is 8=J8 TKCHKNA"E LD

ra!s.erred i! o CHNA"E: A*B T1e loop co! i!$es $! il ?le!g 1?

8=J3 8=J4 8=JE 8=JJ 8=JD l=JA 8=JC 8=JD No7 8=JF 8=G8 8=G3 8=G4 8=GL 8=GJ 8=GD 8=GA 8=GB 8=GE 8=GF 8=<8 8=<3 8=<E 8=<G 8=<A 8=<E

OR CR LD LD INC INC DEC CR

C 9*8=JF*TESTK"A% A*AHLB AIXN8LB*A HL IX BC 8=Jl*TKCHKNA"E

reac1es Xero: Fe c1 c1arac er o. !ame: S ore i i! o CHNA"E: %oi! o !e) loca io!s: Decrease ?le!g 1?: Co! i!$e 7i 1 !e) c1arac er:

1e ?map? is crea ed $!less i TESTK"A% %O% EXX LD OR CR LD %USH DEC LD RST DEF5 %O% LD ADD CALL STK"A%KAD LD LD IX

alread+ e)is s: Res ore s ar address o. c1a!!el: Use al er!a e regis ers: Address o. map* or N==== i. 1e map does !o e)is : C$mp i. 1e map alread+ e)is s: O 1er7ise 1e map is o be crea ed: Le!g 1 o. 1e map is 43 b+ es: Call "AKEKROO" o ma,e 1e space: Res ore s ar o. map: Res ore ?s ar ? o. c1a!!el: Res ore ?s ar ? o. .ile!ame: Las l+ s ore 1e s ar address o. 1e "icrodri/e map: 1e

A*H L N9*8=<A*STK"A%KAD HL*ACHANSB HL HL BC*N==3= 8=*CALBAS N8JEE HL BC*N==3= IX*BC 8JD8*RESTKNKAD ACH"A%KloB*L ACH"A%K1iB*H

All bi s i! 1e map are made 1ig1I 1e! 1e ?preambles? are collec ed .rom able a N84EE a!d s ored i! 1e c1a!!el: 8=D= 8=D3 l=DL 8=DE 8=DJ 8=D< 8=DA 8=DB 8=DE 8=DF 8=A= l=A4 8=AJ 8=A< 8=AA 8=AB 8=AE 8=B8 8=B3 8=B4 8=BJ 8=B< 8=BA 8=BB 8=BF 8=C= 8=C3 8=C4 LD LD LD INC DCN9 %USH %O% LD ADD EX LD LD LDIR %USH %O% LD LD ADD EX LD LDIR %USH %O% LD OR SBC INC RET A*NFF B*N3= AHLB*A HL 8=DL*FILLK"A% IX HL DE*N==8C HL*DE DE*HL HL*N84EE BC*N===C IX HL DE*N==4G BC*N===C HL*DE DE*HL HL*N84EE IX HL DE*ACHANSB A HL*DE HL All bi s 1ig1: Le!g 1 o. map: S ore NFF i! o 1is loca io!: Ad/a!ce 1e poi! er: Co! i!$e .or 43 b+ es: %ass s ar o. c1a!!el o HL: "a,e DE regis er pair poi! 1eader bloc, preamble area: o 1e

FILLK"A%

S ar o. ?preamble? da a: %reamble is 83 b+ es i! le!g 1: Se K$p 1eader preamble: %ass agai! ?s ar ? o HL: O..se .or da a bloc, preamble: %reamble is agai! 83 b+ es: "a,e DE regis er pair poi! o 1e da a bloc, preamble: S ar o. ?preamble da a?: Se K$p 1e da a bloc, preamble: "o/e ?s ar ? o. c1a!!el i! o HL regis er pair: Calc$la e 1e re;$ired ?s ream o..se ? i! o HL: Fi!is1ed:

THE ?RECLAI" >"> CHANNEL? SUBROUTINE

T1is s$bro$ i!e Aalso called b+ $si!g ?1oo, code? N3CB is $sed o reclaim 1e >m> c1a!!el poi! ed b+ 1e IX i!de) regis er: A!+ s ream a ac1ed o 1is c1a!!el 7ill be closed* a!d o 1er ?d+!amic? areas $pda ed: T1e map is also reclaimed* $!less i is $sed b+ a!o 1er c1a!!el: 8=CL 8=CG 8=CA 8=CB 8=CE 8=CD 8=D8 8=D3 8=DE 8=DJ 8=D< 8=DA 8=DB 8=DF 8=E= 8=E3 l=E4 8=EJ DELK"KBUF LD LD %USH LD %USH %USH %O% LD RST DEF5 %USH %O% LD OR SBC INC LD CALL L*ACH"A%KloB H*ACH"A%K1iB HL A*ACHDRISB AF IX HL BC*N=3E4 8=*CALBAS N8DE< IX HL DE*ACHANSB A HL*DE HL BC*N=3E4 l4EF*RESTKSTR" 1a $ses Fe c1 address o. map i! o HL: Sa/e i .or la er: Fe c1 dri/e !$mber: Sa/e i .or la er: "a,e HL poi! o 1e s ar o. 1e c1a!!el: Le!g 1 o. 1e c1a!!el: RECLAI"K3 is called o dele e 1e c1a!!el area: "a,e HL poi! agai! o 1e s ar o. 1e AreclaimedB c1a!!el: Calc$la e ?o..se ? $sed i! o STR"S area .or 1e dele ed c1a!!el* possibl+ a ac1ed o a s ream: Amo$! o. b+ es mo/ed do7!:

Close re;$ired s reams a!d $pda e da a .or o 1er s reams: 1a o. 1e c1a!!el dele ed:

Loo, .or a!+ c1a!!el 8=ED 8=EA 8=EB 8=EC 8=F= 8=F4 8=FE 8=F< 8=FA 8=FC 8=FF 88=8 88=4 88=E 88=< 88=D 88=A 88=D 888= 8883 NXTCHAN %O% %O% LD LD LD ADD TESTK"CHL LD C% CR LD AND C% CR LD C% RET LD LD ADD CR

1e same map as

AF HL B*A IX*ACHANSB DE*N==8L IX*DE A*AIXN=B N<= 9*888L*RCL"K"A% A*AIXNLB NGF NLD N9*884A*NXTCHAN A*ACHDRISB B 9 E*AIXNDB B*AIXN8=B IX*DE 8=FE*TESTK"CHL 1e map $sed b+ BC*N==3= HL BC 8=*CALBAS N8DE< BC HL

Res ore dri/e !$mber* a!d s ar address o. map: Dri/e !$mber goes i! o B: S ar o. c1a!!el area: S,ip i!i ial ?s a!dard? c1a!!els: C$mp i. 1e c1a!!el area is .i!is1ed:

Fe c1 c1a!!el speci.ier: Clear bi G A!o dis i!c io! is made be 7ee! ? emporar+? a!d ?perma!e! ? c1a!!elsB: C$mp i. 1is is !o a! >m> c1a!!el: Fe c1 dri/e !$mber o. 1is c1a!!el: I. i is 1e same as 1a o. 1e dele ed c1a!!el* 1e map is !o o be reclaimed: Fe c1 le!g 1 o. 1is c1a!!el: %oi! s o !e) c1a!!el: Bac, agai! .or !e) c1a!!el: is o be dele ed oo:

I. !o c1a!!el $ses 888L 888G 888< 888D 888A 888C 888D RCL"KHA%

1e dele ed o!e* i

LD %USH %USH RST DEF5 %O% %O%

Le!g 1 o. 1e map: Sa/e s ar o. map: Sa/e le!g 1 o. map: No e' 1is is !o !ecessar+: Call RECLAI"K3 o dele e 1e map: Res ore le!g 1 a!d s ar dele ed map: o. 1e

888E 8838

CALL RET

84D8*RESTK"A%

Upda e addresses o. o 1er maps: Fi!is1ed:

THE ?>"> CHANNEL IN%UT? ROUTINE T1e ac $al ?i!p$ ? is 1a!dled /ia CALLKIN%: T1e ser/ice ro$ i!e is "CHANKIN belo7: 8833 883J 883D "KIN%UT LD LD C% IX*ACURCHLB HL*N883C =CBD*CALLKIN% Firs ma,e IX poi! o s ar o. c1a!!el: Address o. "CHANKIN ro$ i!e: C$mp o 1e co! rol ro$ i!e:

THE ?>"> CHANNEL IN%UT? SERSICE ROUTINE Similarl+ o 1e >!> i!p$ * 1e >m> i!p$ i!/ol/es 1e readi!g o. a b+ e .rom 1e da a bloc,: 51e! i is emp +* a .$r 1er bloc, is o be recei/ed .rom "icrodri/e A%ro/ided 1a 1e ?c$rre! ? da a bloc, is !o 1e ?e!d o. .ile? o!eB be.ore readi!g 1e b+ e: 883C "CHANKIN 884= BIT CR =*ACHFLA@B 9*884L*TESTK"KBF T1is is rese o i!dica e a ?read? .ile: C$mp 7i 1 ?read? .ile:

?Readi!g a 7ri e .ile? 8843 8844 884L 884G 884A 884D 88L= 88L8 88L4 88LE 88LJ 88LD 88LC 88LD 88LF 88E8 88EL 88EJ 88EG R5FKERR RST DEFB 3=*SHKERR N=D E*ACHB6TEKloB D*ACHB6TEK1iB L*ARECLENKloB H*ARECLENK1iB HL*DE C*88E<*CHKK"KEOF DE ACHB6TEKloB*E ACHB6TEK1iB*D DE IX IX*DE A*AIXN<3B IX Call 1e error 1a!dli!g ro$ i!e: b+ e co$! er:

TESTK"KBF LD LD LD LD SCF SEC CR INC LD LD DEC %USH Abb LD %O% SCF RET

Fe c1 c$rre!

Fe c1 record le!g 1: I!cl$de b+ e o be read: C$mp i. all b+ es 1a/e bee! read: I!cl$de b+ e o be read i! b+ e co$! er: S ore pe7 b+ e Co$! er: 1e

%osi io! o. c1arac er o be read: Sa/e s ar address o. c1a!!el: IX !o7 poi! s o ?b+ e o be read K <3?: Fe c1 1e b+ e: Res ore s ar o. c1a!!el: Sig!al ?accep able code?: Fi!is1ed: o see i. i is

I. all b+ es i! 1e da a bloc, 1a/e bee! read* a c1ec, is made 1e ?e!d o. .ile? bloc,* i:e: 1e las o!e: 88E< 88EC 88EE 88EF 88J8 CHKK"KEOF BIT CR XOR ADD RET 8*ARECFL@B 9*88J3*NE5KBUFF A A*N=D

T1is is se o sig!al ?EOF?: C$mp i. !o 1e las bloc,: O 1er7ise Xero a!d carr+ .lags are re $r!ed rese o sig!al EOF: Re $r!ed b+ e is N=D: Fi!is1ed:

A !e7 da a bloc, is !o7 read .rom 88J3 88JE 88J< 88JB NE5KBUFF LD LD LD INC

1e "icrodri/e $!i : T1e b+ e co$! er is cleared: I!creme! record !$mber:

DE*N==== ACHB6TEKloB*E ACHB6TEK1iB*D ACHRECB

88JE 88G8 88G3 88GE

CALL XOR CALL CR

88GG*@ETKRECD A 8GFG*SELKDRISE 884L*TESTK"KBF

Fe c1 a !e7 da a bloc,: T$r! o.. dri/e mo or: No7 read 1e b+ e:

THE ?@ET A RECORD? SUBROUTINE T1is s$bro$ i!e is $sed o load a record o. a ?%RINTK +pe .ile: T1e !$mber o. 1e 7a! ed record m$s be s ored i! o CHREC* 1e dri/e !$mber i! o CHDRIS a!d 1e .ile!ame i! o CHNA"E: I. a. er .i/e passes o. 1e ape 1e record is !o .o$!d* or i. a c1ec,s$m error occ$rs* 1e error ?File !o .o$!d? is gi/e!: 88GG 88GA 88GD 88<= 88<L 88<G 88<D 88<B 88<E 88D8 88D4 88DE 88DJ 88DD 88DA 88DD 88DE 88A8 @ETKRECD @ETKRK3 @ETKRKL% LD CALL LD LD CALL CR CR CD C% CR %USH %O% LD ADD CALL RET CALL CR A*ACHDRISB 8GFG*SELKDRISE BC*N=LFB ASECTORB*BC 88AE*@KHDKRC C*88DE*NXTKSCT 9*88DE*NXTKSCT A*ARECNU"B ACHRECB N9*88DE*NXTKSCT IX HL DE*N==E3 HL*DE 84LJ*CHKSKBUFF 9 8483*DECKSECT N9*88<L*@ETKRKL% Fe c1 dri/e !$mber: S ar dri/e mo or: I!i ialise SECTOR o 83GE Ai:e:* a leas .i/e passes o. 1e apeB: @e 1eader a!d da a bloc,: Co!sider !e) sec or 7i 1 errors* or i. i is $!$sed: Fe c1 record !$mber: Tes agai!s CHREC: Ne) sec or also i. 1is record is !o 1e e)pec ed o!e: Fe c1 base o. >m> c1a!!el i! o HL: %oi! s o 1e s ar o. 1e b$..er:

Re $r! i.

1e c1ec,s$m is correc : 1e

NXTKSCT .o$!d?

Decrease SECTOR: Co! i!$e $! il .i/e passes o. ape 1a/e bee! made: Call

?File !o 88A4 88AL

RSKSH3

RST DEFB

3=*SHKERE N88

1e error 1a!dli!g ro$ i!e:

THE ?@ET HEADER AND DATA BLOCK? SUBROUTINE T1is s$bro$ i!e is $sed o collec .rom 1e selec ed Hicrodri/e $!i a 1eader .ollo7ed b+ i s da a bloc,: No e 1a 1e dri/e mo or is o be $r!ed o! be.ore calli!g @KHDKRC: T1e .lags re $r!ed de!o e 1e .ollo7i!g s a es' K Xero se * carr+ rese K Xero rese * carr+ rese K carr+ se T1e sec or is $!$sed: S$ccess.$l loadi!g: 5i 1 a!+ error: 1e 7a! ed

T1e ?errors? i!cl$de 7ro!g c1ec,s$ms* a!d !o ma c1i!g be 7ee! .ile!ame ACHNA"EB a!d 1e loaded o!e ARECNA"B: 88AE 88A< 88AB 88AC 88AF 88B3 88BL 88B< 88BA 88BD 88C= 88C3 88C4 88CE @KHDKRC CALL LD ADD CALL CALL CR BIT CR LD OR AND RET %USH %O% 83CL*@ETK"KHD3 DE*N==8B HL*DE 8<AD*@ETK"KBF 84L8*CHKSKHDKR N9*88DJ*@KRECKERR =*ARECFL@B N9*88DJ*@KRECKERR A*ARECFL@B ARECLENK1iB N=3 9 IX HL

Fe c1 1e 1eader: "a,e HL poi! o RECLC@* i:e:* s ar o. record area: Fe c1 1e record: Calc$la e record c1ec,s$m: E)i i. 1e c1ec,s$m is 7ro!g: T1is is se o sig!al a 1eader bloc,: E)i i. a 1eader i!s ead o. a da a bloc, 1as bee! .e c1ed: Bi 8 o. RECFL@ a!d o. RE@LENK1i are bo 1 rese 7i 1 ?$!$sed sec or?: Ta,e o!l+ bi 8: Re $r! 7i 1 $!$sed sec ors: "a,e HL poi! o 1e s ar o. 1e c1a!!el:

88CJ 88CD 88CA 88CD 88D= 88D3 88DL 88DE 88DJ 88DG

LD ADD LD CALL CR LD OR RET @KRECKERR SCF RET

DE*N==LG HL*DE BC*N===A 848E*CHKKNA"E N9*88DJ*@KRECKERR A*NFF A

%oi! s

o RECNA":

Name is e! c1arac ers i! le!g 1: Compare i agai!s CHNA"E: E)i i. 1e+ do !o ma c1: E)i 7i 1 Xero a!d carr+ .lags rese 71e! s$ccess.$l: E)i 7i 1 carr+ se bee! de ec ed: i. a!+ error 1as

THE ?>"> CHANNEL OUT%UT? ROUTINE T1e ro$ i!e is /er+ similar o 1a .or 1e >N> c1a!!el o$ p$ : T1e b+ e passed o 1e acc$m$la or is s ored i! o 1e E83Kb+ e b$..er: 51e! i is .illed* 1e record is 7ri e! o! o 1e "icrodri/e car ridge: 88D< 88DC 88E8 88E3 "CHANKOUT LD ADD BIT CR IX*NFFFA IX*DE =*ACHFLA@B N9*88EJ*NOREAD %oi! o 1e s ar o. 1e c1a!!el Ai:e: DEKJ* see ==BAB: Co! i!$e o!l+ i. 1is is a ?7ri e? .ile:

?5ri i!g 88EL 88EE 88EJ 88ED 88EC 88EE 88F= 88F4 88FE 88FJ 88FD 88FC 88FE I.

o a ?read? .ile? RST DEFB 3=*SHKERR N=C E*ACHB6TEKloB D*ACHB6TEK1iB IX IX*DE AIXN<3B*A IX DE ACHB6TEKloB*E ACHB6TEK1iB*D 8*D 9 Call 1e error 1a!dli!g ro$ i!e:

NOREAD

LD LD %USH ADD LD %O% INC LD LD BIT RET

Fe c1 b+ e co$! er: Sa/e s ar address o. c1a!!el: No7 IX poi! s o ?.irs .ree b+ e i! 1e b$..er?K<3: S ore a b+ e i! 1e b$..er: Res ore s ar address o. c1a!!el: %oi! s o .irs ?.ree b+ e? i! 1e b$..er: Upda e b+ e co$! er* Re $r! i. 1e b$..er is !o .illed Aposi io! E83 1as !o bee! reac1edB:

1e b$..er is .illed*

1e ro$ i!e co! i!$es i! o 5RKRECD belo7:

THE ?5RITE A RECORD ONTO "ICRODRISE? SUBROUTINE T1is s$bro$ i!e is also called b+ $si!g 1oo, code N3J: T1e record 1eld i! 1e >m> c1a!!el poi! ed b+ 1e IX regis er A7i 1 !ame CHNA"E a!d !$mber CHRECB* is 7ri e! i! o 1e .irs $!$sed sec or i! 1e car ridge i!ser ed i! 1e dri/e CHDRIS: T1e! 1e appropria e map bi is se a!d CHREC is a$ oma icall+ i!creme! ed: A! error is prod$ced i. !o more space is a/ailable o! 1e car ridge o 7ri e 1e record: 88FF 83=3 83=E 83=< 83=D 83=C 83=D 838= 8383 838E 838J 5RKRECD LD CALL CALL XOR CALL RET 5RITEK%RC CALL CR CALL XOR CALL A*ACHDRISB 8GFG*SELKDRISE 83=D*5RITEK%RC A 8GFG*SELKDRISE 83JL*CHKKFULL N9*838B*NOFULL 8=CL*DELK"KBUF A 8GFG*SELUDRISE Fe c1 dri/e !$mber: T$r! o! 1e mo or: 5ri e 1e record: T$r! o.. 1e mo or: Fi!is1ed: C1ec, i. 1e car ridge is .$ll* a!d F$mp i. i is !o : O 1er7ise reclaim 1e c1a!!el: T$r! o.. dri/e mo ors:

?"icrodri/e .$ll?

838D 838A 838B 838D 838F 8333 833E 833G 833D 833B 833E 8348 834L 834G l34A 834D 834F 83L= 83L4 83LL 83LG 83LA 83LB 83LE 83E= 83E8 83EL 83EG 83EA 83ED 83J= 83J4 NOFULL C%KNA"E

RST DEFB %USH LD LD LD INC DCN9 %O% LD CD LD LD LD LD %USH %O% LD ADD CALL LD ADD CALL %USH %O% LD CALL LD LD LD INC RET

3=*SHKERR N=F IX B*N=A A*AIXN8LB AIXNG8B*A IX 838F*C%KNA"E IX C*ACHB6TEKloB ARECLENKloB*C A*ACHB6TEK1iB ARECLENK1iB*A A*ACHRECB ARECNU"B*A IX HL DE*N==L4 HL*DE 84L8*CHKSKHDKR DE*N===F HL*DE 84LJ*CHKSKBUFF IX HL DE*N==LG 83GE*SENDKBLK DE*N==== ACHB6TEKloB*E ACHB6TEK1iB*D ACHRECB

Call

1e error 1a!dli!g ro$ i!e:

Sa/e base address o. c1a!!el: Co$! s e! c1arac ers: Cop+ CHNA"E i! o RECNA":

Res ore s ar o. c1a!!el: Cop+ CHB6TE i! o RECLEN:

Cop+ CHREC i! o RECNU": "a,e HL poi! o 1e s ar o. bloc, 7or,space* i:e: RECFL@: Calc$la e DESCHK c1ec,s$m: Ha,e HL poi! o 1e s ar o. E83Kb+ e b$..er: Calc$la e DCHK c1ec,s$m: T1ree $seless i!s r$c io!s: Se!d 1e record Clear CHB6TE: Fi!all+ i!creme! Fi!is1ed: o "icrodri/e: 1e da a

1e

record !$mber:

THE ?CHKKFULL? SUBROUTINE T1is s$bro$ i!e is $sed o c1ec, 71e 1er 1e c$rre! l+ $sed "icrodri/e $!i co! ai!s a .$ll car ridge* 7i 1 !o ?.ree o $se? sec ors: T1e Xero .lag is re $r!ed se i. 1e car ridge is .$ll Ai:e: i. all map bi s are se B: 83JL 83JG i3JA 83JC 83JD 83JF 83G4 83G8 83G4 83GL CHKKFULL LD LD LD NXTKBK"A% LD C% RET INC DCN9 XOR RET L*ACH"A%KloB H*ACH"A%K1iB B*N3= A*AHLB NFF N9 HL 83JC*NXTKBK"A% A Fe c1 address o. 1e map:

Le!g 1 o. 1e map: Fe c1 a b+ e: E)i 7i 1 Xero .lag rese i. !o all bi s are se : %oi! o 1e !e) b+ e* Loop .or all b+ es: Re $r! 7i 1 Xero .lag se o sig!al 1a 1e car ridge is .$ll:

TIlE ?SENDKBLK? SUBROUTINE T1e .ollo7i!g s$bro$ i!e .e c1es b$..er i! o 1e sec or* pro/ided Fi!all+ 1e map bi is se : 83GE 83GG 83G< 83GB l3GC 83GD 83<= SENDKBLK %USH %O% LD ADD %USH CALL CALL

1e .irs ?.ree? 1eader a!d 1e! 7ri es 1e 1a 1e car ridge is !o 7ri eKpro ec ed: "a,e HL poi! preamble: o 1e da a bloc,

FAILED

IX HL DE*N==4G HL*BE HL 83CL*@ETK"KHD3 83DF*CHECKK"A%

Sa/e 1is address: Fe c1 1e .irs 1eader: C1ec, map bi .or 1is 1eader:

83<4 83<E 83<J 83<G 83<D 83<B

CR EX

N9*83GD*FAILED AS%B*HL

%USH BC IN A*ANEFB AND N=8 CR N9*83<F*NOK%RT

Co! i!$e i. 1e sec or is !o ?.ree .or $se?: No7 AS%B 1olds 1e map bi addressI a!d HL 1e s ar o. 1e da a bloc, preamble: Sa/e map bi posi io!: C$mp i. 1e 7ri eKpro ec ab is prese! :

?Dri/e ?7ri e? pro ec ed? 83<D 83<E 83<F 83D8 83D4 83DJ 83DD 83DC 83DE 83A= 83A8 83A3 83A4 83AL 83AE NOK%RT RST DEFB LD OUT LD CALL CALL LD OUT %O% %O% LD OR LD RET 3=*SHKERR N=E A*NEJ ANEFB*A BC*N=8J< 8<FA*DELA6KBC 8<G<*OUTK"KBUF A*NEE ANEFB*A BC HL A*B AHLB AHLB*A Call S ar 5ai 1e error 1a!dli!g ro$ i!e: 1e 7ri i!g process: $! il 1e .irs gap is .i!is1ed:

5ri e preamble a!d da a bloc,: Se!d a sig!al 71e! .i!is1ed: Res ore map bi posi io!: Res ore map bi address: Se 1e re;$ired map bi : Fi!is1ed:

THE ?CLOSE FILE? SUBROUTINE T1is s$bro$ i!e CLOSEs a ?%RINTK +pe? >m> c1a!!el: I. 1e c1a!!el is $sed .or readi!g* 1e! i is reclaimedI b$ i. i is $sed .or 7ri i!g* a!+ $!se! da a i! 1e b$..er is 7ri e! o! o 1e "icrodri/e car ridge be.ore reclaimi!g 1e c1a!!el: T1e e! r+ poi! CLOSEK" is $sed 71e! 1e s ar address o. 1e c1a!!el is 1eld i! 1e HL regis er pair* 71ile CLOSEK"3 Aalso $sed b+ ?1oo, code? N34B is $sed 71e! 1a address is 1eld i! 1e IX i!de) regis er: 83AJ 83AG 83AD 83AD 83AF 83B4 834J 834G 83BA 83BD CLOSEK" CLOSEK"3 %USH %O% BIT CR SET CALL XOR CALL CALL RET HL IX =*ACHFLA@B 9*83BJ*NOE"% 8*ARECFL@B 88FF*5RKRECD A 8GFG*SELKDRISE 8=CL*DELK"KBUF "a,e IX regis er poi! o 1e s ar o. 1e c1a!!el: C$mp .or7ard 71e! ?readi!g?: O 1er7ise sig!al ?EOF? record* a!d 7ri e i o! o dri/e: S7i c1 o.. mo or: Reclaim 1e c1a!!el: Fi!is1ed:

NOE"%

THE ?"AIN ERROR RESTART? E"ULATION ROUTINE T1is ro$ i!e* called i! 1e .orma ?CALL ERRKRS P DEFB !!? em$la es 1e se;$e!ce ?RST < P DEFB !!? 1a is $sed A71e! 1e mai! RO" is paged i!B o gi/e a! error repor : ERRKRS is !e/er called .rom 1e s1ado7 RO" code: 83BE 83BF 83C= 83C4 ERRKRS %O% LD LD RST HL A*AHLB AERRKNRB*A 3<*RO"ERR Fe c1 error Fe c1 S ore @i/e re $r! address Apoi! s codeB: error code: i : 1e error repor : o 1e

THE ?FETCH HEADER FRO" HICRODRISE? SUBROUTINE T1is s$bro$ i!e is $sed o .e c1 a 1eader .rom 1e c$rre! "icrodri/e $!i A71ose mo or m$s be $r!ed o!B: T1e 1eader is loaded i! o HDFL@:::HDCHK: T1e proced$re is repea ed $!less 1e c1ec,s$m is correc :

83CL 83CJ 83CG 83CA 83CB 83CE 83D8 83D4 83DG 83DD

@ETK"KHD3 %USH %O% LD ADD CALL CALL CR BIT CR RET

IX HL DE*N==3< HL*DE 8<A4*@ETK"KHD 84L8*CHKSKHDKR N9*83CL*@ETK"KHD3 =*AHDFLA@B 9*83CL*@ETK"KHD3

"a,e HL poi! o "DFLA@* i:e: loca io! .rom 71ic1 1e 1eader 7ill be loaded: Fe c1 1e 1eader: Calc$la e c1ec,s$m: Repea i. i does !o ma c1 7i 1 1e ?old? c1ec,s$m: Repea i. a record descrip or 1as bee! loaded i!s ead o. a 1eader: Fi!is1ed:

THE ?CHECK "A% BIT STATE? SUBROUTINE T1e bi correspo!de! o a gi/e! sec or i! 1e microdri/e map is c1ec,ed: T1e Xero .lag is re $r!ed se i. 1e bi 7as rese * a!d /iceK/ersa: Also 1e B regis er 7ill 1old* o! re $r!* a bi se i! 1e posi io! o. 1e map bi I HL 7ill 1old 1e address o. 1a map bi : T1e e! r+ poi! is CHKK"A%K3 71e! 1e sec or !$mber 1as o be collec ed .rom RECNU"* or CHECKK"A% i. .rom HDNU"B: 83DA 83DD 83E8 83E3 83EE 83E< 83ED 83EA 83EB 83ED 83EF 83F8 83F4 83FL 83FE 83FJ 83FG 83F< 83FD 83FB 83FC 83FD CHKKKA%K3 CD CR CHECKK"A% LD ENTR6 LD LD ENTR6K3 XOR LD LD AND SRL SRL SRL ADD LD INC XOR SCF RLA DCN9 LD AND RET E*ARECNU"B 83E3*ENTR6 E*AHDNU"BB L*ACH"A%KloB H*ACH"A%K1iB A D*A A*E N=G E E E HL*DE B*A B A 83F<*ROTATE B*A AHLB Fe c1 sec or !$mber: C$mp .or7ard: Fe c1 sec or !$mber: Fe c1 map s ar address: Clear D regis er: "o/e sec or !$mber o A: O!l+ 4 less sig!i.ica! bi s* Ai:e: ?bi posi io!?B: S1i. o$ 1e ?posi io!? .rom E: Calc$la e map bi address: %ass ?posi io!? o B: Ra!ge is !o7 8::<: Clear A regis er: Se carr+ .lag: Se a bi i! 1e correc posi io!: E)i 7i 1 B 1oldi!g 1a bi : Se Xero .lag as re;$ired: Fi!is1ed: i! 1e map area correspo!di!g o 1e

ROTATE

THE ?RESET BIT IN "A% AREA? SUBROUTINE T1is s$bro$ i!e is $sed o rese 1e bi sec or HDNU"B: 83FE 84=8 84=3 84=4 84=L 84=E RESKBK"A% CALL LD C%L AND LD RET 83DF*CHECKK"A% A*B AHLB AHLB*A

Se B a!d HL regis ers 7i 1 posi io! a!d map address: %ass bi o be rese o A: Rese o!l+ 1a bi a!d lea/e o 1er bi s $!c1a!ged: S ore !e7 map b+ e: Fi!is1ed:

THE ?CHECK >%SEUDOK"A%> BIT STATE? SUBROUTINE T1is s$bro$ i!e is appare! l+ e;$al o 1e CHECKK"A% s$bro$ i!e a 83DA* 1o7e/er i does !o re.er o 1e s a!dard map* b$ o a ?pse$doKmap? se $p i! 1e E83K b+ e b$..er o. 1e >m> c1a!!el: T1is map is $sed .rom 1e ERASE comma!d o mar, 1e sec ors o be erased* 84=J TESTK%"A% %USH IX "a,e HL poi! o 1e s ar o. 1e

84=< 84=D 84=C 84=D 848=

%O% LD ADD LD CR

HL DE*N==E3 HL*DE E*AHDNU"BB 83E<*ENTR6K3

b$..er: I:e: o 1e s ar 1e ?pse$doKmap? area: Fe c1 sec or !$mber: Co! i!$e i! o CHECKK"A%:

o.

THE ?DECREASE SECTOR NU"BER? SUBROUTINE T1is s1or s$bro$ i!e is .re;$e! l+ called o decrease 1e co! e! o. 1e s+s em /ariable SECTOR* $sed o co$! a gi/e! !$mber o. sec ors d$ri!g microdri/e opera io!s: T1e Xero .lag is re $r!ed se 71e! SECTOR reac1es Xero: 8483 848J 848G 848B 848C 848D DECKSECT LD DEC LD LD OR RET BC*ASECTORB BC ASECTORB*BC A*B C Decrease ASECTORB: Se Xero .lag i. SECTOR 1as reac1ed Xero: Fi!is1ed:

THE ?CHECKKNA"E? SUBROUTINE 51e!e/er a ?.ile!ame? is o be compared agai!s 1e c1a!!el !ame CHNA"E* 1is s$bro$ i!e is called: O! e! r+* HL m$s poi! o 1e .ile!ame o be compared* 71ile C m$s co! ai! i s le!g 1: I. 1e compariso! is s$ccess.$l* 1e Xero .lag is re $r!ed se : 848E 843= 8433 8434 843J 843< 843D 843B 843C 843D 843F 844= 8448 8444 844J 844< 844A 844C 844E 84L= CHKKNA"E %USH LD ALLKCHARS LD C% CR INC INC DEC DEC CR LD OR CR ALLCHRK3 LD C% CR INC DCN9 CKNA"KEND %O% RET IX B*N=A A*AHLB AIXN8LB N9*844E*CKNA"KEND HL IX B C N9*8433*ALLKCHARS A*B A 9*844E*CKNA"KEND A*AIXN8LB N3= N9*844E*CKNA"KEND IX 8444*ALCCHRK3 IX Sa/e s ar o. c1a!!el: Le!g 1 o. CHNA"E: Fe c1 a b+ e .rom !ame: Compare i agai!s CHNA"E: C$mp i. i does !o ma c1: %oi! o !e) c1arac er: Decrease ?le!g 1s?: Co! i!$e $! il 1e le!g 1 o. 1e !ame reac1es Xero: CHNA"E remai!i!g le!g 1: E)i i. s$ccess.$l ACHNA"E le!g 1 1as reac1ed XeroB: O 1er7ise c1ec, 1a 1e .ollo7i!g c1arac ers o. CHNA"E are spaces: Sig!al ?$!s$ccess.$l? i. !o spaces: Co! i!$e $! il 1e 71ole CHNA"E 1as bee! e)ami!ed: Res ore c1a!!el s ar address: Fi!is1ed:

THE ?CALCULATEPCO"%ARE CHECKSU"S? ROUTINE T1is ro$ i!e is $sed o calc$la e HDCHK* DESCHK a!d DCHK c1ec,s$ms* or o compare 1e pre/io$s c1ec,s$m agai!s 1e c$rre! o!eI 1e Xero .lag is re $r!ed se i. 1e c1ec,s$ms ma c1: T1e e! r+ poi! is CHKSKHDKR .or HDCHK or DESCHK* or CHKSKBUFF .or DCHK c1ec,s$m: I! bo 1 cases HL m$s co! ai! o! e! r+ 1e s ar address o. 1e bloc, .or 71ic1 1e c1ec,s$m is o be ob ai!ed: 84L8 84LL 84LJ 84LD 84LA 84LC 84LD 84LE 84LF 84E8 CHKSKHDKR LD CR CHKSKBUFF LD CHKSKALL %USH LD NXTKB6TE LD ADD INC ADC CR BC*N===E 84LD*CHKSKALL BC*N=3== HL E*N== A*E A*AHLB HL A*N=8 9*84EL*STCHK T1e bloc, le!g 1: S,ip !e) i!s r$c io!: T1e bloc, le!g 1: Sa/e 1e s ar address: S ar 7i 1 E cleared: Add 1e c$rre! b+ e o 1e pre/io$s s$m: %oi! o !e) loca io!: I!cl$de also 1e carr+: C$mp 71e! A reac1es Xero:

84E4 84EL 84EE 84EJ 84EG 84E< 84EA 84EB 84EC 84ED 84EE

STCHK

DEC LD DEC LD OR CR LD C% LD %O% RET

A E*A BC A*B C N9*84LC*NXTKB6TE A*E AHLB AHLB*A HL

O 1er7ise bala!ce 1e ADD abo/e: Upda e s$m: Decreme! co$! er: Repea $! il 1e co$! er reac1es =: "o/e c1ec,s$m i! o A: Compare 7i 1 pre/io$s c1ec,s$m: S ore !e7 c1ec,s$m: Res ore s ar address: Fi!is1ed:

THE ?RESTORE STREA" DATA? SUBROUTINE T1is s$bro$ i!e is e! ered 7i 1 BC 1oldi!g 1e le!g 1 o. a reclaimed c1a!!el* a!d HL 1oldi!g 1e ?s ream displaceme! ? .or 1a c1a!!el* T1e s ream 1a re.ers o 1is displaceme! Ai:e: 1e s ream a ac1ed o 1e reclaimed c1a!!elB is closed: T1e o 1er s ream displaceme! s are $pda ed i. 1e+ re.er o c1a!!els mo/ed do7! a. er 1e reclaimi!g: 84EF 84J= 84J3 84JE 84J< 84JD 84JA 84JB 84JC 84JD 84JE 84G= 84G3 84GE 84GG 84GD 84GA 84GB 84GD 84GE 84<8 84<3 84<4 84<L 84<G 84<< 84<D 84<A 84<C 84<F 84D= RESTKSTR" %USH LD LD NXTKSTR" LD LD INC LD %O% %USH OR SBC CR LD CR NOTRI@HT CR EX OR SBC EX STOKDIS% LD LD INC LD U%DK%OINT LD INC INC DEC CR LD %O% RET HL A*N8= HL*NEC8J AXK%TRB*HL E*AHLB HL D*AHLB HL HL A HL*DE N9*84GG*NOTRI@HT DE*N==== 84GE*STOKDIS% NC*84<L*U%DK%OINT DE*HL A HL*BC DE*HL HL*AXK%TRB AHLB*E HL AHLB*D HL*AXK%TRB HL HL A N9*84JE*NXTKSTR" AXK%TRKloB*A HL Sa/e s ream displaceme! : Co$! s 8J s reams: S ar 7i 1 STR"SK= address: Sa/e c$rre! address i! o XK%TR: Fe c1 s ream displaceme! .or 1e c$rre! s ream: Res ore displaceme! o. s ream o be closed: Clear carr+: C$mp i. 1is is !o 1e s ream o be closed: Close 1e s ream b+ s ori!g a displaceme! M =: C$mp i. 1e s ream da a does !o !eed o be $pda ed: HL 1olds 1e c$rre! displaceme! : Clear carr+: Ob ai! !e7 displaceme! : "o/e i i! o DE: S ore 1e !e7 displaceme! .or 1e c$rre! s ream: Fe c1 poi! er o. c$rre! Ad/a!ce o da a .or !e) s ream da a: s ream:

C$mp bac, $! il all 8J s reams 1a/e bee! e)ami!ed: Clear XK%TR: Res ore displaceme! : Fi!is1ed: o be

THE ?RESTORE "A% ADDRESSES? SUBROUTINE 51e! a map 1as bee! dele ed* 1e addresses o. 1e o 1er ?1ig1er? maps 1a/e $pda ed: T1e ?RESTK"A%? s$bro$ i!e does 1is: HL s1o$ld 1old o! e! r+ 1e address o. 1e dele ed map: 84D8 84DL 84D< 84DB 84DD 84A= RESTK"A% LD LD LD ADD LD C% BC*N==3= IX*ACHANSB DE*N==8L IX*DE A*AIXN=B N<= Le!g 1 o. map: %oi! o 1e .irs ?s a!dard? o!e: Re $r! i. c1a!!el o 1er

1a!

LCHAN

1e CHANS area is .i!is1ed:

84A3 84A4 84AL 84AG 84AD 84AB 84AD 84B= 84B4 84BE 84BG 84B< 84BD 84BB 84BE 84C8 84C3 84CE 84C< 84CA

RET %USH LD AND C% CR LD LD SBC CR EX OR SBC LD LD %O% LD LD ADD CR

9 HL A*AIXNLB NGF NLD N9*84C8*L%END E*ACH"A%KloB D*ACH"A%K1iB HL*DE NC*84C8*L%END DE*HL A HL*BC ACH"A%KloB*L AC""A%K1iB*H HL E*AIXNDB D*AIXN8=B IX*DE 84DD*LCHAN

Sa/e ?s ar ? o. map: Fe c1 c1a!!el speci.ier: No dis i!c io! be 7ee! ? emporar+? a!d ?perma!e! ? c1a!!els is made: C$mp i. 1is is !o a! >m> c1a!!el: Fe c1 address o. map: C$mp i. 1is map 1as !o bee! mo/ed:

HL M old map address: Clear carr+: Calc$la e ac $al s ar s ore i :

address a!d

L%END

Res ore ?s ar ? o. dele ed map: Fe c1 c1a!!el le!g 1: %oi! o !e) Loop agai!: c1a!!el:

THE ?>"> CHANNEL DATA? TABLE T1e ?3E? b+ es 1a compose 1e i!i ial par 84CC 84CE 84D= 84D8 84D4 84DE 84DG 84DD 84DA 84EL DEF5 DEF5 DEFB DEF5 DEF5 DEF5 DEF5 DEFB DEF" DEFB N===< N===< NCD N88D< N8833 N=3E4 N==== N== > A8= spcB > NFF

o. a! >"> c1a!!el are as .ollo7s'

"ai! RO" ?o$ p$ ? ro$ i!e: "ai! RO" ?i!p$ ? ro$ i!e: >">N<=H Ac1a!!el speci.ierB: S1ado7 RO" ?o$ p$ ? ro$ i!e: S1ado7 RO" ?i!p$ ? ro$ i!e: C1a!!el le!g 1: De.a$l .or CHB6TE: De.a$l .or CHREC: De.a$l .or CHNA"E: De.a$l .or CHFLA@ A?7ri e? c1a!!elB: 1e .ollo7i!g b+ es'

THE ?%REA"BLE DATA? TABLE T1e 1eader a!d 1e da a bloc, preambles are made b+ 84EE 84E< 84EB 84EE DEFB DEFB DEFB DEFB N==*N==*N== N==*N==*N== N==*N==*N== N==*NFF*NFF o .e c1 1e s ar

Eac1 preamble is $sed 1e "icrodri/e $!i :

o. a bloc, o. da a 71e! readi!g .rom

THE ?"OSE? CO""AND SUBROUTINE T1e ac $al "OSE comma!d i!/ol/es 1e ?readi!g? o. a b+ e .rom 1e re;$ired s ream or c1a!!el* a!d 1e! 1e ?7ri i!g? o. 1a b+ e o! o 1e 3!d s ream or c1a!!el: T1e opera io! is repea ed $! il 1e ?e!d o. .ile? co!di io! occ$rs: No e 1a bi L o. FLA@S4 is se o sig!al o 1e CALLKIN% s$bro$ i!e Asee =D=4B 1a 1e ?e!d o. .ile? error is !o o be repor ed: 84F8 84FE 84F< 84FB 84FC 84FF 8L=3 8L=E "OSE SET CALL LD %USH CALL CALL CALL %O% L*AFLA@S4B 8LEE*O%KSTR" HL*ACHANSB BC 8LCG*EXKDSTR3 8LEE*O%KSTR" 8LCG*EXKDSTR3 DE See comme! abo/e: Ope! 1e .irs c1a!!el: S ore c$rre! /al$e =. CHANS: E)c1a!ge DKSTR areas: Ope! seco!d c1a!!el: E)c1a!ge DKSTR areas agai!: I!i ial s ar o. CHANS:

8L=J 8L=D 8L=A 8L=C 8L8= 8L88 8L8L 8L8G 8L8A 8L8B 8L8D 8L8F 8L38 8L34 8L3J 8L3D 8L3A 8L3C 8L3E 8L43 8L4E 8L4J 8L4D 8L4C 8L4F 8LL= 8LL4 8LLL 8LLJ 8LLA 8LLB 8LLE 8LE8 8LEL

LD OR SBC LD ADD LD LD LD RST DEF5 CR CR CR LD LD RST DEF5 CR RES LD %USH CALL CALL CALL %O% LD OR SBC LD ADD LD CALL CALL RET

HL*ACHANSB A HL*DE DE*ANKSTR8B HL*DE ANKSTR8B*HL HL*ANKSTR8B ACURCHLB*HL 8=*CAL<AS N8EEJ C*8L34*"OSEKOUT 9*8L8A*IKA@AIN 8L3E*"OSEKEOF HL*ANKSTR3B ACURCHLB*HL 8=*CALBAS N==8= 8L8L*"KA@AIN L*AFLA@S4B HL*ACHANSB HL 8LCG*EXKDSTR3 8LAL*CLKCHAN 8LCG*EXKDSTR3 DE HL*ACHANSB A HL*DE DE*ANKSTR8B HL*DE ANKSTR8B*HL 8LAL*CLKCHAN 8GBD*RCLKTKCH

"KA@AIN IKA@AIN

C$rre! s ar o. CHANS: Clear carr+ .or a r$e s$b rac io!: HL 1olds 1e le!g 1 o. 1e space i!ser ed a. er 1e 3!d ope!i!g Apossible maps i!ser edB: Fe c1 s ar o. .irs c1a!!el: Calc$la e ?c$rre! ? s ar : S ore i : "a,e ?c$rre! ? 1e 8s c1a!!el Call IN%UTKA i! 1e mai! RO" o read a b+ e: C$mp 7i 1 accep able codes: Repea i. !o da a 1as bee! read: C$mp 71e! EOF 1as bee! reac1ed: "a,e ?c$rre! ? 1e 3!d c1a!!el: Use mai! RO" ?%RINTKA? res ar o se!d 1e b+ e 1ro$g1 1e 3!d c1a!!el Repea 1e 71ole proced$re: Sig!al 1a 1e "OSE comma!d is .i!is1ed: S ore c$rre! CHANS address: E)c1a!ge DKSTR areas* Close 1e seco!d c1a!!el: E)c1a!ge DKSTR areas agai!: Res ore i!i ial address o. CHANS: Fe c1 c$rre! CHANS address: Calc$la e 1e amo$! o. b+ es reclaimed a. er 1e dele io! o. 1e seco!d c1a!!el: Calc$la e 1e !e7 s ar address o. .irs c1a!!el: Close 1e .irs c1a!!el: Reclaim emporar+ c1a!!els a!d s7i c1 o.. dri/e mo ors: Fi!is1ed:

"OSEKOUT

"OSEKEOF

THE ?USE STREA" OR TE"%ORAR6 CHANNEL? SUBROUTINE T1is s$bro$ i!e is $sed .rom 1e "OSE comma!d ro$ i!e abo/e o .e c1 1e s ar address o. 1e c1a!!el a ac1ed o a s ream Ai. 1e comma!d is o. 1e +pe ?"OSE 2N TO :::? B* or o ope! a emporar+ c1a!!el a!d .e c1 i s s ar address i. 1e comma!d is i! 1e .orm ?"OSE >S>IN AI>NA"E>B TO :::?: I! bo 1 cases 1e s ar address o. 1e c1a!!el is re $r!ed i! o NKSTR8: 8LEE 8LE< 8LED 8LEB 8LEC 8LED 8LEF 8LJ3 8LJE 8LJJ 8LJD 8LJB 8LJD 8LG= 8LG8 O%KSTR" LD INC CR DEC RST DEF5 LD LD RET LB C% CR CALL XOR CALL A*ASKSTR8B A 9*8LJJ*O%KCHAN A 8=*CAL<AS N8J=8 HL*ACURCHLB ANKSTR8B*HL A*ALKSTR8B NLD N9*8LGF*CHECKKN 8B3D*O%KTE"%K" A 8GFG*SELKDRISE Fe c1 s ream !$mber: I. s ream !o: is NFF Ai:e: !o!e)is e! B* F$mp o ope! a emporar+ c1a!!el: A 1olds 1e s ream !$mber: Call ?CHANKO%EN? o selec 1e s ream: Fe c1 c1a!!el s ar address: S ore i : Fi!is1ed: Fe c1 c1a!!el speci.ier C$mp i. !o >m>: Ope! a emporar+ >m> c1a!!el: S7i c1 o.. dri/e mo or:

O%KCHAN

8LGL 8LG< 8LGC ?5ro!g .ile 8LGD 8LGE 8LGF 8L<8 8L<4 8L<J 8L<A 8L<B 8L<D 8L<F 8LD8 CHECKKN

LD BIT RET +pe? RST DEFB C% CR CALL LD RET C% CR C% CR

ANKSTR8B*IX 3*ARECFL@B 9

S ore c1a!!el s ar address: Allo7 o!l+ %RINTK +pe .iles 7i 1 "OSE comma!d:

1e

3<*SHKERR N8J NLE N9*8L<B*CHECKKR =EAD*O%KTE"%KN ANKSTR8B*IX NEL 9*8LDE*USEKR NL3 9*8LDE*USEKR

Call

1e error 1a!dli!g ro$ i!e: a! >!> c1a!!el:

C$mp i. !o

CHECKKR

Ope! a emporar+ >!> c1a!!el: S ore c1a!!el s ar address* Fi!is1ed: C$mp 7i 1 > > c1a!!el: C$mp 7i 1 >b> c1a!!el:

?No!se!se i! BASIC? 8LD4 8LDL 8LDE 8LD< 8LDC 8LDD 8LDF 8LA4 USEKR RST DEFB CALL LD %USH %O% SET RET 3<*SHKERR N== =B84*O%KRSKCH ANKSTR8B*DE DE IX G*AIXNLB Call 1e error 1a!dli!g ro$ i!e:

Ope! a perma!e! >b> or > > c1a!!el: S ore c1a!!el s ar address: "a,e IX poi! o s ar o. c1a!!el: "a,e 1e c1a!!el ? emporar+?: Fi!is1ed:

THE ?CLOSE >"OSE> CHANNEL? SUBROUTINE T1is is 1e opposi e s$bro$ i!e o. 1e precedi!g o!e* a!d is $sed o CLOSE 1e c1a!!el $sed b+ 1e "OSE comma!d ro$ i!e: I. SKSTR8 de!o es 1a a s ream 7as $sed* !o ac io! is made: 8LAL 8LAG 8LA< 8LAD 8LAC 8LAE 8LB= 8LBL 8LBG 8LB< 8LBA 8LBB 8LBF 8LC4 8LCJ CLKCHAN LD INC RET LD C% CR LD CALL RET C% RET LD LD CALL RET A*ASKSTR8B A N9 A*ALKSTR8B NLD N9*8LB<*CLKCHKKN IX*ANKSTR8B 83AD*CLOSEK"3 NLE N9 IX*ANKSTR8B ACURCHLB*IX =EFE*SENDKNEOF Fe c1 s ream !$mber: Re $r! i. a s ream 1as bee! $sed Ai:e: SKSTR8ORNFFB: Fe c1 c1a!!el speci.ier: C$mp i. !o >m> c1a!!el: Fe c1 c1a!!el s ar address: Close 1e >m> c1a!!el: Fi!is1ed: Re $r! 7i 1 >b> a!d > > c1a!!els: Fe c1 c1a!!el s ar addre$s: "a,e 1e >!> c1a!!el 1e ?c$rre! ? o!e Close 1e >!> c1a!!el: Fi!is1ed:

CLKCHKKN

THE ?EXCHAN@E DSTR8 AND DSTR3 CONTENTS? SUBROUTINE T1is s$bro$ i!e per.orms e)ac l+ 1e same as, as 1e EXKDKSTR s$bro$ i!e a =EDF* e/e! i. i is slig1 l+ di..ere! : T1e DKSTR8 area is copied i! o 1e DKSTR3 o!e* a!d /iceK/ersa: 8LCG 8LCA 8LCD EXKDSTR3 LD LD LD DE*NECDJ HL*NECDE B*N=< S ar o. 8s area: S ar o. 3!d area: Le!g 1 o. bo 1 areas:

8LCF 8LD= 8LD8 8LD3 8LD4 8LDL 8LDE 8LDJ 8LDG 8LDD

ALLKB6TK3 LD LD EX LD LD EX INC INC DCN9 RET

A*ADEB C*AHLB DE*HL AHLB*C ADEB*A DE*HL HL DE 8LCE*ALLKB6TK3

Fe c1 b+ e .rom DKSTR8: Fe c1 b+ e .rom DKSTR3: E)c1a!ge poi! ers: S ore i! o DKSTR8: S ore i! o DKSTR3: E)c1a!ge poi! ers agai!: Ad/a!ce poi! ers: Co! i!$e .or all b+ es i! DKSTR areas: Fi!is1ed: 1e

THE ?SASE DATA BLOCK INTO "ICRODRISE? SUBROUTINE T1is is 1e ac $al SASE comma!d re.erred o 1e "icrodri/e Asee =<3FB: T1e ?D? b+ es 1a .orm 1e ?1eader i!.orma io!? are collec ed .rom 1e HD /ariables a!d passed o 1e c1a!!el da a bloc,I 1e! 1e memor+ bloc,* 71ose ?s ar ? a!d ?le!g 1? are 1eld i! 1e s+s em /ariables HDK=D a!d HDK=B* is 7ri e! o! o 1e "icrodri/e Apro/ided 1a 1ere is s$..icie! space a/ailable o! car ridgeB: 8LDA 8LDD 8LE= 8LE3 8LEL SAKDRISE LD CALL IN AND CR A*ADKSTR8B 8GFG*SELKDRISE A*ANEFB N=8 N9*8LE<*STARTKSA Fe c1 dri/e !$mber: T$r! o! dri/e mo or: Co! i!$e o!l+ i. 1e 7ri eKpro ec ab 7as !o remo/ed:

?Dri/e ?7ri e? pro ec ed? 8LEJ 8LEG 8LE< 8LEB 8LEE 8LF8 8LFE lLFG STARTKSA RST DEFB LD LD CALL BIT CR CALL 3=*SHKERR N=E HL*AHDK=DB AECELB*HL 8B3D*O%KTE"%K" =*ACHFLA@B N9*8LFC*NE5KNA"E 83AD*CLOSEK"3 Call 1e error 1a!dli!g ro$ i!e: Fe c1 ?s ar ? o. da a: S ore i i! o ANKSTR3N3B: Ope! a emporar+ >m> c1a!!el: Co! i!$e o!l+ i. 1is .ile does !o alread+ e)is i! 1e car ridge: Close 1e c1a!!el a!d repor 1e error

?5ri i!g 8LFA 8LFB 8LFC 8E== 8E=4 8E=J 8E=< 8E=D 8E=C 8E=D 8E=E 8E88 8E8L 8E8G 8E8D 8E8A 8E8D 8E38 8E33 8E3L

o a ?read? .ile? RST DEFB 3=*SHKERR N=C 3*ARECFL@B A*ACHDRISB 8GEG*SELKDRISE IX HL DE*N==E3 HL*DE DE*HL HL*NECEJ BC*N===D ACHB6TEKloB*C DbE HL*N===D BC*AHDK=BB HL*BC H H Call 1e error 1a!dli!g ro$ i!e:

NE5KNA"E

SET LD CALL %USH %O% LD ADD EX LD LD LD LDIR %USH LD LD ADD SRL INC

Sig!al ?!o a %RINT .ile?: Fe c1 dri/e !$mber: S ar mo or: "a,e HL poi! o 1e b$..er:

Address o. HDK==: Le!g 1 o. HD /ariables: C$rre! posi io! is ?D?: S ore 1eader i!.orma io!s: Sa/e address o. ?.irs .ree b+ e?: Add D o ?da a le!g 1?: H 1olds INTAle!g 1PEl3B* i:e: !$mber o. sec ors re;$ired: Allo7 .or a .$r 1er EOF sec or:

8E3E 8E3J 8E3D 8E3A 8E3B 8E3D

%USH CALL %O% LD C% CR

HL 8D4<*FREESECT HL A*E H NC*8E4=*SAKDRIK3

Sa/e H regis er: Calc$la e i! o E 1e !$mber o. ?.ree? sec ors: Res ore H: C$mp i. 1ere are s$..icie! ?.ree? sec ors:

?"icrodri/e .$ll? 8E3E 8E3F 8E4= 8E48 8E4L 8E4< 8E4D 8E4A 8E4D 8E8E 8EL8 8EL4 8ELL 8ELE 8EL< 8ELD 8ELB 8ELC 8ELE 8EE= 8EE8 8EE3 8EEL 8EEG 8EED 8EEC 8EEE 8EJ3 8EJE 8EJ< 8EJD 8EJB 8EJE 8EG3 8EGL 8EGG 8EGD 8EGA 8EGD SAKDRIK4 SAKBRIK3 RST DEFB %O% LD LD LD OR CR LD C% CR %USH %USH CALL %O% %USH %O% LD ADD EX %O% SAKDRIK5R LDI INC CR INC CR SAKDRIKL SET CALL LD DEC CR LD RES LD LD CR ENDKSAKDR XOR CALL C% 3=*SHKERR N=F DE HL*AECELB BC*AHDK=BB A*B C 9*8EEE*SAKDRIKL A*ACHB6TEK1iB N=3 N9*8EE3*SAKDRIK5R HL BC 834D*5RITEK%RC BC IX HL DE*N==E3 HL*DE DE*HL HL ACHB6TEKloB N9*SAKDRIK4 ACHB6TEK1iB 8E4<*SAKDRIK4 8*ARECFL@B 83=D*5RITEK%RC A*ACO%IESB A 9*8EGD*ENDKSAKDR ACO%IESB*A 8*ARECFL@B A*N== ACHRECB*A 8LFC*NE5KNA"E A 8GFG*SELKDRISE 8=CL*DELK"KBUF Call 1e error 1a!dli!g ro$ i!e:

Res ore address o. ?.irs .ree b+ e? i! 1e b$..er: Fe c1 ?s ar ? o. bloc, .rom ANKSTR3N3B Asee 8LEBB: Fe c1 ?le!g 1? o. da a: C$mp 71e! i reac1es Xero: C$mp $! il .illed: 1e b$..er space 1as bee!

Sa/e regis ers: 5ri e 1is da a bloc, o! o car ridge: Res ore co$! er: "a,e DE poi! o 1e s ar o. 1e b$..er:

Res ore poi! er: "o/e a b+ e o 1e b$..er: I!creme! CHB6TE a!d go bac, i! o loop: "ar, as ?EOF? record: 5ri e 1e las da a bloc,: Decrease CO%IES a!d e)i i. i reac1ed Xero: S ore !e7 /al$e: Sig!al ?!o EOF?: Clear CHREC: "a,e a!o 1er cop+: T$r! o.. "icrodri/e mo or: E)i /ia 1e dele eKc1a!!el s$bro$ i!e:

1e

1as

THE ?@ET HEADER INFOR"ATION FRO" "ICRODRISE? SUBROUTINE T1is s$bro$ i!e is $sed o collec 1e .irs !i!e b+ es o. 1e .ile i! o 1e >m> c1a!!el b$..er* i:e: 1e ?1eader i!.orma io!? 71e! 1a!dli!g .iles 71ic1 1a/e bee! 7ri e! $si!g 1e SASE comma!d Asee =<C<B: T1ese b+ es are copied i! o 1e HD s+s em /ariables: 8E<= 8E<4 8E<J FK"KHEAD LD LD CALL HL*AECE8B AECELB*HL 8B3D*O%KTE"%K" "o/e ?s ar ? o. da a i! o NECEL: Ope! a emporar+ >m> c1a!!el:

8E<D 8E<D ?File !o 8E<F 8ED= 8ED8 8EDE FKHDK3 .o$!d?

BIT CR

=*ACHFLA@B 9*8ED8*FKHDK3

Co! i!$e o!l+ i.

1e .ile is .o$!d:

RST DEFB BIT CR +pe? RST DEFB FKHDK4 %USH %O% LD ADD LD LD LDIR RET

3=*SHKERR N88 3*ARECFL@B N9*8EDD*FKHDK4

Call

1e error 1a!dli!g ro$ i!e: is !o a

Co! i!$e o!l+ i. i ?%RINTK +pe? ile:

?5ro!g .ile 8EDG 8ED< 8EDD 8EDB 8EDC 8EDF 8EA= 8EA4 8EAJ 8EA<

3=*SHKERR N8J IX HL DE*N==E3 HL*DE DE*NECEJ BC*N===D

Call

1e error 1a!dli!g ro$ i!e: 1e s ar o. 1e E83Kb+ e

%oi! o b$..er:

Address o. HDK== /ariable: Le!g 1 o. ?1eader i!.orma io!?: Cop+ 1eader i! o HD /ariables: Fi!is1ed:

THE ?LOAD OR SERIF6 BLOCK FRO" "ICRODRISE? SUBROUTINE T1is s$bro$ i!e is called .rom 1e ?LOAD OR SERIF6? s$bro$ i!e Asee =AJJB o load or /eri.+ Adepe!di!g $po! 1e s a e o. bi G o. FLA@S4B a bloc, o. b+ es i! memor+* s ar i!g .rom 1e address 1eld i! 1e HL regis er pair: T1e s$bro$ i!e i!i iall+ calc$la es 1e !$mber o. records 1a composes 1e .ileI 1e! s ar s o collec records a!d o LOAD or SERIF6 1e da a comi!g i! 1e E83KB+ e b$..er: 51e! eac1 record 1as bee! loaded or /eri.ied* 1e rele/a! map bi is se * so as o pre/e! 1e record o be $sed agai!: T1e map co! e! s are res ored o 1eir i!i ial /al$es be.ore re $r!i!g: No e 1a 1e records ma+ be collec ed .rom 1e "icrodri/e i! a ra!dom order: 8EAD 8EAC 8EAF 8EB3 8EBE 8EBJ 8EB< 8EBD 8EBA 8EBD 8EC= 8EC4 8ECJ 8ECD 8ECA 8ECC 8ECF 8ED3 8EDL 8EDE 8ED< 8EDD 8EDD 8EDF 8EE3 LSK"CH LD LD LD LD ADD SRL INC LD LD CALL LD LD LD OR SBC LD LD %USH %O% LD ADD LD CR CALL LD AHDK=DB*HL E*AIXN<4B D*AIXN<LB HL*N===< HL*DE H H A*H AHDK=BB*A 8J84*SAK"A% DE*N===D L*ARECLENKloB H*ARECLENK1iB A HL*DE ARECLENKloB*L ARECLENK1iB*H IX HL DE*N==EB HL*DE DE*AHDK=DB 8EFD*LOOKK"A% 8JJC*FKREC3 A*ARECNU"B S ore ?s ar ?: @e ?!e7? le!g 1 direc l+ .rom 1e ?1eader i!.orma io!? 1eld i! 1e b$..er: I!crease ?le!g 1? b+ <: T1e !$mber o. records 1a composes 1e .ile is comp$ ed AINTAle!g 1PEl3BB I!cl$de 1e ?EOF? record: Sa/e 1is /al$e i! o HDK=B: Sa/e 1e map i! o 1e s ac,: S$b rac 1e ?1eader le!g 1? .rom 1e ?bloc, le!g 1?:

S ore ac $al da a bloc, le!g 1: "a,e HL poi! a. er 1e !i!e b+ es o. ?1eader i!.orma io!?: Fe c1 ?s ar ? sa/ed a 8EAD: C$mp .or7ard: Fe c1 a record: Repea i. RECNU" is s ill Xero:

USEKREC

8EEE 8EEJ

OR CR

A 9*8EDF*USEKREC

No7 some calc$la io! is per.ormed o ob ai! i! o DE 1e address .rom 71ic1 1e da a comi!g .rom 1e c$rre! record* 7ill be loaded or /eri.ied: HL 7ill poi! o 1e E83Kb+ e b$..er: 8EE< 8EED 8EEA 8EEB 8EED 8EF= 8EF8 8EF3 8EFL 8EFE 8EF< 8EFD 8EFA 8EFD 8EFF 8J== 8J=8 8J=3 8J=4 8J=J 8J=D 8J=A 8J=D 8J=F 8J83 RLA DEC LD LD LD ADD EX %USH %O% LD ADD EXX CALL CR LD OR LD EXX CALL LD DEC LD CR CALL RET A D*A E*NFG HL*AHDK=DB HL*DE DE*HL IX HL BC*N==E3 HL*BC 83DA*CHKK"A%K3 N9*8EDF*USEKREC A*AHLB B AHLB*A 8JL<*LDKSEK" A*AHDK=BB A AEDK=BB*A N9*8EDF*USEKREC 8J3D*REK"A% No7 A M RECNU"(3: AMRECNU"(3K8: Use i as 1ig1 b+ e: E)cl$de !i!e b+ es o. i!i ial 1eader: Fe c1 ?s ar ?: Calc$la e ?s ar ? o $se 7i 1 1is record: "o/e i o DE: "a,e HL poi! o 1e s ar o. 1e E83Kb+ e b$..er: Use al er!a e regis ers: C1ec, bi s a e .or 1e c$rre! record: Repea i. 1is record 1as alread+ bee! .e c1ed: Se map bi o pre/e! 1e record .rom bei!g .e c1ed agai!: Res ore i!i ial regis er /al$es: Load or /eri.+ 1is record: Fe c1 !$mber o. records s ored a 8EBA abo/e: Decrease i a!d repea $! il all records 1a/e bee! collec ed: Res ore map co! e! s: Fi!is1ed: 1e ?43? b+ es 1a

LOOKK"A%

THE ?SASE "ICRODRISE "A% CONTENTS? SUBROUTINE T1is s$bro$ i!e* called .rom LSK"CH abo/e* simpl+ copies .orm 1e "icrodri/e map i! o 1e mac1i!e s ac,: 8J84 8J8L 8J8G 8J8A 8J8D 8J3= 8J38 8J33 8J34 8J3L 8J3E 8J3J 8J3G 8J3D 8J3C SAK"A% %O% LD LD LD LD SAK"A%KL% LD LD INC LD LD INC %USH DCN9 LD C% HL ASECTORB*HL L*ACH"A%KloB H*ACH"A%K1iB BC*N8=== E*AHLB AHLB*C HL D*AHLB AHLB*C HL DE 8J3=*SAK"A%KL% HL*ASECTORB AHLB

S ore re $r! address i! a c$rre! l+ $!$sed /ariable: Fe c1 map s ar address: B co$! s 8J passes Amap le!g 1P3B Fe c1 a b+ e .rom 1e map: T1e! clear map b+ e: %oi! o !e) loca io!: Fe c1 a!o 1er map b+ e: T1e! clear map b+ e: %oi! o !e) loca io!: Sa/e 1e 7o collec ed b+ es i! o 1e s ac,: Co! i!$e 1e loop: Fe c1 re $r! address: "a,e a! i!direc re $r!: 1e op o. 1e

THE ?RESTORE "ICRODRISE "A% CONTENTS? SUBROUTINE E)ac l+ 1e opposi e o. 1e s$bro$ i!e abo/e' 1e 43 b+ es a s ac, are collec ed a!d copied i! o 1e "icrodri/e map: 8J3D REK"A% %O% HL Fe c1 re $r! address:

8J3E 8J48 8J4L 8J4G lJ4A 8J4B 8J4D 8J4E 8J4F 8JL= 8JL8 8JL3 8JLL 8JLG

LD LD LD LD ADD LD REK"A%KL% %O% LD DEC LD DEC DCN9 LD C%

ASECTORB*HL L*ACH"A%KloB H*ACH"A%K1iB DE*N==8F HL*DE B*N8= DE AHLB*D HL AHLB*E HL 8J4D*REK"A%KL% HL*ASECTORB AHLB

S ore i i! a c$rre! l+ $!$sed /ariable: Fe c1 map address: Ad/a!ce o 1e las map loca io!:

Co$! s ?mapP3? b+ es: Fe c1 7o b+ es: S ore .irs b+ e i! 1e map: %re/io$s loca io!: S ore seco!d b+ e: %re/io$s loca io!: Co! i!$e 1e loop: Fe c1 re $r! address: "a,e a! i!direc re $r!:

THE ?LDKSEK"? SUBROUTINE T1is s$bro$ i!e per.orms 1e ac $al LOAD or SERIF6 opera io!: I is e! ered 7i 1 HL 1oldi!g 1e da a s ar address* a!d 7i 1 DE 1oldi!g 1e address .rom 71ic1 1e da a 1a/e o be loaded or /eri.ied: 8JL< 8JLB 8JLE 8JE8 8JE4 8JEE 8JEG 8JE< 8JED 8JEA 8JEC 8JED 8JEE 8JEF 8JJ= 8JJ8 8JJ4 LDKSEK" LD LD LD BIT CR LDIR RET LD C% CR INC INC DEC LD OR CR RET C*ARECLENKloB B*ARECLENK1iB A*AFLA@S4B G*A N9*8JE<*SEK"KE A*ADEB AHLB N9*8JJL*SEKFAIL HL DE BC A*B C N9*8JE<*SEK"KE Fe c1 record le!g 1: C$mp i. SERIF6i!g: LOAD 1e da a: Fi!is1ed: Fe c1 a! e)is i!g b+ e: Compare agai!s loaded o!e: C$mp i. 1e+ do !o ma c1: %oi! o !e) loca io!s: Repea $! il /eri.ied: Fi!is1ed: 1e bloc, 1as bee!

SEK"KE

?Seri.ica io! 1as .ailed? 8JJL 8JJE SEKFAIL RST DEFB 3=*SHKERR N8E Call 1e error 1a!dli!g ro$ i!e:

THE ?FETCH A RECORD FRO" "ICRODRISE? SUBROUTINE T1is s$bro$ i!e is $sed o read .rom 1e "icrodri/e $!i * a record o. 1e c$rre! .ile Asa/ed 7i 1 a SASE comma!dB: A! error occ$rs i. !o record is .o$!d a. er .i/e passes o. 1e car ridge ape: T1e e! r+ poi! is FKREC3 71e! 1e "icrodri/e mo or is alread+ $r!ed o!: 8JJJ 8JJD 8JJC 8JJF 8JG4 8JGJ 8JG< 8JGA 8JGD 8JGF 8J<8 8J<3 FKREC8 LD CALL EKREC3 LD LD UNTILFISE CALL CR CR CALL CR %USH %O% LD A*ACHDRISB 8GEG*SELKDRISE BC*N=LFB ASECTORB*BC 88AE*@KHDKRC C*8J<A*FKERROR 9*8J<A*FKERROR 83DA*CHKK"A%K3 N9*8J<A*FKERROR IX HL DE*N==E3 Fe c1 dri/e !$mber: S ar dri/e mo or: Co$! .i/e passes o.

1e

ape:

Fe c1 1eader a!d record: C$mp 7i 1 a!+ error* or 7i 1 $!$sed sec ors: C1ec, map bi : C$mp also 7i 1 alread+ .e c1ed records: "a,e HL poi! o 1e s ar o. 1e E83Kb+ e b$..er:

8J<E 8J<J 8J<D 8J<A 8J<D

FKERROR .o$!d?

ADD CALL RET CALL CR

HL*DE 84LJ*CHKSKBUFF 9 8483*DECKSECT N9*8JG4*UNTILFISE

Re $r! o!l+ 7i 1 correc

c1ec,s$m: 1e

Decrease SECTOR: A!d co! i!$e $! il .i/e passes o. ape 1a/e bee! made: Call 1e error 1a!dli!g ro$ i!e:

?File !o 8J<F 8JD=

RST DEER

3=*SHKERR N88

THE ?RESTORE ADDRESS OF >FILENA"E>? ROUTINE A. er 1e ?i!ser io!? o. some space* 1e ?.ile!ames? 71ose s ar addresses are 1eld i! o ANKSTR8N3B a!d ANKSTR3N3B 1a/e bee! mo/ed $p i! 1e 7or,space area: T1is ro$ i!e is e! ered 7i 1 HL 1oldi!g 1e c1a!!el s ar address* a!d 7i 1 BC 1oldi!g 1e !$mber o. ?i!ser ed? b+ es: T1e addresses 1eld i! o ANKSTR8N3B a!d ANKSTR3N3B are 1e! $pda ed* $!less 1e .ile!ames are s ored i! o ?!oKd+!amic? areas Ai:e: be.ore 1e c1a!!el or a. er STKENDB: 8JD8 8JD3 8JD4 8JDG 8JDA 8JDE 8JDF 8JA4 8JAJ lJAA 8JAB RESTKNKAD %USH %USH LD CALL LD %O% LD CALL LD %O% RET HL HL DE*ANKSTR3N3B 8JAC*TSTK%LACE ANKSTR3N3B*DE HL DE*ANKSTR8N3B 8JAC*TSTK%LACE ANKSTR8N3B*DE HL Sa/e ?s ar Res ore s ar .ile!ame: o. c1a!!el? address o. 7ice: 1e seco!d

Res ore c1a!!el s ar address: Res ore s ar address o. 1e .irs .ile!ame: Res ore c1a!!el s ar Fi!is1ed: address:

T1e s$bro$ i!e 71ic1 calc$la es 8JAC 8JAD 8JAF 8JB= 8JB4 8JBE 8JBJ 8JBG 8JB< 8JBD TSTK%LACE SCF SBC RET LD SBC RET EX ADD EX RET

1e !e7 .ile!ame address is

1e .ollo7i!g'

HL*DE NC HL*ASTKENDB HL*DE C DE*HL HL*BC DE*HL

Allo7 .or a .$r 1er b+ e: No ac io! is made i. 1e .ile!ame is be.ore 1e c1a!!el* or i. i is a. er STKEND: Add o DE 1e !$mber o. ?i!ser ed? b+ es* so re $r!i!g 1e !e7 .ile!ame address: Fi!is1ed: o NFFB:

8JBA:::8G=G

U!$sed loca io!s Aall se

THE ?CLOSEKSTREA"? ROUTINE T1e mai! RO" ?CLOSE? ro$ i!e a N8JEE is ra 1er i!ade;$a e o deal 7i 1 I! er.ace?s c1a!!els' Firs * i 1as a b$g 1a ma+ cras1 1e s+s em 71e! a emp i!g o CLOSE a! $!ope!ed s ream: T1is is beca$se 1e CLOSEK3 ro$ i!e a N8G=8 does !o c1ec, 71e 1er 1e displaceme! da a A.o$!d b+ STRKDATA* N8G8EB is N==== Asig!alli!g a CLOSEd s reamB: T1$s a c1a!!el speci.ier is loaded .rom a 7ro!g loca io! ACHANSN4B* a!d .i!all+ a call o 1e INDEXER ro$ i!e is made o searc1 .or 1e A7ro!gB speci.ier i! o 1e ?s ream loo,K$p able?* 1is 7ill res$l i! a s+s em cras1: Seco!dl+* 1a ro$ i!e 7ill o!l+ clear 1e s ream da a i! STR"S area a!d is !o able o ma!ip$la e a!d reclaim 1e i! er.ace?s c1a!!els as re;$ired: So 1e s1ado7 RO" is pagedKi! b+ a! i!s r$c io! .e c1 a 1e address N8G=< Ai:e:* 1e middle o. 1e CLOSEK3 ro$ i!e i! 1e mai! RO"B: T1e .ollo7i!g ro$ i!e is 1e! $sed:

8G=< 8G=D 8G=A 8G=C 8G=E 8G83 8G8E

CLOSEKCL

INC RST SRL SUB RES CALL C%

HL 4=*NE5SARS A N=4 8*AFLA@S4B 8G8<*CLOSE =EC8*END8

T1e ?INC HL? a N8G=< i! mai! RO": Crea e !e7 /ariables i. re;$ired: Ra!ge o. s ream !$mber is N=4::N83: A!d !o7 N==::N=F: Sig!al ?$!se! b+ es i! 1e b$..er 1a/e o be se! ?: Close 1e s ream: Fi!is1ed:

THE ?CLOSE? CO""AND SUBROUTINE A!+ s ream N== o N=F ma+ be CLOSEd b+ loadi!g 1e s ream !$mber i! o A a!d 1e! calli!g 1is s$bro$ i!e: T1e $!se! b+ es i! ?7ri e?K +pe .iles are se! or los depe!di!g $po! 71e 1er bi 8 o. FLA@S4 is rese or se : Firs a call o STRKDATA8 i! 1e mai! RO" is made o .e c1 i! o BC 1e ?s ream da a? .or 1e gi/e! s ream* a!d o ma,e HL poi! o 1e .irs o. 1e 7o da a b+ es: 8G8< 8G8D 8G8B 8G8C 8G8D 8G8E 8G8F 8G3= 8G34 8G3L 8G3E 8G3J 8G3G 8G3D lG3C 8G3F 8G4= 8G48 8G43 8G4L 8G4E 8G4J 8G4G 8G4< 8G4D 8G4C 8G4D 8G4E 8G4F 8GL= 8GL8 8GLL 8GLE 8GLJ 8GLG 8GL< 8GLD 8GLB 8GLD 8GLF No7 .ollo7s 8GE8 8GEE CLOSE RST DEF5 LD OR RET %USH %USH LD DEC ADD EX RST DEF5 LD LD ADD %O% SCF SBC %O% RET %USH %USH EX LD INC INC INC INC LD LD ADD LD INC LD %USH C% CR C% CR 8=*CALBAS N8G3G A*C B 9 BC HL HL*ACHANSB HL HL*BC AS%B*HL 3=*CALBAS N8JEB HL*ACHANSB DE*N==8L HL*DE DE HL*DE BC NC BC DE DE*HL ACURCHLB*HL HL HL HL HL A*AHLB DE*N===E HL*DE E*AHLB HL D*AHLB DE NL3 9*8GE8*CLKRSKCH NEL N9*8GEE*CLKNKCH Call STRKDATA8: Re $r! i. 1e s ream is alread+ CLOSEd Ai:e: s ream da a M =B:

"a,e HL poi! o 1e s ar o. 1e c1a!!el a ac1ed o 1e s ream o be closed: HL !o7 1olds 1e address o. 1e s ream da a: A call i! 1e middle o. 1e mai! RO" ?CLOSE? ro$ i!e is made o $pda e STR"S co! e! s: "a,e HL poi! o 1e .irs o. 1e ?!e7? c1a!!els* Res ore c1a!!el s ar address: Re $r! i. 1e c1a!!el is !o a ?!e7? o!e: Sa/e s ream da a* a!d c1a!!el s ar address: "o/e s ar o. c1a!!el o HL: "a,e 1e c1a!!el ?c$rre! ?: Ad/a!ce HL o 1e c1a!!el speci.ier:

Fe c1 c1a!!el speci.ier: %oi! s o c1a!!el le!g 1: Fe c1 c1a!!el le!g 1: Sa/e 1e ?le!g 1?: C$mp 7i 1 >b> c1a!!el: C$mp 7i 1 >!> a!d >m> c1a!!els:

1e CLOSE ro$ i!e .or BIT CR

1e > > a!d >b> c1a!!els: C$mp i. doi!g a CLEAR2: Ai:e: do !o se!d a!+ da aB:

CLKRSKCH

8*AFLA@S4B N9*8GGF*RCL"KCH

8GEG 8GED 8GEC 8GEE 8GJ=

CLKNKCH

LD CALL CR C% CR

A*N=D =CEA*BCHANKOUT 8GGF*RCL"KCH NLE N9*8GJD*CLK"KCH

Se!d a carriage re $r! o/er RS343: C$mp o reclaim 1e c1a!!el: C$mp 7i 1 >m> c1a!!el:

T1is is 8GJ3 8GJJ 8GJ< 8GJB Fi!all+ 8GJD 8GJF 8GG8 8GG3 8GGL 8GGE 8GGD lGGC 8GGF 8G<= 8G<8 8G<3 8G<4

1e CLOSE ro$ i!e .or BIT CR CALL CR

1e >!> c1a!!el* C$mp i. doi!g a CLEAR2: Se!d remai!i!g co! e! s o. >!> b$..er:

8*AFLA@S4B N9*8GGF*RCL"KCH =EFE*SENDKNEOF 8GGF*RCL"KCH

1e CLOSE ro$ i!e .or C% CR %O% %O% %O% BIT C% C% %O% %O% %USH RST DEF5

1e >m> c1a!!el: C$mp i. !o >m> c1a!!el:

CLK"KCH

NLD N9*8GGF*RCL"KCH DE IX DE 8*AFLA@S4B 9*83AD*CLOSEK"3 8=CL*DELK"KBUF BC HL BC 8=*CALBAS N8DE<

Remo/e ?c1a!!el le!g 1?: S ar o. c1a!!el: S ream da a: Se!d 1e EOF record o! microdri/e i. !o $si!g CLEAR2: Reclaim >m> c1a!!el: C1a!!el le!g 1: C1a!!el s ar address: Sa/e ?le!g 1? agai!: Call RECLAI"K3 o dele e

RCL"KCH

1e c1a!!el:

NOTE' I. 1e BREAK ,e+ is pressed 71ile 1e b$..er is se! as EOF bloc,* 1e ro$ i!e does !o reac1 RCL"KCH or DELK"KBUF* a!d i is impossible o dele e 1e c1a!!el .rom BASIC $!less $si!g 1e NE5 comma!d: T1e b$g s1o$ld be elimi!a ed b+ ma,i!g 1e c1a!!el ? emporar+?* b+ se i!g bi G o. c1a!!el speci.ier Aa 8GL=::8GL8B* so 1e c1a!!el 7ill be dele ed 71e! a!+ error occ$rs: No7 all da a re.erri!g $pda ed: 8G<E 8G<J 8G<D 8G<A 8G<B 8G<C 8G<D 8GD= 8GD8 8GD3 8GD4 8GDL 8GDE 8GDG 8GDD 8GDA 8GDB 8GDD 8GDE 8GA8 8GA3 8GA4 8GAL XOR LD U%DKSTR" LD INC LD DEC LD %O% %O% %USH %USH AND SBC CR EX AND SBC EX LD LD INC LD U%DKNXTKS LD o 1e s ream a ac1ed o 1e c1a!!els mo/ed do7! are

A HL*NEC8J E*AHLB HL D*AHLB HL AXK%TRB*HL BC HL HL BC A HL*DE NC*8GAL*U%DKNXTKS DE*HL A HL*BC DE*HL HL*AXK%TRB AHLB*E HL AHLB*D HL*AXK%TRB

S ar 7i 1 s ream =: Address o. da a .or s ream =: Fe c1 s ream da a: %oi! o 1e .irs b+ e: S ore address i! o XK%TR: Le!g 1 o. c1a!!el: S ream da a .or closed c1a!!el: C$mp i. 1e s ream da a .o$!d is lo7er 1a! 1a o. 1e closed s ream Ai:e: c1a!!el 1as !o bee! mo/edB: HL 1olds 1e .e c1ed S ream da a: Calc$la e i! o DE 1e !e7 s ream da a o be s ored: Res ore s ream da a address: S ore !e7 s ream da a: "a,e HL poi! o !e) s ream da a:

8GAG 8GA< 8GAD 8GAA 8GAC 8GAE 8GB3 8GB4 8GBL 8GB<

INC INC INC C% CR LD %O% %O% RES RET

HL HL A N8= C*8G<D*U%DKSTR" AXK%TRK1iB*N== HL HL 8*AFLA@S4B

I!creme! s ream !$mber: Loop .or all 8J s reams: Clear XK%TR: Remo/e ?c1a!!el le!g 1? a!d ?s ream da a?: Clear ?CLEARPCLOSE? .lag: Fi!is1ed:

THE ?RECLAI" TE"%ORAR6 CHANNELS? SUBROUTINE T1is s$bro$ i!e is called o reclaim .rom 1e CHANS area all ? emporar+? c1a!!els Ai:e: 7i 1 bi G o. c1a!!el speci.ier se B: Also 1e dri/e mo ors are $r!ed o..: T1e ro$ i!e is al7a+s called 71e! a!+ error repor occ$rs* a!d o! some o 1er occasio!s: 8GBD 8GBD 8GC= 8GC3 8GCE 8GCG 8GCD 8GCB 8GCD 8GCE 8GD8 8GD3 8GDE 8GDG 8GDD 8GDC 8GDE 8GE= 8GE3 8GEE 8GEG 8GE< 8GED 8GEB 8GED lGF= 8GF4 8GFE RCLKTKCH EXKCHANS LD LD ADD LD C% CR LD OUT XOR C% RET IX*ACHANSB DE*N==8L IX*DE A*AIXN4B N<= N9*8GD3*CHKKTE"%" A*NEE ANEFB*A A 8GFG*SELKDRISE A*AIXNLB NCD N9*8GDE*CHKKTE"%N 8=CL*DELK"KBUF 8GBD*RCLKTKCH NCE N9*8GED*%TKNKCHAN BC*N=88L IX HL 8=*CALBAS N8DE< 8GBD*RCLKTKCH E*AIXNDB D*AIXN8=B IX*DE 8GC3*EXKCHANS "a,e IX poi! c1a!!el: o .irs ?!o!Ks a!dard?

C$mp i. 1e CHANS area is !o .i!is1ed: Se!d a sig!al o 1e i! er.ace: o $r! o..

Re $r! /ia SELUDRISE dri/e mo ors: Ne/er e)ec$ ed:

CHKKTE"%" LD C% CR CALL CR CHKKTE"%N C% CR LD %USH %O% RST DEF5 CR %TKNKCHAN LD LD ADD CR

Fe c1 c1a!!el speci.ier: C$mp i. !o a emporar+ >m> c1a!!el: Reclaim >m> c1a!!el: Loop agai!: C$mp i. !o a emporar+ >!> c1a!!el: Le!g 1 o. >!> c1a!!el: "a,e HL poi! o s ar o. c1a!!el: Call RECLAI"K3 o reclaim c1a!!el:

Loop agai!: Fe c1 c1a!!el le!g 1: %oi! o !e) c1a!!el: Loop .or 1e 71ole CHANS area:

THE ?SELECT DRISE "OTOR? SUBROUTINE T1is s$bro$ i!e is also called b+ $si!g ?1oo, code? N38: O! e! r+* A m$s 1old a dri/e !$mber i! 1e ra!ge 8: :<I 1e appropria e dri/e mo or is $r!ed o!* a!d a! error occ$rs i. 1e speci.ied dri/e is !o prese! Aor i. i co! ai!s !o car ridge* or co! ai!s a! $!.orma ed car ridgeB: I. A 1olds Xero* all mo ors are $r!ed o..: No e 1a 1is s$bro$ i!e re $r!s 7i 1 i! err$p s disabled i. a mo or 1as bee! s7i c1ed o!: 8GFG 8GF< 8GFA 8GFC 8GFF 8<== 8<=8 SELKDRISE %USH C% CR CALL EI %O% RET HL N== N9*8<=3*TURNKON 8<3A*S5K"OTOR HL Sa/e HL regis er pair: C$mp i. a dri/e mo or is o be $r!ed o!: O 1er7ise s7i c1 o.. all mo ors: E!able i! err$p s: Res ore HL: Fi!is1ed:

8<=3 8<=4 8<=J 8<=D 8<=A 8<=B 8<=C 8<=E 8<88 8<84 8<8J 8<8< 8<8A 8<8C 8<8E 8<8F 8<3= 8<38 8<33 8<34 8<3E

TURNKON

DI CALL LD TONKDELA6 DEC LD OR CR LD RE%TEST LD C"KK%RES CALL IN AND CR DCN9 %O% RET NO%RES DEC LD OR CR CALL

8<3A*S5K"OTOR HL*N84<< HL A*H L N9*8<=D*TONKDELA6 HL*N84<< B*N=J 8<ED*TESTKBRK A*ANEFB N=L N9*8<3=*NO%RES 8<84*CHKK%RES HL HL A*H L N9*8<88*RE%TEST 8GFG*SELKDRISE

Disable i! err$p s: S7i c1 mo ors as re;$ired: Firs 7ai abo$ L= ms: Decrease co$! er: Has 1e co$! er reac1ed XeroH Repea i. !o : Repea E=== imes 1e .ollo7i!g es ' Se a co$! er: @i/e a! error i. BREAK is pressed: Repea $! il ?@A%? sig!al is .o$!d lo7 Repea J imes: Res ore HL: Fi!is1ed: Becrease co$! er: Has 1e co$! er reac1ed XeroH Repea i. !o : Se!d ?s7i c1 o..? sig!als a!d e!able i! err$p s: Call 1e error 1a!dli!g ro$ i!e:

?"icrodri/e !o 8<3< 8<3D

prese! ? RST DEFB 3=*SHKERR N8=

T1e .ollo7i!g s$bro$ i!e does 1e ac $al s7i c1i!g? o. 1e mo ors* a!d 1e selec io! o. 1e re;$ired dri/e: I is e! ered 7i 1 dri/e !$mber 8:::< Aor = o s7i c1 all mo ors o..B i! 1e A regis er: T1e re;$ired dri/e mo or is selec ed* i s mo or s ar ed* 71ile o 1ers are disabled: 8<3A 8<3B 8<3E 8<4= 8<43 8<44 8<4E 8<4J 8<4< 8<4D 8<4B 8<4D 8<4F 8<L3 8<LL 8<LJ 8<LD 8<LB 8<LD 8<LF 8<E= 8<E3 8<EE 8<EG 8<ED 8<EC 8<EE 8<EF 8<J8 8<J4 8<JE S5K"OTOR %USH LB NE@ ADD LD LD ALLKNOTRS DEC CR LD OUT LD OUT CALL LD OUT CALL CR OFFK"OTOR LD OUT LD OUT CALL LD OUT CALL NXTKNOTOR DCN9 LD OUT LD OUT %O% DE DE*N=8== A*N=D C*A B*N=< C N9*8<LB*OFFK"OTOR A*D ANFGB*A A*NEE ANEFB*A 8<JG*DELKSK8 A*NEC ANEFB*A 8<JG*DELKSK8 8<EC*NXTK"OTOR A*NEF ANEFB*A A*E ANFGB*A 8<JG*DELKSK8 A*NED ANEFB*A 8<JG*DELKSK8 8<4E*ALLK"OTRS A*D ANFGB*A A*NEE ANEFB*A DE Sa/e DE regis er pair: A M = K dri/e !$mber: A M D K dri/e !$mber: "o/e co$! er o C: Loop .or < microdri/es: S7i c1 o.. 1is microdri/e i. i !o 1e re;$ired o!e: O 1er7ise s7i c1 o! 1e mo or:

is

5ai

abo$

8 ms:

5ai abo$ 8 ms: Co! i!$e 7i 1 !e) microdri/e: T1e dri/e mo or Is $r!ed o..:

5ai

abo$

8 ms:

5ai abo$ 8 ms* Loop .or < microdri/es: E!d o. dri/e selec io!:

Res ore DE regis er pair:

8<JJ

RET

Fi!is1ed: 4J== T c+cles: I is called .rom

THE ?8 "ILLISECOND DELA6? SUBROUTINE T1is s$bro$ i!e i!ser s a dela+ o. abo$ S5K"OTOR abo/e: 8<JG 8<J< 8<JD 8<JC 8<JF 8<G= 8<G8 DELKSK8 %USH %USH LD CALL %O% %O% RET BC AF B@*N==<G 8<FA*DELA6KBC AF BC

Sa/e BC regis er pair: Sa/e acc$m$la or: I!ser s a dela+ o. 4EE4 T c+cles: Res ore regis ers: Fi!is1ed:

THE ?SEND DATA BLOCK TO "ICRODRISE HEAD? SUBROUTINE T1is s$bro$ i!e is $sed .or 7ri i!g a bloc, o. b+ es o! o a "icrodri/e car ridge: O! e! r+* HL m$s 1old 1e s ar o. 1e bloc, o be 7ri e!: T1e bloc, is 1e! se! o 1e I! er.ace Apro/ided 1a 1e 7ri eKpro ec ab is prese! B i! a parallel .orm A 1e b+ es are co!/er ed i! a serial .orm b+ 1e 1ard7areB: T1e e! r+ poi! s OUTK"KHD a!d OUTK"KBUF are $sed respec i/el+ o 7ri e 1eaders or da a bloc,s Ai!cl$di!g preamblesB: 8<G3 8<G4 8<GJ 8<G< 8<GD 8<GC 8<GE 8<<= OUTK"KHD %USH LD CR OUTK"KBUF %USH LD OUTKNKELK IN AND CR HL DE*N==8E 8<GC*=UTK"KBLK HL DE*N=38F A*ANEFB N=8 N9*8<<L*NOTK%ROT Sa/e bloc, s ar address: Bloc, le!g 1: C$mp .or7ard: Sa/e bloc, s ar address: Bloc, le!g 1: C1ec, 7ri eKpro ec ab: O!l+ bi =: C$mp i. ab is prese! :

?Dri/e ?7ri e? pro ec ed? 8<<3 8<<4 8<<L 8<<G 8<<D 8<<B 8<<D 8<<E 8<<F 8<D= 8<D3 8<D4 8<DL 8<DE 8<DG 8<D< 8<DA 8<DC 8<DE 8<A8 8<A3 NOTK%ROT RST DEFB LD OUT LD OUT INC LD LD LD NO% NO% NO% OUTK"KB6T OTIR DEC CR LD OUT CALL %O% RET 3=*SHKERR N=E A*AIOBORDB ANFEB*A A*NE3 ANEFB*A D A*D B*E C*NEG Call 1e error 1a!dli!g ro$ i!e:

Fe c1 border colo$r: C1a!ge border colo$r: S ar 7ri i!g: I!creme! 1ig1 co$! er a!d cop+ i i! o A: Lo7 co$! er: O$ p$ por : 5ai 83 T c+cles: 5ri e .irs bloc,: Repea $! il 1e 71ole bloc, 1as bee! 7ri e!: S op 7ri i!g: Res ore border colo$r: Res ore bloc, s ar address: Fi!is1ed:

A N9*8<DE*OUTK"KB6T A*NEJ ANEFB*A =CAD*BORDKREST HL

THE ?RECEISE BLOCK FRO" "ICRODRISE HEAD? SUBROUTINE T1is is 1e opposi e ro$ i!e o 1e precedi!g o!e: O! e! r+* HL m$s 1old 1e s ar address o. 1e 1eader bloc, or o. 1e da a bloc, AAFTER 1e preambleB: T1e b+ es are collec ed .rom "icrodri/e 1ead a!d s ored I! 1e appropria e bloc,: T1e e! r+ poi! s are @ETK"KHD or @ETK"KBUF* depe!di!g $po! 71e 1er 1e bloc, o be recei/ed is a 1eader or a da a bloc,:

8<A4 8<AL 8<AG 8<AD 8<AA 8<AD 8<AE 8<AF 8<B= 8<B8 8<B4 8<BJ 8<B< 8<BA 8<BC 8<BE 8<C= 8<C4 8<CE 8<CG 8<CD 8<CB 8<CC 8<CE 8<D= 8<D8 8<D3 8<DL 8<DJ 8<D< 8<DB 8<DC 8<DE 8<E= 8<E8 8<E4 8<EE 8<EG 8<E<

@ETK"KHD

%USH LD CR @ETK"KBUF %USH LD @ETK"KBLK LD LD INC %USH CHKKA@AIN LD CHKLOO% CALL IN AND CR DCN9 CHKKA@K3 LD CHKKL%K3 CALL IN AND CR DCN9 %O% LD OUT %O% %USH DRKREAD6 IN AND CR CALL LD LD INK"KBLK INIR DEC CR LD OUT %O% RET

HL DE*N===F 8<AD*@ETK"KBLK HL DE*N=38= B*E C*D C BC B*N=< 8<ED*TESTKBRK A*ANEFB N=L 9*8<B8*CHKKA@AIN 8<B4*CHKLOO% B*N=J 8<ED*TESTKBRK A*ANEFB N=L N9*8<BE*CHKKA@K3 8<C=*CHKKL%K3 BC A*NEE ANEFB*A HL HL A*ANEFB N=3 N9*8<D3*DRKREAD6 8<ED*TESTKBRK A*C C*NEG A N9*8<DE*INK"KBLK A*NEE ANEFB*A HL

Sa/e s ar address: Bloc, le!g 1: C$mp .or7ard: Sa/e s ar address: Bloc, le!g 1: Cop+ ?le!g 1? i! o BC i! a re/ersed .orm: I!creme! 1ig1 b+ e o. ?le!g 1?: Loop < @i/e a! T1e @A% i m$s period: imes: error i. BREAK pressed: li!e is read repea edl+I be .o$!d ?lo7? a. er a ?1ig1?

Res ore BC: S ar readi!g: Res ore ?s ar address?:

Read S6NC li!e o s+!c1ro!iXe 1e readi!g 7i 1 1e s ar o. 1e bloc,: Repea $! il S6NC is .o$!d lo7: @i/e a! error i. BREAK pressed: A 1olds 1e 1ig1 co$! er: I!p$ por : Read .irs bloc,: Repea $! il 1e 71ole bloc, 1as bee! read: Fi!is1ed: Res ore bloc, s ar address:

TIlE ?TESTKBRK? SUBROUTINE T1e BREAK ,e+ is c1ec,ed a!d pressed: 8<ED 8<EB 8<ED 8<EE 8<EF 8<F8 8<F4 8<FL 8<FE 8<FD TESTKBRK LD IN RRA RET LD IN RRA RET LD RST A*NGF A*ANFEB C A*NFE A*ANFEB

1e error ?BREAK i! o program? is made i. i Read por NGFFE:

is

O!l+ bi =: Re $r! i. S%ACE !o Read por NFEFE:

bei!g pressed:

C AERRKNRB*N8L 3<*RO"ERR

O!l+ bi =: Re $r! i. CA%S SHIFT !o S ore error code: Repor 1e error:

bei!g pressed

THE ?DELA6KBC? SUBROUTINE T1is s$bro$ i!e is called o i!ser dela+s i! 1e program e)ec$ io!* depe!di!g $po! 1e /al$e o. BC: T1e e)ac dela+ is ABC ( 3J K L4B T c+cles: 8<FA 8<FB 8BFC 8<FD DELA6KBC %USH DELA6KBC8 DEC LD OR AF BC A*B C Sa/e acc$m$la or: Decrease co$! er: Repea $! il 1e co$! er reac1es =:

8<FE 8D== 8D=8

CR %O% RET

N9*8<FB*DELA6KBC8 AF

Res ore acc$m$la or: Fi!is1ed:

T1e .ollo7i!g are 7o s$bro$ i!es 1a are !e/er called .rom 1e S1ado7 RO" code: T1ese s$bro$ i!es opera e e/ide! l+ o! 1e b$..er?s co! e! s o. a "icrodri/e c1a!!el: 8D=3 8D=4 8D=E 8D=J 8D=D 8D=A 8D=B 8D=C 8D=F 8D83 8D84 8D8J 8D8D 8D8C 8D8D 8D8E 8D8F 8D3= 8D38 8D34 8D3L 8D3< 8D3D 8D3A 8D3B 8D3D 8D3E 8D3F 8D4= 8D43 8D44 8D4L 8D4E 8D4G 8D4D 8D4A 8D4B 8D4D 8D4F 8DL= 8DL8 8DL3 8DLL 8DLE 8DLJ 8DLG 8DL< 8DLD 8DLA 8DLC 8DLD 8DLE 8DE= 8DE8 UNKNK8 %USH %USH %O% LD ADD LD LD LD LD EXX LD LD LD EXX LD INC ADD LD CR INC CR EXX ADD EXX ADC DEC LD OR CR LD EXX LD LD SLA EXX LD RL RL EXX ADD EXX ADC %USH EXX %USH %USH %O% %O% LD LD C% CR INC LD HL IX HL BC*N==E3 HL*BC B*H C*L HL*N==== DE*N==== BC*N=3== HL*N==== DE*N==== A*ABCB BC A*E E*A NC*8D3D*UNKNK4 D N9*8D3D*UNKNK4 HL*DE HL*DE BC A*B C N9*8D8C*UNKNK3 D*E A*D E*N== D E*A E D HL*DE HL*DE HL HL BC HL BC E*N== A*C AHLB 9*8DE3*UNKNKL E AHLB*A

UNKNK3

UNKNK4

8DE3 8DE4 8DEL 8DEE 8DEG 8DE< 8DED 8DEA 8DEB 8DEC 8DED 8DEF 8DJ= 8DJ8 8DJ3 8DJ4 8DJL 8DJJ 8DJG 8DJ< 8DJD 8DJA 8DJB lDJC 8DJE 8DJF 8DG3 8DG4 8DGJ 8DGG 8DGD 8DGA 8DGB 8DGC 8DGD 8DGE 8D<=

UNKNKL

UNKNKE

UNKNKJ

UNKNKG

UNKNK<

UNKNKD

INC LD C% CR INC LD INC %O% LD C% CR INC LD INC LD C% CR INC LD LD OR %O% RET %USH %O% LD ADD LD LD XOR LD INC DEC LD OR CR RET

HL A*B AHLB 9*8DED*UNKNKE E AHLB*A HL BC A*C AHLB 9*8DJ8*UNKNKJ E AHLB*A HL A*B AHLB 9*8DJ<*UNKNKG E AHLB*A A*E A HL IX HL DE*N==E3 HL*DE BC*N=3== A*AHLB NEE AHLB*A HL BC A*B C N9*8DGJ*UNKNKD

T1e ?Hoo, code? ro$ i!es THE ?HOOKKCODE? ROUTINE T1is ro$ i!e is e! ered .rom ==EB 7i 1 1e A regis er 1oldi!g a ?1oo, code?* or a! i!/alid error code: T1e ro$ i!e calls a se o. s$bro$ i!es i! 1e s1ado7 RO"* a!d is i! e!ded o 1elp 1e mac1i!eKcode $ser: O!l+ 1e /al$e 1eld i! 1e acc$m$la or ma+ be passed o 1e called s$bro$ i!e: 8D<8 8D<4 HOOKKCODE C% CR N8< C*8D<G*CLRKERR Co! i!$e 7i 1 ?1oo,? codes:

?Hoo, code error? 8D<E 8D<J 8D<G 8D<B 8D<F 8DD= 8DD8 8DD3 8DD4 CLRKERR RST DEFB LD SET INC EX %USH ADD LD 3=*SHKERR N83 AERRKNRB*NFF 3*AFLA@SB HL AS%B*HL HL A*A D*N== Call 1e error 1a!dli!g ro$ i!e:

T1e ?error? is cleared: Ad/a!ce re $r! address pas 1e error code: S ore !e7 re $r! addressI 1e i!i ial /al$e o. A goes i! o H: Sa/e 1is /al$e: "$l ipl+ code b+ 7o: %ass o..se i! o DE:

8DDE 8DDJ 8DDD 8DDA 8DDB 8DDC 8DDD 8DDE 8DAl 8DA3 lDA4

LD LD ADD LD INC LD %O% LD %USH EX C%

E*A HL*N8DAD HL*DE E*AHLB HL D*AHLB AF HL*N=G== HL DE*HL AHLB

S ar o. ?1oo, code addresses? I!de) i! o 1is able: Fe c1 lo7 b+ e o. 1e address: Fe c1 1ig1 b+ e: Res ore i!i ial /al$e o. A: Re $r! address is UN%A@E: "o/e address o HL: C$mp o 1e ?1oo, code? ro$ i!e:

able:

THE ?HOOK CODE N43? ROUTINE T1is ?1oo, code? is desig!ed o call A71e! 1e mai! RO" is paged i!B a!+ s$bro$ i!e 1eld i! 1e s1ado7 RO": T1e address o. 1e s$bro$ i!e o be called is a,e! .rom HDK88: 8DAL 8DAG HOOKK43 LD C% HL*AHDK88B AHLB Fe c1 address o. 1e ro$ i!e: C$mp o 1e ro$ i!e:

THE ?HOOK CODE N48? ROUTINE T1is ?1oo, code? 1as 1e as, o. crea i!g 1e !e7 s+s em /ariables i. !o!e)is e! : No e 1a 1e ro$ i!e is made b+ a si!gle RET i!s r$c io!* beca$se 1e /ariables 1a/e bee! crea ed o! e! r+ o 1e s1ado7 RON: 8DA< HOOKK4l RET C$mp i!direc l+ o UN%A@E: 1e

THE ?HOOK CODE ADDRESSES? TABLE T1is F$mp able is made b+ 1e 3L addresses o. 1e ro$ i!es called b+ $si!g /ario$s ?1oo, codes?: No e 1a 1oo, code N3B F$mps i!correc l+ o 1e same ro$ i!e as 1oo, code N33: T1e correc address seems o be N8AF=: 8DAD 8DAB 8DAD 8DAF 8D<8 8D<4 8D<E 8D<G 8D<D 8D<B 8D<D 8D<F 8DC8 8DC4 8DCE 8DCG 8DCD 8DCB 8DCD 8DCF 8DD8 8DD4 8DDE 8DDG DEF5 DEF5 DEF5 DEF5 DEF5 DEF5 DEF5 DEF5 DEF5 DEF5 DEF5 DEF5 DEF5 DEF5 DEF5 DEF5 DEF5 DEF5 DEF5 DEF5 DEF5 DEF5 DEF5 DEF5 N8DDD*CONSKIN N8DEC*CONSKOUT N=B<8*BCHANKIN N=CEA*BCHANKOUT N8DFC*%RTKOUT N8A=8*KBDKTEST N8GFG*SELKDRISE N8B3D*O%KTE"%K" N83AD*CLOSEK"3 N8DJE*ERASE N8A=D*READKSET N88FF*5RKRECD N8A8G*RDKRANDO" N8ALB*RDKSECTOR N8A<J*RDKNEXT N8AD8*5RKSECTOR N8B3D*O%KTE"%K" N8=CL*DELK"KBUF N=EAD*O%KTE"%KN N8A3L*CLOSEKNET N8A48*@ETK%ACK N=DB3*SENDK%ACK N8DA<*HOOKK48 N8DAL*HOOKK43 Hoo, Hoo, Hoo, Hoo, Hoo, Hoo, Hoo, Hoo, Hoo, Hoo, Hoo, Hoo, Hoo, Hoo, Hoo, Hoo, Hoo, Hoo, Hoo, Hoo, Hoo, Hoo, Hoo, Hoo, code code code code code code code code code code code code code code code code code code code code code code code code N8B: N8C: N8D: N8E: N8F: N3=: N38: N33: N34: N3L: N3E: N3J: N3G: N3<: N3D: N3A: N3B: N3C: N3D: N3E: N3F: N4=: N48: N43:

THE ?CONSOLE IN%UT? SUBROUTINE T1is s$bro$ i!e is called b+ $si!g ?1oo, code? N8B: I simpl+ 7ai s $! il a ,e+ is pressed a!d re $r!s 1e c1arac er code i! 1e A regis er: T1is ?1oo, code? 1as bee! i!cl$ded beca$se 1e ,e+board is !o sca!!ed 71e! 1e mai! RO" is pagedKi!:

8DDD 8DDA 8DDE 8DDF 8DE= 8DE3 8DEJ 8DE< 8DEB

CONSKIN 5TKE6

EI RES HALT RST DEF5 BIT CR LD RET

E*AFLA@SB 8=*CALBAS N=3BF E*AFLA@SB 9*8DDE*5TKE6 A*ALASTKKB

E!able i! err$p s: Sig!al ?read+ .or a !e7 ,e+?: 5ai 8PE= 1 o. seco!d: Call 1e ,eboard sca! ro$ i!e i! 1e mai! RO": Repea 1e sca! i. !o ,e+ 1as bee! pressed: Fe c1 c1arac er code: Fi!is1ed: 1e A

THE ?CONSOLE OUT%UT? SUBROUTINE T1is s$bro$ i!e is called b+ $si!g ?1oo, code? N8C: T1e c1arac er 1eld i! regis er is pri! ed o! 1e scree!* 7i 1 scroll s$ppressed: 8DEC 8DED 8DEF 8DF3 8DFL 8DFE 8SFG 8DF< 8DFD 8DFB CONSKOUT OUTKCODE %USH LD LU LD RST DEF5 %O% RST DEF5 RET AF A*NFE HL*NEC<C AHLB*NFF 8=*CALBAS N8J=8 AF 8=*CALBAS N==8= Sa/e c1arac er o be pri! ed: Use s ream ?K3? AScree!B: T1is is SCRKCT: Se scroll co$! er: Call CHANKO%EN i! 1e mai! RO" selec 1e s ream: Res ore c1arac er: Call ?%RINTKA? res ar o pri! c1arac er: Fi!is1ed:

o 1e

THE ?%RINTER OUT%UT? SUBROUTINE T1is s$bro$ i!e is called b+ $si!g 1oo, code N8F: T1is is ide! ical o 1e precedi!g o!e* b$ 1e o$ p$ is direc ed o 1e s ream N=4 A!ormall+ 1e 9X %ri! erB: 8DFC 8DFD 8DFF %RTKOUT %USH LD CR AF A*N=4 8DJF*OUTKCODE Sa/e c1arac er o be pri! ed: Selec s ream 4: C$mp bac,: 1e Xero

THE ?KE6BOARD TEST? SUBROUTINE T1is is called b+ $si!g ?1oo, code? N3=: T1e ,e+board is sca!!ed a!d .lag re $r!ed rese i. a!+ ,e+ 1as bee! pressed: 8A=8 8A=3 8A=L 8A=J 8A=< KBDKTEST XOR IN AND SUB RET A A*ANFEB N8F N8F

Clear A* allo7i!g .or 1e 71ole ,e+board o be e)ami!ed: Read 1e ,e+board: O!l+ E less sig!i.ica! bi s: Re $r! 7i 1 sig! !ega i/e a!d Xero .lag rese i. a!+ ,e+ 1as bee! pressed:

THE ?READ SETUENTIAL? SUBROUTINE T1is is called b+ $si!g ?1oo, code? N3E: T1e s$bro$ i!e reads i! o 1e da abloc, o. 1e c$rre! >m> c1a!!el* 1e !e) record o. a !amed %RINTK +pe .ile: O! e! r+ IX m$s 1old 1e >m> c1a!!el s ar address* a!d CHREC 1e !$mber o. 1e c$rre! record: CHREC 7ill be a$ oma icall+ i!creme! ed: CHDRIS m$s 1old 1e dri/e !$mber a!d CHNA"E m$s 1old 1e .ile !ame: 8A=D 8A=D 8A=F 8A84 8A8L READKSET BIT CR LD RST INC 8*ARECFL@B 9*8A8L*INCREC AERRKNRB*N=G 3<*RO"ERR ACHRECB C$mp i. 1e c$rre! record is !o 1e EOF o!e: O 1er7ise sig!al ?e!d o. .ile?: Repor 1e error: I!creme! record !$mber a!d co! i!$e i! o RDKRANDO":

INCREC

THE ?READ RANDO"? SUBROUTINE

T1is s$bro$ i!e is called b+ $si!g ?1oo, code? N3G: T1e record !$mber CHREC o. a %RINTK +pe .ile is loaded i! o 1e da a bloc,: T1e o 1er /ariables are o be se as .or READKSET abo/e: 8A8G 8A8A 8A8E 8A8F RDKRANDO" CALL BIT RET CALL +pe? RST DEFB 3=*SHKERR N8J Call 1e error 1a!dli!g ro$ i!e: 88GG*@ETKRECD 3*ARECFL@B 9 8=CL*DELK"KBUF Load CHREC record: Re $r! o!l+ i. 1is is a %RINTK +pe .ile: O 1er7ise reclaim 1e c1a!!el* a!d repor 1e error:

?5ro!g .ile 8A33 8A34

THE ?CLOSE NET5ORK CHANNEL? SUBROUTINE T1is is called b+ $si!g ?1oo, code? N3E: Firs * 1e remai!i!g b+ es i! 1e >!> c1a!!el b$..er 71ose base address is 1eld i! 1e CURCHL s+s em /ariable* are se! as EOF bloc, Ai. 1e c1a!!el is ope!ed .or 7ri i!gB: T1e c1a!!el is 1e! reclaimed: 8A3L 8A3G 8A3D 8A3A 8A3D 8A3E 8A4= CLOSEKNET CALL %USH %O% LD RST DEF5 RET =EFE*SENDKNEOF IX HL BC*N=88L 8=*CALBAS N8DE< Se!d 1e EOF bloc, i. re;$ired: "o/e c1a!!el s ar address o HL: Le!g 1 o. >!> c1a!!el: Call RECLAI"K3 o dele e Fi!is1ed: 1e c1a!!el:

THE ?@ET %ACKET FRO" NET5ORK? SUBROUTINE T1is is called b+ $si!g ?1oo, code? N3F: U!.or $!a el+ 1e s$bro$ i!e is $!$sable* beca$se 1e carr+ .lag A 1a sig!als i. a! error 1as occ$rredB is corr$p ed b+ e)i /ia 1e BORDKREST s$bro$ i!e: 6o$ ma+ $se @ETKNKBUF a =4DF read a pac,e : 8A48 8A4L 8A4J 8A4G 8A4A 8A4C 8A4F 8AL8 8AL3 8AL4 8ALJ 8ALG 8AL< @ETK%ACK LD OUT DI CALL CR CALL CR EI AND C% SCF EI C% A*AIOBORDB ANFEB*A =F8E*5TKSCOUT NC*8ALJ*@%KERROR =E8<*@ETKNBLK N9*8ALJ*@%KERROR A =CAD*BORDKREST =CAD*BORDKREST Fe c1 border colo$r: C1a!ge border colo$r: Disable i! err$p s: 5ai .or a ?sco$ ? leader: C$mp i. ? imeKo$ ? occ$rs: 5ai .or 1eader a!d da a bloc,: C$mp 7i 1 a!+ error: E!able i! err$p s: Rese carr+ o sig!al ?s$ccess.$l?: B$ i is corr$p ed i! o BORDKREST: Sig!al ?error? E!able i! err$p s: Agai! 1e carr+ .lag 7ill be corr$p ed:

CFKERROR

THE ?READ SECTOR? SUBROUTINE T1is is called b+ $si!g ?1oo, code? N3<: Be.ore $si!g 1is* +o$ m$s s ar 1e re;$ired dri/e mo or* a!d s ore a sec or !$mber i! o CHREC: T1e da a bloc, s ored i! o 1e gi/e! sec or is 1e! read i! 1e c1a!!el area Apoi! ed b+ IXB* a!d $sed i. i is a %RINTK +pe record: T1e carr+ .lag is re $r!ed rese i. 1e readi!g is s$ccess.$l: 8ALB 8ALE 8AE8 8AEL 8AEG 8AEA 8AEC RDKSECTOR LD LD NOK@OOD CALL LD C% CR CALL HL*N==F= ASECTORB*HL 83CL*@ETK"KHD3 A*AHDNU"B ACHRECB 9*8AJ4*USEKCKRC 8483*DECKSECT Co$! s 1ro$g1 3L= sec ors:

@e a 1eader: Fe c1 c$rre! sec or !$mber: Compare 7i 1 gi/e! sec or !$mber: C$mp i. .o$!d 1e re;$ired sec or: O 1er7ise decrease SECTOR:

8AEE ?File !o 8AJ8 8AJ3 8AJ4 8AJE 8AJJ 8AJD 8AJA 8AJD 8AG= 8AG3 8AGE 8AGJ 8AGD 8AGB 8AGC 8A<= 8A<8 8A<L 8A<E USEKCKRC .o$!d?

CR

N9*8AE8*NOK@==D

C$mp $! il 3L= sec ors 1a/e bee! e)ami!ed: Call 1e error 1a!dli!g ro$ i!e:

RST DEFB %USH %O% LD ADD CALL CALL CR LD ADD CALL CR OR BIT RET CALL SCF RET

3=*SHKERR N88 IX HL DE*N==L4 HL*DE 8<AD*@ETK"KBUF 84L8*CHKSKHDKR N9*8A<8*DELKBKCT DE*N===F HL*DE 84LJ*CHKSKBUFF N9*8A<8*DELKBKCT A 3*ARECFL@B 9 8AE=*CLRKBUFF

"a,e HL poi! o RECFL@ Ai:e: sTar o. da a bloc,: Read da a bloc,: Calc$la e c$rre! c1ec,s$m: C$mp i. i does !o ma c1 7i 1 old c1ec,s$m: "a,e HL poi! o s ar o. b$..er: Calc$la e c1ec,s$m o. b$..er: C$mp i. i does !o ma c1 7i 1 old c1ec,s$m: Re $r! 7i 1 carr+ .lag rese i. 1is is a %RINTK +pe .ile: O 1er7ise clear b$..er co! e! s: Re $r! 7i 1 carr+ .lag se o sig!al 1e error:

DELKBKCT

THE ?READ NEXT SECTOR? SUBROUTINE T1is is $sed b+ $si!g ?1oo, code? N3D: T1e .irs 1eader a!d da a bloc, 1a pass 1ro$g1 1e "icrodri/e 1ead are copied i! o 1e c1a!!el area poi! ed b+ IX: As 7i 1 1e pre/io$s s$bro$ i!e* 1e dri/e mo or is o be s ar ed be.ore calli!g i : 8A<J 8A<D 8A<C 8A<F RDKNEXT LD LD CALL CR HL*N==F= ASECTORB*HL 83CL*@ETK"KHD3 8AJ4*USEKCKRC I!i ialise SECTOR Fe c1 1e .irs Co! i!$e bac,: o 3L=:

1eader:

THE ?5RITE SECTOR? SUBROUTINE T1is is $sed b+ $si!g ?1oo, code? N3A: I is 1e opposi e ro$ i!e o. ?RDKSECTOR? abo/e: T1e "icrodri/e $!i is o be s ar ed be.ore calli!g 1e ro$ i!e: T1e c$rre! da a bloc, i! 1e >m> c1a!!el poi! ed b+ 1e IX regis er is 7ri e! o! o 1e sec or 71ose !$mber is speci.ied b+ CHREC: O 1er c1a!!el /ariables* s$c1 as CHNA"E* are o be se as re;$ired: 8AD8 8ADL 8ADG 8ADD 8ADA 8ADD 8ADE 8ADF 8AA3 8AA4 8AAJ 8AAA 8AAD 8AB= 8AB4 8ABJ 8AB< 8ABB 5RKSECTOR LD CD %USH %O% LD ADD %USH LD ADD CALL LD CALL 5RKSKl CALL LD C% CR CALL CR HL*N==F= ASECTORB*HL IX HL DE*N==4G HL*DE HL DE*N===C HL*DE 84L8*CHKSKHDKR DE*N===F 84LJ*CHKSKBUFF 83CL*@ETK"KHD3 A*AHDNU"BB ACHRECB 9*8ABF*5RKSK3 8483*DECKSECT N9*8AAD*5RKSKl %ass 1ro$g1 3L= sec ors: o 1e da a bloc,

"a,e HL poi! preamble:

Sa/e 1is address: No7 poi! o RECFL@: Calc$la e DESCHK c1ec,s$m: No7 poi! o 1e b$..er: Calc$la e DCHK c1ec,s$m: @e a 1eader: Fe c1 c$rre! sec or !$mber: See 71e 1er i is 1e e)pec ed o!e: C$mp i. so: O 1er7ise decrease SECTOR: Loop $! il 3L= sec ors 1a/e bee!

e)ami!ed: ?File !o 8ABD 8ABE 8ABF 8AC8 8AC4 5RKSK3 .o$!d? RST DEFB IN AND CR 3=*SHKERR N88 A*ANEFB N=8 N9*8ACG*5RKSK4 Call 1e error 1a!dli!g ro$ i!e: 1e 7ri eKpro ec ab

Co! i!$e i. is prese! :

?Dri/e 7ri e pro ec ed? 8ACE 8ACJ 8ACG 8ACD 8ACB 8ACE 8AD8 8AD3 8ADE 8ADG 8ADD 8ADC 8ADD 8ADE 8ADF RSKSH 5RKSK4 RST DEFB LD OUT LD CALL %O% CALL LD OUT CALL LD OR LD RET 3=*SHKERR N=E A*NEJ ANEFB*A BC*N=8J< 8<FA*DELA6KBC HL 8<G<*OUTK"KBUF A*NEE ANEFB*A 83DF*CHECKK"A% A*B AHLB AHLB*A Call S ar 5ai 1e error 1a!dli!g ro$ i!e: 7ri i!g: $! il 1e .irs gap is .i!is1ed:

Res ore address o. da a bloc, preamble 5ri e da a bloc, o! o car ridge: S op 7ri i!g: Fi!all+ se 1e appropria e map bi :

Fi!is1ed:

THE ?CLEAR BUFFER CONTENTS? SUBROUTINE T1is s$bro$ i!e is called .rom RDKSECTOR a!d RDKNEXT s$bro$ i!es o clear 1e da a recei/ed i! o 1e >m> b$..er* i. 1e+ are !o par o. a %RINTK +pe .ile: 8AE= 8AE3 8AE4 8AEJ 8AEG 8AE< 8AED 8AEA 8AED 8AEF CLRKBUFF %USH %O% LD ADD LD LD INC LD LDIR RET IX HL DE*N==E3 HL*DE D*H E*L DE BC*N=8FF "a,e HL poi! >m> b$..er: Cop+ o 1e s ar o. 1e

1is address i! o DE: b+ e:

?Des i!a io!? is !e) B$..er le!g 1 K 8: Clear 1e b$..er: Fi!is1ed:

THE ?O%EN A %ER"ANENT >"> CHANNEL? SUBROUTINE T1is is 1e ac $al O%EN cori!!a!d re.erred o 1e >m> c1a!!el: A perma!e! >m> c1a!!el is ope!ed* a!d i is a ac1ed o 1e s ream 1eld i! o SKSTR8 Apro/ided 1a 1e .ile is a %RINTK +pe .ileB: 8AF= 8AF4 8AFL 8AFG 8AF< 8AFA 8AFB 8AFC 8AFF 8B=4 8B=E 8B=G 8B=D O%K"KSTR" LD ADD LD LD LD ADD %USH CALL BIT CR IN AND CR A*ASKSTR8B A*A HL*NEClJ E*A D*N== HL*DE HL 8B3D*O%KTE"%K" =*ACHFLA@B 9*8B=D*"AKEK%ER" A*ANEFB N=8 N9*8B=D*"AKEK%ER" Fe c1 s ream !$mber: "$l ipl+ b+ 7o: Address o. da a .or s ream =: Use As ream(3B as o..se : I!de) i! o STR"S area: Sa/e address o. da a .or 1e re;$ired s ream: Ope! a emporar+ >m> c1a!!el: C$mp i. 1is is a ?read? .ile: C$mp i. 1e 7ri eKpro ec prese! : ab is

?Dri/e ?7ri e? pro ec ed? 8B=B 8B=C 8B=D 8B88 8B83 8B8E 8B8D 8B8B 8B8F RST DEFB "AKEK%ERN RES XOR CALL BIT CR BIT CR +pe? RST DEFB STOREKDS% EX %O% LD INC LD RET 3=*SHKERR N8J DE*HL HL AHLB*E HL AHLB*D Call 1e error 1a!dli!g ro$ i!e: 3=*SHKERR N=E G*AIXNLB A 8GFG*SELKDRISE =*ACHFLA@B N9*8B34*STOREKDS% 3*ARECFL@B 9*8B34*STOREKDS% Call 1e error 1a!dli!g ro$ i!e:

"a,e 1e c1a!!el perma!e! : S7i c1 o.. dri/e mo ors: C$mp 7i 1 ?7ri e? .iles: C$mp 7i 1 %RINTK +pe ?read? .iles:

?5ro!g .ile 8B38 8B33 8B34 8B3L 8B3E 8B3J 8B3G 8B3<

DE 1olds !e7 s ream da a: Res ore s ream address: S ore s ream da a i! o STR"S area: Fi!is1ed:

THE ?O%EN TE"%ORAR6 >"> CHANNEL? SUBROUTINE T1is .$!dame! al s$bro$ i!e is $sed o ope! a emporar+ >m> c1a!!el i! 1e CHANS area: Firs a emporar+ >m> c1a!!el is crea ed: T1e! 1e dri/e 71ose !$mber is 1eld i! o DKSTR8 is s ar ed* a!d searc1ed .or a .ile 71ose !ame is 1eld i! o NKSTR8: A map area is crea ed A$!less i alread+ e)is sB* a!d i s co! e! s are se $p accordi!g o 1e car ridge co! e! s A 1e bi s rese i!dica e ?.ree .or $se? sec orsB: Sario$s .lags are re $r!ed as .ollo7s' K bi = o. CHFLA@ se 7i 1 ?7ri e? .iles: K bi 8 o. RECFL@ se 7i 1 EOF bloc,: K bi 3 o. RECFL@ se 7i 1 %RINTK +pe .iles: O! e)i * HL 1olds a ?s ream da a? displaceme! 1a ma+ be $sed o a ac1 1e c1a!!el o a s ream: T1e dri/e mo or 7ill !o be s7i c1ed o..: No e 1a H?L? is corr$p ed a!d 1e $ser m$s preser/e i s /al$e 71e! $si!g 1is ro$ i!e .rom BASIC: 8B3D 8B3C 8B3D 8B4= 8B44 8B4J 8B4A 8B4D 8B4F 8BL8 8BLE 8BL< 8BLD 8BLB 8BLD 8BLE 8BE8 8BE3 8BEE 8BEG O%KTE"%K" CALL =FE<*SETKTK"CH %USH HL LD A*ACHDRISB CALL 8GFG*SELKDRISE LD BC*N==FF LD ASECTORB*BC O%KFK8 CALL 88AE*@KHDKRC CR C*8BEF*O%KFKL CR 9*8BEC*O%KFK4 RES =*ACHFLA@B LD OR CR %USH %O% LD ADD CALL CR CALL A*ARECNU"B A N9*8BEG*O%KFK3 IX HL DE*N==E3 HL*DE 84LJ*CHKSKBUFF 9*8BJC*OFKFKE 88GD*@ETKRK3 Crea e a emporar+ >m> c1a!!el: Sa/e ?s ream displaceme! ? Fe c1 dri/e !$mber: T$r! o! dri/e mo or: Co$! 3EE sec ors: @e 1eader a!d da a bloc,: C$mp 7i 1 a!+ error: C$mp 7i 1 ?.ree? sec ors: Sig!al ?read .ile? i. 1e .ile is alread+ prese! o! car ridge: C$mp i. 1is is !o 1e 8s record: "a,e HL poi! o 1e da a b$..er:

O%KFK3

Calc$la e !e7 DCHK c1ec,s$m: C$mp i i is e;$al o 1e old o!e: Fe c1 .irs record o. .ile:

8BEA 8BEC 8BEF 8BJ3 8BJL 8BJ< 8BJC 8BJD

O%KFK4 O%KFKL

O%KFKE

CR CALL CALL CR RES RES %O% RET

8BJC*O%KFKE 83FE*RESKBK"A% 8483*DECKSECT N9*8B4A*O%KFK8 8*ARECFL@B 3*ARECFL@B HL

C$mp .or7ard: Rese map bi o sig!al ?.ree sec or? Decrease SECTOR: Co!sider all 3EE sec ors: ?No EOF?: ?%RINTK +pe .ile? Aope!ed .or 7ri i!gB Res ore s ream ?s ream da a?: Fi!is1ed:

T1e "icrodri/e comma!d ro$ i!es THE ?FOR"AT? CO""AND ROUTINE T1e ac io! o. FOR"AT i!g a !e7 car ridge is per.ormed b+ 1is s$bro$ i!e: I is e! ered 7i 1 1e dri/e !$mber i! o DKSTR8* 1e car ridge !ame address a!d le!g 1 i! o NKSTR8: 8BJE 8BG8 8BGL 8BGG 8BGA 8BGD 8BGE 8B<= 8B<3 FOR"AT CALL LD CALL LD CALL DI IN AND CR =FE<*SETKTK"CH A*ACHDRISB 8<3A*S5K"OTOR BC*N43C< 8<FA*DELA6KBC A*ANEFB N=8 N9*8B<J*FOR"ATK8 Crea e c1a!!el a!d map: Fe c1 dri/e !$mber: T$r! o! 1e mo or: 5ai be.ore c1ec,i!g 1e 7ri eK pro ec ab: Disable i! err$p s: Co! i!$e o!l+ i. 1e ab is prese! :

?Dri/e ?7ri e? pro ec ed? 8B<L 8B<E 8B<J 8B<< 8B<A 8B<D 8BD8 8BD4 8BDL 8BDG 8BD< 8BDD 8BDC 8BDD 8BA= 8BA3 8BA4 8BAJ 8BAA 8BAE 8BB3 8BBL 8BBE 8BB< No7 8BBD 8BBB 8BBD 8BBE 8BBF 8BC8 8BC3 FOR"ATK8 RST DEFB LD OUT LD LD %USH %O% LD ADD EX LD ADD LD LDIR XOR LD SET RES SET %USH %O% LD ADD 3=*SHKERR N=E A*NEJ ANEFB*A BC*N==FF ASECTORB*BC IX HL DE*N==3C HL*DE DE*HL HL*NFFE3 HL*DE BC*N===A A ARECNA"B*A =*AHDFLA@B =*ARECFL@B 8*ARECFL@B IX HL DE*N==E3 HL*DE Call S ar %ass 1e error 1a!dli!g ro$ i!e: 7ri i!g: 1ro$g1 3EE sec ors: o HDNAHE:

"a,e DE poi!

No7 ma,e HL poi! o CHNA"E Ai:e: car ridge !ameB: Name le!g 1: Cop+ car ridge !ame i! o HDNA"E: Use ?i!/isible? !ame b+ s ori!g Xero as .irs c1arac er o. 1e record !ame: "ar, 1e 1eader bloc,: "ar, 1e da a bloc,: "ar, as ?EOF? bloc,: "a,e HL poi! o 1e s ar o. 1e da a b$..er:

1e da a b$..er is .illed 7i 1 b+ es NFCI a!d LD LD FILLKBKF LD INC BCN9 FILLKBKF3 LD INC B*N== A*NFC AHLB*A HL 8BBD*FILLKBKF AHLB*A HL

1e c1ec,s$ms are calc$la ed:

Co$! s 3EJ b+ es: T1e b+ e o be s ored: Fill 3EJ b+ es: Fill !e) 3EJ b+ es:

8BC4 8BCE 8BCG 8BC< 8BCB 8BCC 8BCF 8BD3 8BD4 No7

DCN9 %USH %O% LD ADD CALL LD ADD CALL

8BC8*FILLKBKF3 IX DE HL*N==L4 HL*DE 84L8*CHKSKHDKR DE*N===F HL*DE 84LJ*CHKSKBUFF

%oi! o s ar o. da a bloc, 7or,space Ai:e: RECFL@B: Calc$la e DESCHK c1ec,s$m: "a,e HL poi! o 1e da a b$..er:

1is da a bloc, is 7ri

e! i! all sec ors 7i 1 HDNU"B !$mbered .rom 3EL Decrease SECTOR: C$mp 71e! SECTOR 1as reac1ed Xero: Ta,e HDNU"B .rom SECTOR: "a,e HL poi! o 1e s ar o. 1e 1eader 7or,space* i:e: HDFLA@:

o 8

8BDJ 5RKFKTEST 8BDD 8BDB 8BDE 8BE= 8BE8 8BEL 8BEE 8BE< 8BEB 8BEC 8BEF 8BF3 8BFE 8BFG 8BF< 8BFB 8BFC 8BFF 8C=3 8C=E 8C=< 8C=A 8C=C 8C=E 8C88 TESTKSCT

CALL 8483*DECKSECT CR 9*8C=A*TESTKSCT LD AHDNU"BB*C %USH IX %O% HL LD DE*N==3< ADD HL*DE CALL 84L8*CHKSKHDKR LD DE*NFFFL ADD HL*DE CALL 8<G3*OUTK"KHD LD BC*N=8B3 CALL 8<FA*DELA6KBC %USH IX %O% HL LD DE*N==4G ADD HL*DE CALL 8<G<*OUTK"KBUF LD BC*N=44F CALL 8BFA*DELA6KBC CALL 8<ED*TESTKBRK CR LD OUT LD CALL 8<DJ*5RKFKTEST A*NEE ANEFB*A A*ACHDRISB 8GFG*SELKDRISE

Calc$la e HDCHK c1ec,s$m: "a,e HL poi! o 1e 1eader bloc, preamble: 5ri e 1e 1eader o! o 1e car ridge: 5ai o crea e par o. 1e .irs gap: "a,e HL poi! o da a bloc, preamble:

5ri e 1e da a bloc,: %ar o. 1e seco!d gap is crea ed: @i/e a! error i. BREAK 1as bee! pressed: Co! i!$e 7i 1 !e) sec or: S op 7ri i!g: Fe c1 dri/e !$mber: S ar mo or: o see i. is rese 1e+ are o sig!al

No7 1e sec ors co! ai! ? es da a?* a!d are o be read bac, $sable: I. 1e c1ec,s$ms are correc * 1e appropria e map bi ?.ree .or $se? sec ors: 8C8L 8C8G 8C8B 8C8E 8C38 8C34 8C3E 8C3J 8C3D 8C3A 8C3D 8C4= 8C43 8C4E 8C4J 8C4D 8C4B 8C4E 8CL8 LD LD CHKKSCT CALL CALL CR %USH %O% LD ADD CALL CALL CR LD ADD CALL CR CALL CHKKNSECT CALL CR BC*N==FF ASECTORB*BC 83CL*@ETKHKHD3 83DF*CHECKK"A% 9*8C4E*CHKKNSECT IX HL DE*N==L4 HL*DE 8<AD*@ETK"KBF 84L8*CHKSKHDKR N9*8C4E*CHKKNSECT DE*N===F HL*DE 84LJ*CHKSKBUFF N9*8C4E*CHKKNSECT 83FE*RESKBK"A% 8483*DECKSECT N9*8C8B*CHKKSCT %ass

1ro$g1 3EE sec ors*

Fe c1 a 1eader: C1ec, map bi a!d F$mp 7i 1 e)ami!ed sec ors: "a,e HL poi! o s ar o. da a bloc, 7or,space Ai:e: RECFL@B: Fe c1 da a bloc,: Calc$la e DESCHK c1ec,s$m: C$mp 7i 1 .a$l + sec ors: "a,e HL poi! o 1e da a b$..er: S ar o. da a b$..er: Calc$la e DCHK c1ec,s$m: C$mp 7i 1 .a$l + sec ors: Rese map bi 7i 1 $sable sec orS: Decrease SECTOR: C1ec, all sec ors:

8CL4

CALL

8E4E*INKCHK

I!i ialise RECFL@* BECLEN* a!d DESCHK:

A 1is poi! all sec ors 1a 1a/e bee! .o$!d ?$sable? Amar,ed 7i 1 a rese bi i! 1e mapB are 7ri e! 7i 1 RECFL@ a!d RECLEN Xeroed* as o mar, 1em ?7or,i!g? .or .$ $re $se: 8CLJ 8CLD 8CL< 8CLC 8CLF 8CE3 8CE4 8CEJ "ARKKFREE CALL CR XOR CALL CALL RET "KKBLK CALL CR 83JL*CHKKFULL N9*8CE4*"KKBLK A 8GFG*SELKDRISE 8=CL*DELK"KBUF 83GE*SENDKBLK 8CLJ*"ARKKFREE C$mp $! il all bi s i! are made se : T$r! o.. dri/e mo ors: 1e map

Reclaim >m> c1a!!el a!d map: Fi!is1ed: 5ri e da a bloc, i! 1e !e) ?.ree? sec or: C$mp bac,:

THE ?CAT? CO""AND ROUTINE T1is s$bro$ i!e ma,es a CATalog$e o. 1e car ridge i!ser ed i! 1e dri/e 71ose !$mber m$s be speci.ied b+ DKSTR8: SKSTR8 m$s 1old 1e s ream o 71ic1 1e ca alog$e is o be direc ed: 8CE< 8CEB 8CEC 8CEE 8CJ8 8CJL 8CJG 8CJA 8CJE 8CG8 8CGL 8CGJ 8CGD 8CGC 8CGE 8C<= 8C<4 CAT LD RST DEF5 CALL LD CALL LD LD CALL CALL CR LD OR AND CR CALL CR A*ASKSTR8B 8=*CALBAS N8J=8 =FE<*SETKTK"CH A*ACHDRISB 8GFG*SELKDRISE BC*N==FF ASECTORB*BC 83CL*@ETK"KHD3 8EE4*@KRDES N9*8CJE*CATKL% A*ARECFL@B ARECLENK1iB N=3 N9*8C<E*INKNA"E 83FE*RESKBK"A% 8CEE*FKNKSCT Fe c1 s ream !$mber: Call CHANKO%EN o selec 1e speci.ied s ream: Se a emporar+ >m> c1a!!el: Fe c1 dri/e !$mber: T$r! o! dri/e mo or: %ass 1ro$g1 3EE sec ors: Fe c1 a 1eader: Fe c1 record descrip or: Repea $! il da a is correc : T1e sec or is ?.ree .or $se? 71e! bi 8 o. bo 1 RECFL@ a!d RECLENK1i are rese Asee comme! a. er 8CL4B: C$mp i. !o a ?.ree? sec or: Rese map bi i. i is a ?.ree? sec or: Co! i!$e 7i 1 !e) sec or:

CATKL%

I. 1e c$rre! sec or is !o ?.ree?* 1e! 1e !ame o. 1e .ile 1eld i! i is o be collec ed a!d i!ser ed i! alp1abe ical order i! o 1e da a b$..er o. 1e >m> c1a!!el: Names s ar i!g 7i 1 CHRQ = are re.$sed: 8C<E 8C<< 8C<D 8C<B 8C<D 8C<E 8CD8 8CD3 8CDE 8CDG INKNA"E LD OR CR %USH %O% LD ADD LD LD LD A*ARECNA"B A 9*8CEE*FKNKSCT IX HL DE*N==E3 HL*DE DE*N===A B*N== C*ACHRECB 1a Fe c1 .irs c1arac er o. .ile !ame: Co! i!$e 7i 1 !e) sec or i. 1is is CHRQ =: "a,e HL poi! o 1e da a b$..er:

Le!g 1 o. .ile!ame: B is i!i ialll+ cleared: S ar 7i 1 ?.ile co$! ? cleared: 1e !ame o. 1e c$rre! record is !o

T1e .ollo7i!g loop es s o ma,e s$re alread+ s ored i! 1e b$..er: 8CDA 8CDB 8CDC 8CDE 8CDF SEKNA"E LD OR CR %USH %USH A*C A 9*8CDL*INSKNA"E HL IX

C$mp .or7ard 71e! all e)is i!g !ames 1a/e bee! e)ami!ed: Sa/e regis ers:

8CA8 8CA3 8CAL 8CAE 8CA< 8CAA 8CAB 8CAD 8CAF 8CB8 8CB3 8CB4 8CBE 8CBG 8CB< 8CBD

TKNAK8

%USH LD LD CF CR INC INC DCN9 %O% %O% %O% CR CR ADD DEC CR

BC B*N=A A*AHLB ARECNA"B N9*8CAF*TKNAK3 HL IX 8CAL*TKNAK8 BC IX HL 9*8CEE*FKNKSCT NC*8CBB*ORDKNA" HL*DE C 8CDA*SEKNA"E

Co$! s c1arac ers i! a !ame: Fe c1 a c1arac er .rom b$..er: Compare agai!s RECNA": C$mp i. 1e+ do !o ma c1: %oi! o !e) c1arac er* Loop $! il all 1e !ames 1a/e bee! compared: Res ore regis ers: Co! i!$e 7i 1 !e) sec or i. 1e !ame is alread+ s ored: C$mp i. 1e !ame is s$rel+ !o i! 1e b$..er Ai:e: ?lo7er? 1a! 1e c$rre! o!eB: O 1er7ise poi! o !e) !ame: Decrease !$mber o. !ames o be e)ami!ed: Loop bac,:

TKNAK3

T1e address a 71ic1 1e !ame is o be i!ser ed 1as bee! calc$la edI 1e .ollo7i!g !ames are mo/ed do7! o crea e 1e space .or s ori!g 1e !e7 !ame: 8CBB 8CBC 8CBD 8CBE 8CBF 8CC8 8CC3 8CC4 8CCL 8CCE 8CCJ 8CCG 8CC< 8CCD 8CCA 8CCB 8CCC 8CCD 8CCE 8CCF 8CD8 8CD3 8CD4 8CDL 8CDJ 8CD< 8CDB 8CDC 8CDE 8CDF 8CE8 8CE4 8CEJ 8CEG ORDKNA" %USH %USH %USH %USH SLA LD LD ADD ADD ADD ADD LD LD %O% DEC ADD EX ADD EX LDIR %O% %O% %O% %USH LD LD LD INC INC DCN9 %O% LD INC LD HL DE BC HL C H*B L*C HL*BC HL*BC HL*BC HL*BC B*H C*L HL HL HL*BC DE*HL HL*DE DE*HL BC DE HL IX B*N=A A*AIXNRECNA"B AHLB*A IX HL 8CB<*"OSEKNA IX A*ACHRECB A ACHRECB*A Sa/e regis ers:

"$l ipl+ b+ 7o 1e !$mber o. !ames o be mo/ed do7!: "o/e res$l i! o HL AB 1olds =B: "$l ipl+ 1is b+ E* o ge i! HL !$mber o. b+ es o be mo/ed do7! Ai:e: !$mber o. !ames ( 8=B: 1e

"o/e i! o BC 1e le!g 1 o. 1e bloc, o be mo/ed: Res ore address 71ere 1e c$rre! !ame is o be i!ser ed: "a,e HL poi! o 1e las c1arac er o. 1e las !ame: Calc$la e i! o DE 1e address ?HLN8=?: "o/e do7! 1e re;$ired !ames Alea/i!g 8= b+ es .or 1e c$rre! !ameB: Res ore regis ers: Sa/e c1a!!el s ar address: Te! c1arac ers i! a !ame: Fe c1 a c1arac er .rom 1e !ame: S ore i! 1e b$..er: %oi! o !e) loca io!: Loop $! il 1e 71ole !ame 1as bee! ra!s.erred: Res ore c1a!!el s ar address: Fe c1 !$mber o. !ames i! 1e b$..er: I!cl$de c$rre! !ame i! 1e co$! : S ore !e7 !$mber:

INSKNA"E "OSEKNA

8CEA 8CEC 8CEE 8CF8

FKNKSCT

C% CR CALL C%

N43 9*8CFL*BFKFILLED 8483*BECKSECT N9*8CJE*CATKL%

C$mp i. E= !ames 1a/e bee! collec ed Decrease SECTOR: Repea .or all 3EE sec ors:

No7 1e .ile !ames are i! 1e da a b$..er: CHREC 1olds 1e !$mber o. !ames s ored: Firs 1e car ridge !ame is pri! ed o! o 1e selec ed s ream: 8CFL 8CFJ 8CFG 8CFA 8CFC 8CFD 8D== 8D=8 8D=L 8D=J 8D=D 8D=B 8D=C 8D=F 8D88 8D84 8D8L 8D8E 8D8G 8D8A 8D8C 8D8F 8D3= 8D33 8D34 8D3E 8D3G 8D3A 8D3B 8D3D 8D3F 8D43 8D4L 8D4G BFKFILLED %USH XOR CALL %USH %O% LD ADD CALL LD CALL %USH %O% LD ADD LD LD OR CR OTKNA"S CALL DCN9 NONA"ES CALL LD SRL RST DEF5 LD CALL RST DEF5 LD CALL %O% CALL RET IX A 8GFG*SELKDRISE IX HL DE*N==3C HL*DE 8DE=*%RNA"E A*N=D 8DJJ*%RCHAR IX HL DE*N==E3 HL*DE B*ACHRECB A*B A 9*8D8C*NONA"ES 8DE4*%RNA"E 8D8G*OTKNA"S 8D4<*FREESECT A*E A 8=*CALBAS N3D3< A*N=D 8DJJ*%RCHAR 8=*CALBAS N3DE4 A*N=D 8DJJ*%RCHAR IX 8=CL*DELK"KBUF Sa/e c1a!!el base address: S7i c1 o.. dri/e mo or: "a,e HL poi! o HDNA"E:

%ri! %ri!

car ridge !ame: a carriage re $r!: o 1e da a b$..er:

"a,e HL poi!

Fe c1 !$mber o. s ored !ames: C$mp .or7ard i. !o !ames 1a/e bee! s ored: %ri! all .ile!ames:

Calc$la e !$mber o. ?.ree? sec ors i! o A: Di/ide b+ 7o* gi/i!g 1e ,ilob+ es le. : Call STACKKA o s ore 1is /al$e o! 1e calc$la or s ac,: %ri! a carriage re $r!: Call %RINTKF% o pri! 1e !$mber o. ,ilob+ es le. : %ri! 1e .i!al carriage re $r!: Res ore c1a!!el s ar Reclaim 1e c1a!!el: Fi!is1ed: address:

THE ?FREESECT? SUBROUTINE T1is s$bro$ i!e is called o calc$la e 1e !$mber o. ?.ree sec ors? AI:::R bi s rese i! 1e mapB: T1e !$mber is re $r!ed i! 1e I regis er: 8D4< 8D4B 8D4E 8DL= 8DL3 8DL4 8DLL 8DLJ 8DLG 8DLD 8DLA 8DLC 8DLD 8DLF FREESECT LD LD LD LD LD INC LD RRA CR INC DCN9 DEC CR RET L*ACH"A%KloB H*ACH"A%K1iB E*N== C*N3= A*AHLB HL B*N=< C*8LDA*FRKSKRES E 8DLJ*FRKSKL%B C N9*8DL3*FRKSCKL% Fe c1 address o. map: S ar 7i 1 E cleared: Le!g 1 o. map: Fe c1 a b+ e .rom 1e map: Ad/a!ce 1e poi! er: Loop .or < bi s: C$mp i. 1is bi is se * O 1er7ise i!creme! co$! er: Repea .or all < bi s: Repea .or all b+ es i! 1e map: Fi!is1ed:

FRKSCKL% FRKSKL%B FRKSKRES

THE ?%RNA"E? SUBROUTINE T1is is $sed .rom 1e CAT comma!d ro$ i!e address 1eld i! o 1e HL regis er: 8DE= 8DE8 8DE4 8DEL 8DEG 8DE< 8DEA 8DEC 8DEF lDJ= 8DJ8 8DJ4 8DJL 8DJE %RNA"E %RN"KL% %USH LD LD CALL INC DCN9 LD CALL %USH RST DEF5 %O% %O% RET BC B*N=A A*AHLB 8DJJ*%RCHAR HL 8DE4*%RN"KL% A*N=D 8DJJ*%RCHAR HL 8=*CALBAS N=DLD HL BC

o pri!

a .ileK!ame s ar i!g .rom

1e

Sa/e BC regis er: Co$! s 8= c1arac ers: Fe c1 a c1arac er: %ri! i : I!creme! poi! er: Loop $! il 1e 71ole !ame 1as bee! pri! ed: %ri! a carriage re $r!: Sa/e 1e poi! er: Call mai! RO" ?TE"%S? s$bro$ i!e: Res ore regis ers:

THE ?%RCHAR? SUBROUTINE T1e c1arac er 71ose code is 1eld i! selec ed s ream: 8DJJ 8DJ< 8DJD 8DJB 8DJD %RCHAR %USH RST DEF5 %O% RET IX 8=*CALBAS N==8= IX

1e A regis er is se!

o/er

1e c$rre! l+

Sa/e c1a!!el base address: Call res ar ?%RINTKA? o pri! c1arac er: Res ore c1a!!el base address: Fi!is1ed:

1e

THE ?ERASE? CO""AND SUBROUTINE T1is is also called b+ $si!g ?1oo, code? N3L: T1e s$bro$ i!e is e! ered 7i 1 DKSTR8 1oldi!g 1e dri/e !$mber a!d NKSTR8 1oldi!g 1e le!g 1 a!d 1e s ar o. 1e .ile!ame* No e 1a H?L? is corr$p ed: 8DJE 8DG8 8DGL 8DGG 8DGD 8DGB ERASE CALL LD CALL IN AND CR =FE<*SETKTK"CH A*ACHDRISB 8GFG*SELKDRISE A*ANEFB N=8 N9*8=GF*ERASEK8 Se a emporar+ >m> c1a!!el: Fe c1 dri/e !$mber: T$r! o! dri/e mo or: Co! i!$e o!l+ i. 1e 7ri eK!ro ec ab is prese! :

?Dri/e 7ri e pro ec ed? 8DGD 8DGE 8DGF 8D<8 8D<3 8D<E 8D<J 8D<G ERASEK8 RST DEFB %USH %O% LD ADD %USH %O% 3=*SHKERR N=E IX HL DE*N==E3 HL*DE HL DE Call %oi! 1e error 1a!dli!g ro$ i!e: o 1e da a b$..er:

Cop+

1is address i! o DE:

No7 1e .irs 43 loca io!s i! 1e da a b$..er are cleared: T1ese loca io!s ac as a ?pse$doKmap?* $sed o mar, 1e sec ors o be erased* 8D<< 8D<D 8D<C 8D<D 8D<E lDD= INC LD XOR LD LDIR LD DE BC*N==8F A AHLB*A A*NFF %oi! o !e) loca io!: @ap le!g 1 K 8: Clear 1e .irs loca io!: Clear all loca io!s: CHREC is made 1oldi!g 3EE:

8DD3 8DDE 8DD<

CD LD LD

ACHRECB*A BC*N=LFB ASECTORB*BC

SECTOR is i!i ialised o. 1e ape?:

o ?.i/e passes

T1e car ridge is searc1ed .or 1e sec ors o be erased* a!d 71e! a!+ s$c1 sec or is .o$!d* 1e rele/a! ?pse$doKmap? bi is se : A ?!ormal? map is also se K$p: 8DDC 8DDF 8DA8 8DAL 8DAG 8DAD 8DAC lDAF 8DB8 8DB4 8DBJ ERASEKL% CALL CR CALL CALL CR LD OR AND CR CALL CR 8483*DECKSECT 9*8DF<*ERASEK"K 83CL*@ETK"KHD3 8EE4*@KRDES N9*8DDA*TSTKNU" A*ARECFL@B ARECLENK1iB N=3 N9*8DB<*ERASEK3 83FE*RESKBK"A% 8DDA*TSTKNU" Decrease SECTOR: "a,e 1e ERASE 71e! i reac1es =: Fe c1 a 1eader: Fe c1 record descrip or: C$mp 7i 1 a!+ error: C$mp i 1is record is !o ? ree?:

O 1er7ise rese ?.ree sec or?: C$mp .or7ard:

map bi

o i!dica e

T1e !ame o. 1e c$rre! record is compared agai!s 1a o. 1e .ile erased: I. 1e compariso! is s$ccess.$l* 1e ?pse$doKmap? bi is se sec or: 8DB< 8DBA 8DBB 8DBE 8DBF 8DC3 8DCE 8DCG 8DCA 8DCB 8DCC 8DCD 8DD8 8DD4 8DDJ 8DDG 8DDA 8DDC 8DDD 8DE= 8DE8 8DE4 IDEE 8DEJ 8DEG 8DED 8DEA 8DEC 8DED 8DEF 8DF= 8DF3 8DFE 8DFJ ERASEK3 %USH %O% LD ADD LD CALL CR CALL LD OR LD BIT CR LD INC LD %USH %O% LD ADD LD LD LD INC LD RRA CR INC DCN9 DEC CR LD C% CR IX HL DE*N==LG HL*DE BC*N===A 848E*CHKKNA"E N9*8DDA*TSTKNU" 84=J*TESTK%"A% A*B AHLB AHLB*A 8*ARECFL@B 9*8DDA*TSTKNUN A*ARECNU"B A ACHRECB*A IX HL DE*N==E3 HL*DE E*N== C*N3= A*AHLB HL B*N=< NC*8DED*NOINCKC E 8DED*L%KBK"A% C N9*8DEE*L%K%K"A% A*ACHRECB E N9*8DDC*ERASEKL% "A,e HL poi! o RECNA":

o be o mar,

1e

Co$! s e! c1arac ers i! a !ame: Compare agai!s CHNA"E: C$mp i. i does !o e;$al: @e posi io! o. pse$doKmap bi : Fe c1 bi posi io!: Se 1e pse$doKmap bi : C$mp i. 1is is !o 1e EOF bloc,:

TSTKNU"

O 1er7ise i!creme! record !$mber a!d s ore i i! o CH"REC* gi/i!g 1e !$mber o. sec ors 1a composes 1e .ile: "a,e HL poi! o 1e ?pse$doKmap?:

L%K%K"A% L%KBK"A% NOINCKC

Clear E regis er: Le!g 1 o. 1e pse$doKmap: Fe c1 pse$doKmap b+ e: Ad/a!ce 1e poi! er: Co$! s < bi s: C$mp i. 1is bi is rese : O 1er7ise i!creme! co$! er: Loop .or all < bi s: Decreme! map le!g 1: Loop $! il 1e 71ole map 1as bee! e)ami!ed: Fe c1 !$mber o. records 1a composes 1e .ile: Compare 7i 1 !$mber o. records .o$!d: Co! i!$e $! il all records 1a/e bee! .o$!d Aor .i/e passes o. 1e ape 1a/e bee! madeB:

A ?.ree? sec or descrip or is 7ri 8DF< 8DFB 8DFE 8E=8 8E=4 8E=L 8E=E 8E=G 8E=D 8E=C 8E=F 8E88 8E83 8E8E 8E8J 8E8D 8E8B 8E8D 8E3= 8E38 8E33 8E34 8E3L 8E3E ERASEK"K CALL ERASEK"K3 CALL CALL CR %USH %USH LD OUT LD CALL %USH %O% LD ADD CALL LD OUT CALL %O% %O% LD C%L AND LD

e! i! all records o.

1e .ile

o be erased:

8E4E*INKCHK 83CL*@ETK"KHD3 84=J*TESTK%"A% 9*8E3J*TKOTHER HL BC A*NEJ ANEFB*A BC*=8J< 8<FA*DELA6KBC IX HL DE*N==4G HL*DE 8<G<*OUTK"KBUF A*NEE ANEFB*A 83FE*RESKBK"A% BC HL A*B AHLB AHLB*A leas

Se ?.ree record? a rib$ es: Fe c1 a 1eader: C$mp i. 1is is !o 1e 1eader o. a record o be erased: Sa/e map bi address a!d posi io!: S ar 5ai 7ri i!g: o i!ser par o o. 1e .irs gap:

"a,e HL poi! preamble:

1e da a bloc,

5ri e 1e ?.ree record? descrip or: S op 7ri i!g: Rese map bi : Res ore pse$doKmap bi posi io! a!d address: Rese 1e appropria e bi :

I. 1e pse$doKmap co! ai!s a erased: 8E3J 8E3< 8E3D 8E3C 8E3D 8E3F 8E4= 8E48 8E44 8E4L 8E4J 8E4G 8E4A 8E4D TKOTHER %USH %O% LD ADD LD CHKK5K"A% LD OR CR INC DCN9 XOR CALL CALL RET

o!e bi

se *

1ere are o 1er records o 1e pse$doKmap:

o be

IX HL DE*N==E3 HL*DE B*N3= A*AHLB A N9*8DFB*ERASEK"K3 HL 8E3F*CHKK5K"A% A 8GFG*SELKDRISE 8=CL*DELK"KBUF

"a,e HL poi!

Le!g 1 o. pse$doKmap: Fe c1 a b+ e: C$mp bac, i. 1e b+ e is !o Xero Ai:e: 1ere are o 1er records o be erasedB: Ne) loca io!: Loop .or 1e 71ole map: S7i c1 o.. dri/e mo or: Reclaim c1a!!el a!d map: Fi!is1ed: o mar, 1e

THE ?SI@NAL >FREE SECTOR>? SUBROUTINE T1is s$bro$ i!e is called .rom 1e FOR"AT a!d ERASE comma!d ro$ i!es c$rre! record descrip or as ?.ree sec or? ide! i.ier: 8E4E 8E4F 8EL3 8ELE 8EL< 8ELA 8ELB 8ELE 8ELF 8EE3 INKCHK XOR LD LD LD %USH %O% LD ADD CALL RET A ARECFL@B*A ARECLENKloB*A ARECLENK1iB*A IX HL DE*N==L4 HL*DE 84L8*C"KSKHDKR Clear RECFL@ a!d RECLEN:

"a,e HL poi!

o RECFL@:

Res ore DESCHK c1ec,s$m: Fi!is1ed:

THE ?OBTAIN A RECORD DESCRI%TOR? SUBROUTINE

T1is s$bro$ i!e is $sed .rom 1e FOR"AT a!d ERASE coam!a!d ro$ i!es o .e c1 .rom 1e c$rre! "icrodri/e $!i 1e record descrip or 1eld i! 1e c$rre! sec or Ai:e: RECFL@:::DESCHKB: T1e Xero .lag is re $r!ed rese 7i 1 a!+ error: 8EE4 8EEE 8EEJ 8EED 8EEA 8EED 8EJ= 8EJ8 8EJE @KRDES %USH %O% LD ADD CALL CALL RET BIT RET IX HL DE*N==L4 HL*DE 8<A4*@ETK"KHD 84L8*CHKSK"DKR N9 =*ARECFL@B "a,e HL poi! o RECFL@:

Fe c1 record descrip or: Calc$la e !e7 c1ec,s$m: Re $r! i. i is 7ro!g: Re $r! 7i 1 Xero .lag rese is a 1eader:

i.

1is

THE ?CALLS TO THE CO""AND ROUTINES? T1e si) .ollo7i!g calls are e! ered .rom 1e appropria e comma!d s+! a) ro$ i!eI o! re $r! .rom 1e comma!d ro$ i!e* 1e co! rol re $r!s o END8: 8EJJ 8EJD 8EJB 8EJE 8EG= 8EG4 8EGE 8EG< 8EGA 8EGD 8EGF 8E<3 8E<L ERASEKRUN CALL CR "OSEKRUN CALL CR CATKRUN CALL CR FORKRUN CALL CR O%KRUN CALL CR SASEKRUN CALL CR ENDC C% 8DJE*ERASE 8E<L*ENDC 84F8*"OSE 8E<L*ENDC 8CE<*CAT 8E<L*ENDC 8BJE*FOR"AT 8E<L*ENDC 8AF=*O%K"KSTR" 8E<L*ENDC 8LDA*SAKDRISE 8E<L*ENDC =ECl*END8

T1e ?!o

$sed? ro$ i!es

T1e .ollo7i!g are .o$r s$bro$ i!es 1a are !e/er called .rom 1e s1ado7 RO" codeI 1ese ro$ i!es are 1o7e/er described belo7 as 1e+ ma+ be $se.$l o 1e programmer: THE ?DIS%KHEX? SUBROUTINE T1e co! e! s o. 1e A regis er are displa+ed o! regis ers are preser/ed* e)cl$di!g A: 8E<G 8E<< 8E<D 8E<A 8E<B 8E<C 8E<F 8ED= 8ED3 8EDL 8EDJ 8ED< 8EDA 8EDD DIS%KHEX %USH RRA RRA RRA RRA CALL %O% AND C% CR ADD ADD CALL RET AF 1e scree! i! 1e)adecimal: All

Sa/e A regis er: S1i. le. !ibble

o rig1 :

DIS%KNIB

8ED=*DIS%KNIB AF N=F N=A C*8ED<*CONSK8 A*N=G A*N4= 8EAD*DIS%KCH

%ri! 1e .irs digi : Res ore /al$e: Clear le. !ibble: C$mp i. 1e /al$e is lo7er O 1er7ise add N=G o reac1 A::F: Add o..se .or ASCII code: %ri! 1e digi : Fi!is1ed:

1a! D: 1e code o.

CONSK8

THE ?DIS%KHEX3? SUBROUTINE T1is per.orms 1e same as, as 1e precedi!g o!e* b$ b+ a space: All regis ers are preser/ed: 8EDE DIS%KHEX3 %USH AF

1e 1e) !$mber is .ollo7ed

Sa/e A regis er:

8EDF 8EA3 8EAL 8EAG 8EA<

CALL LD CALL %O% RET

8E<G*DIS%KHEX A*N3= 8EAD*DIS%KCH AF

%ri! 1e 1e) !$mber: Follo7 7i 1 a space: Res ore A: Fi!is1ed: 1e c1arac er 1eld i! Sa/e regis ers: 1e acc$m$la or: All

THE ?DIS%KCH? SUBROUTINE T1is s$bro$ i!e pri! s o! regis ers are preser/ed: 8EAD 8EAA 8EAB 8EAC 8EAD 8EAE 8EAF 8EB= 8EB8 8EB3 8EBE 8EBJ 8EBG 8EBD 8EBA 8EBC 8EBD 8EBE 8EC= 8EC8 8ECL 8ECE 8ECJ 8ECG 8EC< 8ECD 8ECA 8ECB 8ECC 8ECD DIS%KCH %USH %USH %USH %USH EXX %USH %USH %USH %USH LD %USH %USH LD RST DEF5 %O% RST DEF5 %O% LD %O% %O% %O% %O% EXX %O% %O% %O% %O% RET HL DE BC AF

1e scree!

Sa/e al er!a e regis ers: HL DE BC AF HL*ACURCHLB HL AF A*N=3 8=*CALBAS N8J=8 AF 8=*CALBAS N==8= HL ACURCHLB*A AF BC DE HL AF BC DE HL

Sa/e also c$rre!

c1a!!el address:

Sa/e c1arac er o be pri! ed: Selec s ream 3 Ascree!B: Call CHANKO%EN o selec 1e s ream: Res ore c1arac er: Call %RINTKA res ar o pri! c1arac er: Res ore old c1a!!el address: Res ore al er!a e regis ers: 1e

Res ore !ormal regis ers:

THE ?HEXKLINE? SUBROUTINE T1is s$bro$ i!e displa+s 1e /al$es o. 1e e! b+ es .rom 1e HL regis er: Agai! all regis ers are preser/ed: 8ECE 8ECF 8ED= 8ED8 8ED4 8EDL 8EDG 8ED< 8EDA 8EDC 8EDF 8EE= 8EEl 8EE3 8EE4:::8FFF HEXKLINE %USH %USH %USH LD HEXKLINE3 LD CALL INC DCN9 LD CALL %O% %O% %O% RET HL BC AF B*N=A A*AHLB 8EDE*DIS%KHEX3 HL 8ED4*HEXKLINE3 A*N=D 8EAD*DIS%KCH AF BC HL Sa/e regis ers:

1e loca io! passed i!

Co$! s 8= b+ es: Fe c1 a b+ e: Displa+ i i! 1e) a!d .ollo7 7i 1 a space: %oi! o !e) b+ e: Loop .or all l= b+ es: Fi!all+ pri! a carriage re $r!: Res ore regis ers: Fi!is1ed: o NFFB:

U!$sed loca io!s Aall se

A%%ENDIX 8 Labels sor ed b+ address /al$e AFor edi io! 8 S1ado7 RO"B ==== ==3= ==4A ==GG ==BC =88B =84B =8ED =8<3 =8EC =34E =3JE =LDL =LBF =LED =E3D =EED =EDF =EBF =EE3 =J=C =JLC =JJD =J<F =JBD =G8J =GE= =GDA =GB< =GFL =<8D =<LF =<GD =<DL =<CD =<EG =D=L =D43 =DJ3 =DDL =DBE =DF4 =AEC =AGE =ACD =BLG =BGB =BB8 =BDA =C8D =CLJ =CJF =CAL =CDB =CED =D=C =D4F =DGA "AINKRO" SHKERR TESTKS% CHECKKS% STARTKL RUNTI"E TESTKLO5 CHKEND RCL"KNU" ERRKS SARKEXIST FETCHKERR "ISSIN@KD NOKFORK" O%ENKS6N O%K"KC CLS2KS6N EXKDKSTR TESTKRET BREAKK%@" TESTKNEXT NRE%ORTKL CHECKK"K3 TESTKSTAT EX%TKEX%8 NOKNA"E ENDKEX%T DEFLTK= ENDKCODE NONSKBSC NU"KARR SAKHEADER SKBLKKEND LOADKS6N TSKLKNET LDKHDKRS TSTK"ER@E LDKBLKK3 LDKNOK%@" TSTK"RKN TSTKS%ACE CRTKNE5 LSKAN6 LSKBNKE SETKBAUD O%KRSCHAN TCHANKIN READKRS BDKDELA6 SERKINK3 NOTKTOKEN BDKDELK8 BDKDELK4 INKA@AIN ACCKCODE NKIN%UT @ETKNKBUF TESTKOUT ===< ==3< ==L= ==<8 ==EG =84= =8LL =8JE =8A4 =8F= =3LD =3DF =LAJ =LCD =E== =E3F =EGF =EAG =EC8 =EEG =J8E =JLE =J<8 =JA8 =JCC =G33 =GE4 =GDF =GD3 =GFJ =<8C =<EL =<<= =<DE =<D4 =<EC =D88 =DL8 =DJG =DA= =DCG =A=F =AJA =A<A =AD= =BLA =B<8 =BCE =BF= =C8F =CLC =CGL =CAD =CE8 =CFG =D83 =DLE =D<< STKSHADO5 RO"ERR R"ERRK3 CALBASK3 NRE%ORTK= %RO@KLINE LINEKLEN CHKESEN NXTK8 ERRKJ RESKSARS %RKRE%KL% CATKSCRN FORKBKT NOTKO%K" NRE%ORTKC CLR2KS6N ALLKB6TES END8 EX%TKSTR EX%TKNU" EX%TKSTR" NRE%ORTKE NRE%ORTK< ENDHERE NOTKNET %ROC %ARK8 DATA @KT6%E ENDKDATA HDKLOO% SAKB6TE SERIFKS6N TSKLKRS LDKHDRK3 TK"KCODE LDKBLKK4 "ER@EKBLK "ER@EKEND TSTKT6%E ENDKLDK%R LSKBN SRKBN NXTKENTR6 O%KSTREA" BCHANKIN TSTKA@AIN 5AITK8 BDKDELA63 NOTK@RA%H TESTKDTR BORDKREST IN%UTKEND ENDKIN%UT NCHANKIN TR6KA@AIN STKBFKLEN ==8= ==4= ==JJ ==DA ==ED =844 =8LE =8JD =8AE =8FG =3E3 =3AC =LB3 =LD4 =E8C =E48 =E<L =EB8 =EDD =EF3 =J3D =JJ4 =J<4 =JA4 =G== =G4C =GG8 =GAG =GDA =<=4 =<3F =<JE =<<E =<A< =<D< =<F3 =D8D =DE3 =DG4 =DA4 =DDE =A8E =AG3 =A<F =AEL =BJF =B<E =BD8 =BF8 =C4J =CEG =C<< =CBL =CEE =CFB =D8E =DEF =DD4 CALBAS NE5SARS N"INTKSRS STARTK3 TESTKCODE SCKLKLOO% SKI%KNUN CHKENDKL NEXTNU" CRTKSARS EACHKSAR ENDK%RK"S ORE%ORTK8 NOTKFORKB O%ENKRS ERASEKS6N NONSENSE SE%ARATOR RETADKRUN EX%TKS%EC NRE%ORTK4 NRE%ORTK3 NRE%ORTKD EX%TKEX%R UN%A@E ORE%K8K3 SCREENQ TESTKSASE NOK"KARR SRKDATA SASEKS6N SAKBLOCK SAKNET "R@KS6N LDKHEADER TESTKT6%E LDKBLOCK LDKBLKKL NOKAUTOST LDK%RKAR TKLDKNET SETK%RO@ LSKN LSBNKEND ENDKSET TKIN%UT RECKB6TE STARTKBIT 5AITK3 ENDKRSKIN NOTKCR SERKOUTKL BRKKINOUT ORE%ORTK< INKE6Q TESTKBUFF TI"EKOUT OUTKBLKKN ==8< ==4< ==J< ==AE ==FB =84D =8E3 =8JF =8AA =33L =3E< =L<J =LBL =LEG =E8F =E4D =E<E =EBG =EE= =EFE =J3F =JJE =J<E =JB= =G=8 =G4E =G<D =GB3 =GF3 =<=E =<LD =<G3 =<D8 =<AF =<E= =D=3 =D4= =DED =D<< =DBE =DE< =ALE =AGD =ADE =<84 =BGE =BDA =BD< =BFD =C4C =CEA =C<E =CBD =CEA =D=8 =D4< =DJC =DAB CHKS6NTAX INTKSERS STKERROR STARTK4 CO%6CHADD NRE%ORTK8 EACHKST SKSTAT CLK5ORK DEFAULT RE%K"S@ CATKS6N FRT"KS6N FORK" NOTKO%KB "OSEKS6N ALLKSTR"S STKEND RETADKS6N EX%KS%EC3 EX%TKNA"E CHECKKH TESTK"NA" TESTKBAUD EX%TK%R"S LINE CODE %ARK3 EXISTIN@ LDKDATA SASEK" SAKBLKKL% SAKBKEND LDKSFK"R LDKHDKNET NRE%ORTKH NRE%ORTKL LDKBLKKE TSTK"RK" LDK%RO@ RCL"KOLD NOKAUTO LSKB LOADKRUN O%KRSKCH BKIN%UT RECK%ROC SERIALKIN TKFURTHER TCHANKOUT BCHANKOUT BDKDELK3 CALLKIN% NOKREAD INKQKEND TSTKNKEOF NCHANKOUT SK%ACKK8

=DB3 =DFJ =E83 =ELE =ED4 =EBE =F8E =FLD =FJ8 =FD3 =FAE =FCC 8=3A 8=<A 88=A 8843 88GG 88A4 88EJ 838F 83GD 83BJ 83DF 83FE 8433 84LJ 84EF 84<L 84F8 8L3E 8L<B 8LCG 8LFC 8EEE 8EDD 8J84 8JL< 8JJC 8JAC 8GEE 8GAL 8GDE 8<=D 8<3A 8<JG 8<<L 8<AD 8<C= 8BFA 8D3D 8DJ< 8D<G 8DDE 8A=8 8A3L 8AE8 8AD8 8ACG 8B34 8BEC 8B<J 8C=A 8CE4

SENDK%ACK S%KDLK8 DLKLOO% TESTKBLKN STOREKLEN O%K%ERNKN "AKESURE EKREADKN SENDKSC IN%AK UNTILK"K OUT%AKKL NEXTKCHAN STK"A%KAD NXTCHAN R5FKERR @ETKRECD RSKSH3 NOREAD C%KNA"E FAILED NOE"% CHECKK"A% RESKBK"A% ALLKCHARS CHKSKBUFF RESTKSTR" U%DK%OINT "OSE "OSEKEOF CHECKKR EXKDSTR3 NE5KNA"E SAKDRIKL FKHDK4 SAK"A% LDKSEK" FKREC3 TSTK%LACE CLKNKCH U%DKNXTKS CHKKTE"%N TONKDELA6 S5K"OTOR DELKSK8 NOTK%ROT @ETK"KBLK CHKKL%K3 DELA6KBC UNKNK4 UNKNKG CLRKERR 5TKE6 KBDKTEST CLOSEKNET NOK@OOD 5RKSECTOR 5RKSK4 STOREKDS% O%KFK4 FOR"ATK8 TESTKSCT "KKBLK

=DCE =DFD =E8< =EJ3 =EA8 =EFE =F8E =FEJ =FG3 =FDL =FBE =FD3 8=4L 8=DL 888L 884L 88GD 88AE 88FF 83JL 83<F 83BE 83E3 84=J 8444 84LD 84JE 84D8 8L8L 8LEE 8LDE 8LCF 8E4= 8EGD 8EAD 8J3= 8JE< 8JG4 8G=< 8GJD 8GBD 8GED 8<88 8<4E 8<G3 8<DE 8<B8 8<D3 8<FB 8DE3 8DJC 8DAL 8DEC 8A=D 8A48 8AJ4 8AAD 8AE= 8B3D 8BEF 8BBD 8C8B 8CE<

CHKS8 INCKBLKN @ETKNBLK @ETNBKEND @ETNBFKEND SENDKNEOF 5TKSCOUT SCOUTKEND ALLKBITS NKACTISE SENDKRES% UNTK"ARK CHANKS%C FILLK"A% RCL"K"A% TESTK"KBF @ETKRK3 @KHDKRC 5RKRECD CHKKFULL NOK%RT ERRKRS ENTR6 TESTK%"A% ALLCHRK3 CHKSKALL NXTKSTR" RESTK"A% "KA@AIN O%KSTR" USEKR ALLKB6TK3 SAKDRIK3 ENDKSAKDR LSK"CH SAK"A%KL% SEK"KE UNTILFISE CLOSEKCH CLK"KCN RCLKTKCH %TKNKCHAN RE%TEST ALLK"OTRS OUTK"KHD OUTK"KB6T CHKKA@AIN DRKREAD6 DELA6KBC8 UNKNKL UNKNK< HOOKK43 CONSKOUT READKSET @ETK%ACK USEKCKRC 5RKSK8 CLRKBUFF O%KTE"%K" O%KFKL FILLKBKF CHKKSCT CAT

=DDL =E=E =E3G =EJE =EA4 =F=4 =F38 =FE< =FGD =FDD =FCE =FE< 8=J8 8=CL 8833 88E< 88<L 88DJ 83=D 83JC 83AJ 83CL 83E< 8483 844E 84LC 84GG 84DD 8L8A 8LJJ 8LAL 8LDA 8E4< 8E<= 8EDF 8J3D 8JJL 8J<A 8G8< 8GGF 8GC3 8GFG 8<84 8<LB 8<G< 8<A4 8<B4 8<DE 8D=3 8DED 8DGJ 8DA< 8DEF 8A8L 8ALJ 8A<8 8ABF 8AF= 8B4A 8BJC 8BC8 8C4E 8CJE

CHKS3 S%KNKEND CHKS4 @ETKNBUFF O%ENKNKST NETKSTATE CLAI"ED L%KSCOUT SKSCKDEL IN%AKK3 OUT%AK SETKTK"CH TKCHKNA"E DELK"KBUF "KIN%UT CHKK"KEOF @ETKRKL% @KRECKERR 5RITEK%RC NXTKBK"A% CLOSEK" @ETK"KHD3 ENTR6K3 DECKSECT CHKNA"KEND NXTKB6TE NOTRI@HT LCHAN IKA@AIN O%KCHAN CLKCHAN SAKDRISE SAKDRIK4 FK"KHEAD USEKREC REK"A% SEKFAIL FKERROR CLOSE RCL"KCH EXKCHANS SELKDRISE CHKK%RES OFFK"OTOR OUTK"KBUF @ETK"KHD CHKLOO% INK"KBLK UNKNK8 UNKNKE UNKNKD HOOKK48 OUTKCODE INCREC @%KERROR DELKBKCT 5RKSK3 O%K"KSTR" O%KFK8 O%KFKE FILLKBKF3 CHKKNSECT CATKL%

=DDA =E=F =EL= =E<G =EAD =F=E =F4E =FED =F<F =FDE =FCA =FFJ 8=JF 8=FE 883C 88J3 88DE 88D< 838B 83GE 83AD 83DA 83F< 848E 84L8 84EL 84GE 84C8 8L34 8LGF 8LB< 8LE< 8EE3 8ED8 8EFD 8J4D 8JJJ 8JD8 8GE8 8G<D 8GD3 8<=3 8<3= 8<EC 8<GC 8<AD 8<BE 8<ED 8D8C 8DJ8 8D<8 8DDD 8DFC 8A8G 8ALB 8A<J 8ACE 8B=D 8BEG 8BJE 8BDJ 8CLJ 8C<E

SENDSCOUT BRKDELA6 BRCAST CHKSL O%KTE"%KN CHKKREST 5TKS6NC DELA6KSC ENDKSKDEL IN%AKKL DELKDK8 CHKKLOO% TESTK"A% TESTK"CHL "CHANKIN NE5KBUFF NXTKSCT "CHANKOUT NOFULL SENDKBLK CLOSEK"3 CHKK"A%K3 ROTATE CHKKNA"E CHKSKHDKR STCHK STOKDIS% L%END "OSEKOUT CHECKKN CLKCHKKN STARTKSA SAKDRIK5R FKHDK3 LOOKK"A% REK"A%KL% FKREC8 RESTKNKAD CLKRSKCH U%DKSTR" CHKKTE"%" TURNKON NO%RES NXTK"OTOR OUTK"KBLK @ETK"KBUF CHKKA@K3 TESTKERR UNKNK3 UNKNKJ HOOKKCODE CONSKIN %RTKOUT RDKRANDO" RDKSECTOR RDKNEXT RSKSH "AKEK%ER" O%KFK3 FOR"AT 5RKFKTEST "ARKKFREE INKNA"E

8CDA 8CDL 8D8G 8DLJ 8DJJ 8DB< 8DED 8E3F 8EJB 8EGF 8ED< 8ED4

SEKNA"E INSKNA"E OTKNA"S FRKSKL%B %RCHAR ERASEK3 NOINCKC CHKK5K"A% "OSEKRUN SASEKRUN CONSK8 HEXKLINE3

8CAL 8CD< 8D8C 8DLA 8DJE 8DDA 8DF< 8E4E 8EG= 8E<L 8EDE

TKNAK8 "OSEKNA NONA"ES FRKSKRES ERASE TSTKNU" ERASEK"K INKCHK CATKRUN ENDC DIS%KHEX3

8CAF 8CEE 8D4< 8DE= 8DGF 8DEE 8DFB 8EE4 8EGE 8E<G 8EAD

TKNAK3 FKNKSCT FREESECT %RNA"E ERASEK8 L%K%K"A% ERASEK"K3 @KRDES FORKRUN DIS%KHEX DIS%KCH

8CBB 8CFL 8DL3 8DE4 8DDC 8DED 8E3J 8EJJ 8EGA 8ED= 8ECE

ORDKNA" BFKFILLED FRKSCKL% %RN"KL% ERASEKL% L%KBK"A% TKOTHER ERASEKRUN O%KRUN DIS%KNIB HEXKLINE

A%%ENDIX 3 Labels sor ed alp1abe icall+ AFor edi io! 8 S1ado7 RO"B ACCKCODE ALLKCHARS BKIN%UT BDKDELK3 BFKFILLED BREAKK%@" CALLKIN% CATKSCRN CHECKK"K3 CHECKKS% CHKKLOO% CHKKNA"E CHKKSCT CHKEND CHKNA"KEND CHKS8 CHKS6NTAX CLKNKCH CLOSE CLOSEKNET CLS2KS6N CONSK8 CRTKSARS DEFLTK= DELKSK8 DIS%KCH DLKLOO% EACHKSAR ENDKIN%UT ENDKSKDEL ENDC ERASE ERASEK"K ERRKJ EXKDKSTR EX%TKEX%8 EX%TK%R"S FKERROR FKNKSCT FETCHKERR FORKBKT FOR"ATK8 FREESECT @KRECKERR @ETK"KHD @ETKNBUFF @ETKRECD HDKLOO% HOOKK43 INKCHK INCREC IN%AKK3 INTKSERS LDKBLKK4 LDKDATA LDKHEADER LDKSEK" LOADKRUN =CED 8433 =BGE =C<E 8CFL =EE3 =CBD =LAJ =JJD ==GG =FFJ 848E 8C8B =8ED 844E =DCE ==8< 8GEE 8G8< 8A3L =EED 8ED< =8FG =GDA 8<JG 8EAD =E83 =3E3 =CFG =F<F 8E<L 8DJE 8DF< =8F= =EDF =JBD =G=8 8J<A 8CEE =3JE =LCD 8B<J 8D4< 88DJ 8<A4 =EJE 88GG =<EL 8DAL 8E4E 8A8L =FDD ==4< =DL8 =<=E =<D< 8JL< =ADE ALLKBITS ALLK"OTRS BCHANKIN BDKDELK4 BORDKREST BRKKINOUT CAT CATKS6N CHECKK"A% CHKKA@K3 CHKKL%K3 CHKKNSECT CHKKTE"%" CHKENDKL CHKSKALL CHKS3 CLKCHAN CLKRSKCH CLOSEKCH CLR2KS6N CODE CO%6CHADD DATA DELKBKCT DELA6KBC DIS%KHEX DRKREAD6 ENDKCODE ENDKLDK%R ENDKSAKDR ENDHERE ERASEK8 ERASEK"K3 ERRKRS EXKDSTR3 EX%TKEX%R EX%TKS%EC FKHDK3 FKREC8 FILLKBKF FORK" FRKSKL%B FRT"KS6N @KT6%E @ETK"KHD3 @ETK%ACK @ETNBKEND HEXKLINE HOOKKCODE INK"KBLK INKQKEND IN%AKKL KBDKTEST LDKBLKKL LDKHDKNET LDKNOK%@" LDKSFK"R LOADKS6N =FG3 8<4E =B<8 =CAL =CAD =CBL 8CE< =L<J 83DF 8<BE 8<C= 8C4E 8GD3 =8JD 84LD =DDL 8LAL 8GE8 8G=< =EGF =G<D ==FB =GD3 8A<8 8BFA 8E<G 8<D3 =GB< =A=F 8EGD =JCC 8DGF 8DFB 83BE 8LCG =JA4 =EF3 8ED8 8JJJ 8BBD =LEG 8DLJ =LBL =GFJ 83CL 8A48 =EJ3 8ECE 8D<8 8<DE =D=8 =FDE 8A=8 =DE3 =<E= =DJ3 =<AF =<DL ALLKB6TK3 ALLKSTR"S BCHANKOUT BDKDELA6 BRKDELA6 CALBAS CATKL% CHANKS%C CHECKKN CHKKA@AIN CHKK"KEOF CHKK%RES CHKKTE"%N CHKESEN CHKSKBUFF CHKS4 CLKCHKKN CLK5ORK CLOSEK" CLRKBUFF CONSKIN C%KNA"E DECKSECT DELKDK8 DELA6KBC8 DIS%KHEX3 EKREADKN ENDKDATA ENDK%RK"S ENDKSET ENTR6 ERASEK3 ERASEKRUN ERRKS EXISTIN@ EX%TKNA"E EX%TKSTR FKHDK4 FKREC3 FILLKBKF3 FORKRUN FRKSKRES @KHDKRC @ETK"KBLK @ETKNKBUF @ETKRK3 @ETNBFKEND HEXKLINE3 IKA@AIN INKNA"E INKE6Q IN%UTKEND LCHAN LDKBLKKE LDKHDKRS LDK%RKAR LINE LOOKK"A% 8LCF =E<E =CEA =BDA =E=F ==8= 8CJE 8=4L 8LGF 8<B8 88E< 8<84 8GDE =8JE 84LJ =E3G 8LB< =8AA 83AJ 8AE= 8DDD 838F 8483 =FCA 8<FB 8EDE =FLD =<8C =3AC =AEL 83E3 8DB< 8EJJ =8EC =GF3 =J3F =EEG 8EDD 8JJC 8BC8 8EGE 8DLA 88AE 8<AD =D4F 88GD =EA8 8ED4 8L8A 8C<E =CFB =CE8 84DD =DED =<EG =DA4 =G4E 8EFD ALLKB6TES ALLCHRK3 BDKDELK8 BDKDELA63 BRCAST CALBASK3 CATKRUN CHECKKH CHECKKR CHKKFULL CHKK"A%K3 CHKKREST CHKK5K"A% CHKLOO% CHKSKHDKR CHKSL CLK"KCN CLAI"ED CLOSEK"3 CLRKERR CONSKOUT CRTKNE5 DEFAULT DELK"KBUF DELA6KSC DIS%KNIB EACHKST ENDKEX%T ENDKRSKIN END8 ENTR6K3 ERASEKL% ERASEKS6N EXKCHANS EX%KS%EC3 EX%TKNU" EX%TKSTR" FK"KHEAD FAILED FILLK"A% FOR"AT FRKSCKL% @KRDES @ETK"KBUF @ETKNBLK @ETKRKL% @%KERROR HOOKK48 INKA@AIN INCKBLKN IN%AK INSKNA"E LDKBLKK3 LDKBLOCK LDKHDRK3 LDK%RO@ LINEKLEN L%KBK"A% =EAG 8444 =CJF =C8F =EL= ==<8 8EG= =JJE 8L<B 83JL 83DA =F=E 8E3F 8<B4 84L8 =E<G 8GJD =F38 83AD 8D<G 8DEC =DF4 =33L 8=CL =FED 8ED= =8E3 =GE= =C4J =EC8 83E< 8DDC =E48 8GC3 =EFE =J8E =JLE 8E<= 83GD 8=DL 8BJE 8DL3 8EE4 8<AD =E8< 88<L 8ALJ 8DA< =CDB =DFD =FD3 8CDL =D43 =D8D =<EC =DBE =8LL 8DED

L%K%K"A% LSKB LSKN "AINKRO" "CHANKIN "ISSIN@KD "OSEKNA "R@KS6N NCHANKOUT NE5SARS NOKAUTO NOK"KARR NOE"% NONSKBSC NOTKCR NOTKO%KB NOTRI@HT NRE%ORTK4 NRE%ORTKD NU"KARR NXTKENTR6 NXTCHAN O%KFK3 O%K"KC O%KRSCHAN O%KTE"%K" O%ENKS6N ORE%ORTK< OUTK"KBLK OUT%AK %RKRE%KL% %ROC RCLKTKCH RCL"KOLD REK"A% RECKB6TE RESKBK"A% RESTKSTR" RO"ERR RUNTI"E SKSCKDEL SAKBLOCK SAKDRIKL SAK"A% SASEKRUN SCREENQ SENDKNEOF SENDSCOUT SERIALKIN SHKERR STKBFKLEN STKSHADO5 STARTKBIT STOREKDS% TKFURTHER TKNAK8 TCHANKOUT TESTKCODE TESTK"KBF TESTKNEXT TESTKSASE TESTKT6%E TSKLKNET

8DEE =AGD =AG3 ==== 883C =LDL 8CD< =<A< =DJC ==4= =ALE =GDA 83BJ =GFL =CEG =E8F 84GG =J3D =J<4 =<8D =AD= 88=A 8BEG =E3D =BLG 8B3D =LED =CEE 8<GC =FCE =3DF =GE4 8GBD =DE< 8J3D =B<E 83FE 84EF ==3< =88B =FGD =<JE 8EEE 8J84 8EGF =GG8 =EFE =DDA =BD< ==3= =D<< ===< =BD8 8B34 =BFD 8CAL =C4C ==ED 884L =J=C =GAG =<F3 =<CD

L%KSCOUT LSKBN LSBNKEND "AKEK%ER" "CHANKOUT "KKBLK "OSEKOUT NKACTISE NETKSTATE NEXTKCHAN NOKAUTOST NOKNA"E NOFULL NONSENSE NOTKFORKB NOTKO%K" NRE%ORTK= NRE%ORTKL NRE%ORTKC NXTK8 NXTK"OTOR OFFK"OTOR O%KFK4 O%K"KSTR" O%KRUN O%KTE"%KN ORDKNA" OTKNA"S OUTK"KBUF OUT%AKKL %RCHAR %RO@KLINE RCL"KCH RDKNEXT REK"A%KL% RECK%ROC RESKSARS RETADKRUN ROTATE R5FKERR SKSTAT SAKB6TE SAKDRIK5R SAK"A%KL% SASEKS6N SEKNA"E SENDK%ACK SE%ARATOR SETKBAUD SKI%KNUN STKEND STARTK3 STARTKSA STOREKLEN TKIN%UT TKNAK3 TESTKBAUD TESTKDTR TESTK"A% TESTKOUT TESTKSCT TI"EKOUT TSKLKRS

=FE< =AJA =A<F 8B=D 88D< 8CE4 8L34 =FDL =F=4 8=3A =DG4 =G8J 838B =E<L =LD4 =E== ==EG =JLC =E3F =8A4 8<EC 8<LB 8BEC 8AF= 8EGA =EAD 8CBB 8D8G 8<G< =FCC 8DJJ =84= 8GGF 8A<J 8J4D =BDA =3LD =EDD 83F< 8843 =8JF =<<= 8EE3 8J3= =<3F 8CDA =DB3 =EB8 =ACD =8LE =EBG ==DA 8LE< =ED4 =BJF 8CAF =JB= =CGL 8=JF =DGA 8C=A =DEF =<D4

L%END LSKBNKE "KA@AIN "AKESURE "ER@EKBLK "OSE "OSEKRUN NKIN%UT NE5KBUFF NEXTNU" NOKFORK" NOK%RT NOINCKC NO%RES NOTK@RA%H NOTK%ROT NRE%ORTK8 NRE%ORTKE NRE%ORTKH NXTKBK"A% NXTKSCT O%KCHA" O%KFKL O%K%ERNKN O%KSTREA" O%ENKNKST ORE%K8K3 OUTKBLKKN OUTK"KB6T %ARK8 %RNA"E %RTKOUT RCL"K"A% RDKRANDO" READKRS RE%K"S@ RESTK"A% RETADKS6N RSKSH SKBLKKEND SAKBKEND SAKDRIK3 SAKDRISE SAKNET SCKLKLOO% SELKDRISE SENDKRES% SERKINK3 SETK%RO@ S%KDLK8 STKERROR STARTK4 STCHK S5K"OTOR TKLDKNET TKOTHER TESTKBLKN TESTKERR TESTK"CHL TESTK%"A% TESTKS% TONKDELA6 TSTKA@AIN

84C8 =AGE 8L8L =F8E =DJG 84F8 8EJB =D=C 88J3 =8AE =LBF 83<F 8DED 8<3= =CLC 8<<L =84D =J<8 =D=3 83JC 88DE 8LJJ 8BEF =EBE =BLA =EA4 =G4C =DD4 8<DE =GDF 8DE= 8DFC 888L 8A8G =BB8 =3E< 84D8 =EE= 8ACE =<GD =<D8 8E4= 8LDA =<<E =844 8GFG =FBE =C8D =A8E =DFJ ==J< ==AE 84EL 8<3A =DDE 8E3J =ELE 8<ED 8=FE 84=J ==4A 8<=D =BCE

LSKAN6 LSK"CH "KIN%UT "ARKKFREE "ER@EKEND "OSEKEOF "OSEKS6N NCHANKIN NE5KNA"E N"INTKSRS NOK@OOD NOKREAD NONA"ES NOREAD NOTKNET NOTKTOKEN NRE%ORTK3 NRE%ORTK< NRE%ORTKL NXTKB6TE NXTKSTR" O%KFK8 O%KFKE O%KRSKCH O%KSTR" O%ENKRS ORE%ORTK8 OUTKCODE OUTK"KHD %ARK3 %RN"KL% %TKNKCHAN RCL"KNU" RDKSECTOR READKSET RE%TEST RESTKNKAD R"ERRK3 RSKSH3 SK%ACKK8 SAKBLKKL% SAKDRIK4 SAKHEADER SASEK" SCOUTKEND SENDKBLK SENDKSC SERKOUTKL SETKTK"CH S%KNKEND STK"A%KAD STARTKL STOKDIS% TKCHKNA"E TK"KCODE TCHANKIN TESTKBUFF TESTKLO5 TESTK"NA" TESTKRET TESTKSTAT TR6KA@AIN TSTK"ER@E

=AEC 8EAD 8833 8CLJ =DA= 8L3E =E4D =D83 8LFC ==JJ 8AE8 =CEA 8D8C 88EJ =G33 =CLJ =JJ4 =JA8 =D4= 84LC 84JE 8B4A 8BJC =<84 8LEE =E8C =LB3 8DEF 8<G3 =GB3 8DE4 8GED =8<3 8ALB 8A=D 8<88 8JD8 ==L= 88A4 =DAB =<G3 8E4< =<LF =<LD =FEJ 83GE =FJ8 =C<< =FE< =E=E 8=<A ==BC 84GE 8=J8 =D88 =BGB =D8E =84B =J<E =EBF =J<F =DLE =D=L

TSTK"RK" TSTK%LACE UNKNK8 UNKNKE UNKNKD UNTILFISE USEKCKRC SEKFAIL SRKDATA 5RKRECD 5RKSECTOR 5TKE6

=D<< 8JAC 8D=3 8DED 8DGJ 8JG4 8AJ4 8JJL =<=4 88FF 8AD8 8DDE

TSTK"RKN TSTKS%ACE UNKNK3 UNKNKJ UN%A@E U%DKNXTKS USEKR SEK"KE 5AITK8 5RKSK8 5RITEK%RC

=DDL =DBE 8D8C 8DJ8 =G== 8GAL 8LDE 8JE< =BF= 8AAD 83=D

TSTKNKEOF TSTKT6%E UNKNK4 UNKNKG UNTK"ARK U%DK%OINT USEKREC SERIFKS6N 5AITK3 5RKSK3 5TKSCOUT

=D4< =DCG 8D3D 8DJ< =FD3 84<L 8EDF =<DE =BF8 8ABF =F8E

TSTKNU" TURNKON UNKNKL UNKNK< UNTILK"K U%DKSTR" SARKEXIST SRKBN 5RKFKTEST 5RKSK4 5TKS6NC

8DDA 8<=3 8DE3 8DJC =FAE 8G<D =34E =A<A 8BDJ 8ACG =F4E

A%%ENDIX 4 ?S1ado7? s+s em /ariables No es Address X8 34G4L ECBJ Name FLA@S4 Co! e! s Sario$s .lags' bi = K se d$ri!g e)ec$ io! o. ?!e7? comma!ds: bi 8 K se d$ri!g e)ec$ io! o. CLEAR2 comma!d: O! e! r+ o 1e s1ado7 RO"* i is se a 1e .irs ?pagi!g? opera io!: bi 3 K se i. 1e mai! RO" error 1a!dler is o be $sed: ANormall+ i is al7a+s rese B: bi 4 K se i. $si!g 1e !e 7or,: bi L K se d$ri!g e)ec$ io! o. LOAD a!d "OSE: bi E K se d$ri!g e)ec$ io! o. SASE co!7sa!d: bi J K se d$ri!g e)ec$ io! o. "ER@E co!mia!d: bi G K se d$ri!g e)ec$ io! o. SERIF6 corm!a!d: FLA@S4 ma+ be addressed 7i 1 AI6N83LB: Normall+ poi! s address o poi! o N=8F= AERRKJB: 6o$ ma+ modi.+ o a RA" ro$ i!e: 1is

X3 X8=

34G4E ECBG 34G4G ECBD

SECTOR SBRT

RO" pagi!g s$bro$ i!e as .ollo7s' ECBD ECBC ECBF ECC3 LD HL*!!!!! CALL !!!!! LD AHKLB*HL RET

HKL ETU NECBA Used o sa/e 1e /al$e o. HL 71ile calli!g ?mai!? RO" ro$ i!es: 3 34GLG ECC4 BAUD Timi!g co!s a! $sed d$ri!g RS343 iPo: "a+ be ob ai!ed 7i 1' A4E=====PA3J(ba$d ra eBBK3 Ne 7or, o7! s a io! !$mber 8::JL: Border colo$r $sed d$ri!g IPOI !ormall+ = Ablac,B Lo7 b+ e ma+ be == or =8I 1ig1 b+ e 1olds a recei/ed b+ e i. lo7 b+ e is =8: Co$! er o. sec ors e)ami!ed d$ri!g "icrodri/e opera io!s: Temporar+ s ore .or CHKADD: S ore .or !e 7or, respo!se code N=8: S ar o. !e 7or, b$..erI des i!a io! s a io! !$mber .or 1e c$rre! pac,e A=::JLB: S a io! !$mber o. ?se!di!g? Spec r$m .or pac,e : C$rre! %ac,e pac,e bloc, !$mber A=::JEE4EB: 1e c$rre!

8 8 N3 N3 N3 8 8 8 X3 N8 X8

34GLD ECCE 34GED ECCJ 34GE8 ECCG 34GE4 ECCD 34GEE ECCB 34GEG ECCD 34GE< ECCE 34GED ECCF 34GJ< ECD= 34GJ3 ECD3 34GJ4 ECD4

NTSTAT IOBORD SERKFL SECTOR CHADDK NTRES% NTDEST NTSRCE NTNU"B NTT6%E NTLEN

+pe A== .or !ormal pac,e s* =8 .or EOFB: 1e da a bloc, bei!g recei/ed* 8::3EE:

Le!g 1 o.

N8 N8 N3

34GJL ECDL 34GJE ECDE 34GJJ ECDJ

NTDCS NTCHS DKSTR8

C$rre! C$rre!

da a bloc, c1ec,s$m: 1eader bloc, c1ec,s$m:

S ar o. .irs <Kb+ e .ile speci.ierI dri/e !$mber 8::<* des i!a io! s a io! !$mber =::JL or ba$d ra e GE::8D3==: S ream !$mber =::8E: De/ice speci.ier >m>* >!>* > > or >b>: File!ame le!g 1 File!ame s ar address: S ar o. 3!d <Kb+ e .ile speci.ier* $sed b+ "OSE a!d LOAD comma!ds: See SKSTR8: See LKSTR8: See NKSTR8: S ar o. 7or,space $sed b+ LOAD* SASE* SERIF6 a!d "ER@E comma!ds: File +pe* ma+ be' == K program =8 K !$meric arra+ =3 K s ri!g arra+ =4 K b+ es Da a bloc,le!g 1: Da a bloc, s ar address: /ariablesB* or arra+ !ame:

N8 N8 N3 N3 N3 N8 N8 N3 N3 N8

34GJ< ECD< 34GJD ECDD 34GG= ECDA 34GG3 ECDC 34GGL ECDE 34GGJ ECE= 34GGG ECE8 34GG< ECE3 34G<< ECEL 34G<3 ECEJ

SKSTR8 LKSTR8 NKSTR8 DKSTR3 SKSTR3 LKSTR3 NKSTR3 HDK==

N3 N3 N3 N3 8

34G<4 ECEG 34G<E ECED 34G<G ECEB 34G<D ECED 34GD8 ECEF

HDK=B HDK=D HDK=F HDK88 CO%IES

%rogram le!g 1 A7i 1o$

A$ os ar li!e !$mber ANFFFF i. !o a$ os ar B* or address o. 1e ro$ i!e called b+ $si!g ?1oo, code? N43: N$mber o. copies made b+ SASE: Rese o N=8 a. er 1e SASE:

A%%ENDIX L C1a!!els 8: "ICRODRISE CHANNEL T1is area is $sed o comm$!ica e 7i 1 1e "icrodri/e de/iceI i is crea ed i! 1e CHANS area: T1e s ar address is poi! ed b+ 1e IX i!de) regis er i! 1e s1ado7 RO" program: = 3 L E G D 88 84 8L 3L 3E 3J 3< L= L8 L3 LL EL EE JG N===< N===< ?"? N88D< N8833 N=3E4 CHB6TE CHREC CHNA"E CHFLA@ CHDRIS CH"A% K HDFLA@ HDNU"B K HDNA"E HDCHK K RECFL@ "ai! RO" ?o$ p$ ? ro$ i!e: "ai! RO" ?i!p$ ? ro$ i!e: C1a!!el speci.ier A?"?N<=H de!o es a ? emporar+? c1a!!el* $sed b+ SASE* "OSE* e c:B: S1ado7 RO" ?o$ p$ ? ro$ i!e: S1ado7 RO" ?i!p$ ? ro$ i!e: C1a!!el le!g 1: %osi io! o. 1e !e) b+ e o be recei/ed or s ored i! 1e b$..er A=::E83B: Record !$mber =::3EE: Also $sed as emporar+ s ore o. sec or !$mber: 8=Kb+ e .ile!ame 7i 1 raili!g spaces: Bi = se i!dica es a ?7ri e? c1a!!el: Bi = rese i!dica es a ?read? c1a!!el: Dri/e !$mber 8::<: Address o. microdri/e map: 83 b+ es o. 1eader preamble A e! Xeros a!d 7o NFFB: Used o mar, 1e s ar o. 1e 1eader bloc,: Bi = se i!dica es 1a 1e recei/ed bloc, is a 1eader: Sec or !$mber .rom 71ic1 1e 1eader comes: U!$sed 8=Kb+ e car ridge !ame 7i 1 raili!g spaces: C1ec,s$m .rom HDFLA@ o HDCHKK8: 83 b+ es o. da a preamble* as .or 1e 1eaderI $sed o mar, 1e s ar o. 1e record descrip or: Bi = rese i!dica es 1a 1e recei/ed bloc, is a record descrip or: Bi 8 is se i. 1e record is 1e EOF o!e: Bi 3 is rese i. 1e record is par o. a %RINTK +pe .ile: Record !$mber =::3EE: N$mber o. b+ es i! 1e record A=::E83B: 8=Kb+ e record !ame 7i 1 raili!g spaces: C1ec,s$m .rom RECFL@ o DESCHKKl: S ar o. E83Kb+ e b$..er: B$..er c1ec,s$m:

J< JD G8 <8 <3 EDL

RECNU" RECLEN RECNA" DESCHK CHDATA DCHK

B+ es =::3G are $sed as ?c1a!!el descrip or? a!d are !e/er ra!smi edI b+ es 3<::EL are 1e ?1eader bloc,?I b+ es EE::EDL are 1e ?da a bloc,?: B+ es EE::D8 ma+ be collec ed Aor 7ri e!B as ?record descrip or?* 7i 1o$ a..ec i!g 1e da a b$..er s ar i!g .rom CHDATA: 3: NET5ORK CHANNEL As 7i 1 1e "icrodri/e c1a!!el* 1is area is addressed b+ $si!g 1e IX i!de) regis er i is $sed o comm$!ica e 1ro$g1 1e Local Area Ne 7or,: = 3 L E G D 88 N===< N===< ?N? N=DJC N=DDC N=88L NCIRIS "ai! RO" ?O$ p$ ? ro$ i!e* "ai! RO" ?I!p$ ? ro$ i!e: C1a!!el speci.ier A?N?N<=H de!o es a ? emporar+? c1a!!elB: S1ado7 RO" ?O$ p$ ? ro$ i!e: S1ado7 RO" ?I!p$ ? ro$ i!e: Le!g 1 o. 1e c1a!!el: Des i!a io! s a io! !$mber =::JL:

83 84 8E 8J 8G 8< 8D 3= 38

NCSELF NCNU"B NCT6%E NCOBL NCDCS NCHCS NCCUR NCIBL NCB

O7! s a io! !$mber 8::JL: C$rre! bloc, b$mber =::JEE4E: %ac,e +pe' == !ormal pac,e * =8 ?e!d o. .ile? pac,e : N$mber o. b+ es 1eld i! 1e b$..er d$ri!g ?o$ p$ ? A1olds = i. 1e c1a!!el is $sed .or readi!gB: C1ec,s$m o. 1e 3EEKb+ e b$..er: C1ec,s$m o. bloc, NCIRIS:::NCDCS: %osi io! o. 1e c$rre! l+ recei/ed b+ e Ai! 1e b$..erB: N$mber o. b+ es i! 1e b$..er d$ri!g ?o$ p$ ? A1olds Xero i. 1e c1a!!el is $sed .or 7ri i!gB: 3EEKb+ e da a b$..er:

51ile ?se!di!g?* 1e b+ es 88:8< .orm 1e ?1eader bloc,? A o be s ored i! o 1e s+s em /ariables NTDEST:::NTCHS o. 1e recei/i!g Spec r$mB: B+ es 38::3GE .orm 1e ?da a bloc,?: 4: RS343 >T> CHANNEL

T1is c1a!!el is crea ed o!l+ 71e! 1e RS343 li!, is o be a ac1ed o a s ream: ?Temporar+? RS343 c1a!!els are !e/er crea ed* beca$se 1e RS343 IPO does !o re;$ire a b$..er o s ore 1e da a o be se! or recei/ed A 1e o!l+ ?7or,space? is made b+ 1e SERKFL s+s em /ariableB: = 3 L E G D L: = 3 L E G D N===< N===< ?T? N=C4C N=BJF N===B "ai! RO" ?o$ p$ ? ro$ i!e: "ai! RO" ?i!p$ ? ro$ i!e: C1a!!el speci.ier: S1ado7 RO" ?o$ p$ ? ro$ i!e: S1ado7 RO" ?i!p$ ? ro$ i!e: C1a!!el le!g 1:

RS343 >B> CIANNEL N===< N===< ?B? N=CEA N=BGE N===B "ai! RO" ?o$ p$ ? ro$ i!e: "ai! RO" ?i!p$ ? ro$ i!e: C1a!!el speci.ier: S1ado7 RO" ?o$ p$ ? ro$ i!e: S1ado7 RO" ?i!p$ ? ro$ i!e: C1a!!el le!g 1:

A%%ENDIX E Bibliograp1+ S: Sic,ers* 9X S%ECTRU" BASIC %RO@RA""IN@ ASi!clair Researc1 L d:B "ICRODRISE AND INTERFACE I "ANUAL ASi!clair Researc1 L d:B I: Loga!* F: O?Hara* THE CO"%LETE S%ECTRU" RO" DISASSE"BL6 A"elbo$r!e Ho$seB I: Loga!* S%ECTRU" "ICRODRISE BOOK A"elbo$r!e Ho$seB R: 9a,s* %RO@RA""IN@ THE 9<= AS+be)B

A%%ENDIX J I!de) o ro$ i!es AFor edi io! 8 S1ado7 RO"B ==== ===< ==8= ==8< ==3= ==3< ==4= ==4< ==4A ==L= ==JJ ==J< ==GG ==<8 ==DA =8FG =34A =3LD =3E< =3<G =L<J =LBL =LED =E48 =E4D =EED =EGF =EDF =EB8 =EBG =ECl =EEG =EF3 =J8E =J3F =JLE =JJE =J<E =J<F =JA4 =JB= =JBD =G== =G=8 =<3F =<<= =<DL =<DE =<A< =<AF =AEC =ADE =ACD =AEF =B84 =BLG =BJL =BJF Re $r! o mai! RO" S ar Call a mai! RO" ro$ i!e Tes i. s+! a) is bei!g c1ec,ed S1ado7 error "ai! RO" error res ar Crea e !e7 s+s em /ariables res ar "as,able i! err$p TESTKS% "ai! RO" error ro$ i!e No!Kmas,able i! err$p STKERROR CHECKKS% CALBASK3 Co! rol ro$ i!e Crea e !e7 s+s em /ariables ro$ i!e S+s em /ariables de.a$l /al$es Rese !e7 s+s em /ariables S1ado7 repor pri! i!g S1ado7 repor messages CAT comma!d s+! a) ro$ i!e FOR"AT comma!d s+! a) ro$ i!e O%EN comma!d s+! a) ro$ i!e ERASE comma!d s+! a) ro$ i!e "OSE comma!d s+! a) ro$ i!e CLS2 comma!d ro$ i!e CLEAR2 comma!d ro$ i!e E)c1a!ge .ile speci.iers SE%ARATOR E!d o. s a eme! Re $r! o 1e mai! i! erpre er E/al$a e s ri!g e)pressio! E/al$a e c1a!!el e)pressio! E/al$a e !$meric e)pressio! E/al$a e .ile!ame E/al$a e s ream !$mber C1ec, >m> parame ers C1ec, >m> parame ers a!d .ile!ame C1ec, s a io! !$mber E/al$a e >)>I!I>!ame> C1ec, ba$d ra e E/al$a e s ream or e)pressio! UN%A@E E/al$a e parame ers SASE comma!d s+! a) ro$ i!e Sa/e a b+ e o !e 7or, or RS343 li!, LOAD comma!d s+! a) ro$ i!e SERIF6 comma!d s+! a) ro$ i!e "ER@E comma!d s+! a) ro$ i!e LOADKSERIF6K"ER@E comma!ds ro$ i!e LOAD or SERIF6 Load >r$!> program Se >BAUD> s+s em /ariable RS343 imi!g co!s a! s Ope! RS343 c1a!!el i! CHANS area A ac1 c1a!!el o a s ream >T> c1a!!el da a >T> c1a!!el i!p$

=BGE =BGB =B<8 =C4C =CEA =CAD =CBL =CBD =D=C =D83 =DJC =DD4 =DAB =DB3 =E=F =E8< =EA4 =EAD =EBE =EEA =EFE =F=4 =F=E =F8E =FJ8 =FD3 =FBE =FCE =FE< 8=CL 8833 883C 88GG 88AE 88D< 88FF 83JL 83GE 83AJ 83BE 83CL 83DA 83FF 84=J 8483 848E 84L8 84EF 84D8 84CC 84EE 84F8 8LEE 8LAL 8LCG 8LDA 8E<= 8EAD 8J84 8J3D 8JL< 8JJJ 8JD8

>B> c1a!!el i!p$ >T> c1a!!el i!p$ ser/ice ro$ i!e >B> c1a!!el i!p$ ser/ice ro$ i!e >T> c1a!!el o$ p$ >B> c1a!!el o$ p$ Border colo$r res ore Brea, i! o IPO opera io! CALLKIN% >N> c1a!!el i!p$ >N> c1a!!el i!p$ ser/ice ro$ i!e >N> c1a!!el o$ p$ OUTKBLKKN SK%ACKK8 SENDK%ACK BRKDELA6 Header a!d da a bloc, recei/i!g O%EN >N> c1a!!el comma!d ro$ i!e Ope! emporar+ >!> c1a!!el Ope! perma!e! >!> c1a!!el >N> c1a!!el da a Se!d EOF bloc, o !e 7or, Ne 7or, s a e C1ec,Kres i!g 5ai Ksco$ Se!dKsco$ IN%AK Se!d respo!se b+ e OUT%AK Se a emporar+ >m> c1a!!el Reclaim >m> c1a!!el >"> c1a!!el i!p$ >"> c1a!!el i!p$ ser/ice ro$ i!e @e a record @e 1eader a!d da a bloc, >"> c1a!!el o$ p$ 5ri e record o! o "icrodri/e CHKKFULL SENDKBLK Close .ile ERRKRS Fe c1 1eader .rom "icrodri/e C1ec, map bi s a e Rese bi i! map area C1ec, ?pse$doKmap? bi s a e Decrease sec or co$! er CHECKKNA"E Calc$la ePcompare c1ec,s$ms Res ore s ream da a Res ore map addresses >"> c1a!!el da a %reamble da a "OSE comma!d Use s ream or emporar+ c1a!!el Close ?"OSE? c1a!!el E)c1a!ge DSTR8 a!d STR3 co! e! s Sa/e da a bloc, i! o "lcrodri/e @e 1eader i!.orma io! .rom "icrodri/e Load or /eri.+ bloc, .rom "icrodri/e Sa/e "icrodri/e "ap co! e! s Res ore "icrodri/e "ap co! e! s LDKSEK" Fe c1 record .rom "icrodri/e: Res ore address o. .ile!ame

8G=< 8G8< 8GBD 8GFG 8<JG 8<G3 8<A4 8<ED 8<FA 8D=3 8DJC 8D<8 8DAL 8DA< 8DAD 8DDD 8DEC 8DFC 8A=8 8A=D 8A8G 8A3L 8A48 8ALB 8A<J 8AD8 8AE= 8AF= 8B3D 8BJE 8CE< 8D4< 8DED 8DJJ 8DJE 8E4E 8EE4 8EJJ 8E<G 8EDE 8EAD 8ECE

CLOSE STREA" CLOSE comma!d Reclaim emporar+ c1a!!els Selec dri/e mo or 8 milliseco!d dela+ Se!d da a bloc, o "icrodri/e Head Recei/e bloc, .rom "icrodri/e Head TESTKBRK DELA6KBC UNKNK8 UNKNK< HOOKKCODE Hoo, code N43 Hoo, code N48 Hoo, code addresses Co!sole i!p$ Co!sole o$ p$ %ri! er o$ p$ Ke+board es Read se;$e! ial Read ra!dom Close !e 7or, c1a!!el @e pac,e .rom !e 7or, Read sec or Read !e) sec or 5ri e sec or Clear b$..er co! e! s Ope! a perma!e! >m> c1a!!el Ope! a emporar+ >m> c1a!!el FOR"AT >m> comma!d CAT comma!d FREESECT %RNA"E %RCHAR ERASE comma!d Sig!al ?.ree sec or? Ob ai! record descrip or Calls o 1e comma!d ro$ i!es DIS%KHEX DIS%KHEX3 DIS%KCH HEXKLINE

A%%ENDIX G S1ado7 RO" iss$e 3 T1e !e7 9X I! er.ace 8?s 7i 1 serial !$mber grea er 1a! <G48E 1a/e bee! pro/ided 7i 1 a !e7 s1ado7 RO"* 7i 1 some ge!eral impro/eme! s: T1e Spec r$ms .i ed 7i 1 1e ?!e7? i! er.ace 7ill pri! comma!d ?%RINT %EEK 34G3D?: T1e mai! c1a!ges ma+ be s$mmed $p as .ollo7s' T1e TCHANKOUT s$bro$ i!e A> > c1a!!el o$ p$ ro$ i!eB 1as bee! remar,abl+ impro/edI 1e TAB .$!c io! !o7 is s$ppor ed* as 7ell as 1e ?comma? co! rol code* a!d 1e ?leadi!g space? b$g 1as bee! correc ed: T1e 71ole s$bro$ i!e is lis ed belo7: =C4A =C4C =C4E =CL= =CL8 =CL4 =CLL =CLG =CLD =CLB =CLD =CLF =CE8 =CE4 =CEE =CEG =CED =CEA =CED =CJ= =CJ4 =CJE =CJ< =CJC =CJD =CG= =CG3 =CGL =CG< =CGA =CGD =CGF =C<3 =C<L =C<J =C<A =C<C =C<D =C<E =C<F =CD= =CD3 =CDL =CDJ TCHANKOUT C% CR SUB RST DEF5 RET NOTKTOKEN LD RES C% CR SET NOTKLEAD C% CR LD NOTK@RA%H C% CR %USH INC LD C% CR CALL LD ENITKCH %O% C% CTRLKCD C% CR LD LD CALL LD C% NOTKCR C% CR LD LD S%CKCOUNT INC INC LD C% CR C""KLOO% SUB CR CR NAE C*=CLL*NOTKTOKEN NAE 8=*CALBAS N=C8< HL*NEC4B =*AHLB N3= N9*=CLF*NOTKLEAD =*AHLB NGF C*=CEE*NOTK@RA%H A*N4F N3= C*=CG<*CTRLKCD AF AI6N88<B A*AECB8B AI6N88<B NC*=CJC*E"ITKCH =CGL*NE5LINE AI6N88<B*N=8 AF =D=G*BCHANKOUT N=D N9*=C<3*NOTKCR AI6N88<B*N== A*N=D =D=G*BCHANKOUT A*N=A =D=G*BCHANKOUT N=J N9*=CAE*NOTKC"" BC*AECB=B E*N== E C A*C B 9*=CDA*%RINTKS%C N=< 9*=CDA*%RINTKS%C NC*=CD3*C""LOO% C$mp i. 1e code is !o a o,e! code: Red$ce ra!ge o. o,e!: A!d de o,e!ise i b+ calli!g rec$rsi/el+ 1is ro$ i!e /ia mai! RO" ?%OKTOKENS? ro$ i!e: T1is is FLA@S: Rese ?leadi!g space? .lag: Is 1e c1arac er a spaceH C$mp i. i is !o : O 1er7ise se ?leadi!g space? .lag: C$mp i. 1e c1arac er is !o a ?grap1ic? c1arac er: O 1er7ise pri! a ?H? C$mp 7i 1 codes lo7er 1a! N3=: Sa/e 1e c1arac er code: I!creme! c$rre! pri! posi io!: Fe c1 li!e 7id 1: C$mp i. 1e posi io! is lo7er 1a! or e;$al o 1e /al$e o. 5IDTH: Se!d CR a!d LF codes 71e! posR7id 1: Rese ?pri! posi io!? o N=8: Res ore c1arac er o be pri! ed: %ri! i : C$mp i. 1e c1arac er is !o ?CR?: Clear pri! posi io!: %ri! a CR code: %ri! a LF code: c1arac er is !o rol code: i! o B* a!d pri! o C: 1e ?<=? i! respo!se o 1e

C$mp i. 1e ?comma? co! Fe c1 7id 1 posi io! i!

I!creme! space co$! er: I!creme! pri! posi io!: C$mp i. ?posi io!? reac1es rig1 margi!: Tab$la e e/er+ < col$m!s: C$mp 71e! reac1ed 1e rig1 S$b rac agai!:::

1e

col$m!:

=CD< =CDA =CDB =CDD =CA= =CA8 =CA3 =CA4 =CAE =CAG =CAD =CAB =CAD =CAF =CB= =CB4 =CBE =CB< =CBB =CBE =CBF =CC3 =CC4 =CCL =CCE =CCJ =CCH =CC< =CCB =CCE =CD= =CD4 =CDJ =CDG =CDA =CDC =CDE =CE= =CE8 =CE3 =CEE =CEJ =CED =CEA =CFC =CEE =CEF =CF= =CF8 =CF3 =CFL =CFE =CFJ =CFD =CFC =CFD =CFE =CFF =D=8 =D=L =D=E

CR =C<C*S%CKCOUNT %RINTKS%C %USH DE LD A*N3= CALL =C4A*TCHANKOUT %O% DE DEC E RET 9 CR =CDA*%RINTKS%C NOTKCNN C% N8J CR 9*=CBE*TABK%ROC C% N8G CR 9*=CEB*TABK%ROC C% N8D RET C LD DE*N=CD= CR =CB<*STOREKCOD TABK%ROC LD DE*N=CC< STOREKCOD LD ATSDATAKloB*A ALTERKOUT LD HL*ACURCHLB %USH DE LD DE*N===E ADD HL*DE %O% DE LD AHLB*E INC HL LD AHLB*D RET TABKSERS LD DE*N=CD= LD ATSDATAK1iB*A CR =CBB*ALTERKOUT LD DE*N=C4A CALL =CBB*ALTERKOUT LD D*A LD A*ATSDATAKloB C% N8J CR 9*=CEJ*TSTK5IDTH C% N8G CCF RET N9 LD A*ATSDATAK1iB LD D*A TSTK5IDTH LD A*AECB8B C% D CR 9*=CEE*TABK"OD CR NC*=CFL*TAB9ERO TABK"OD LD B*A LD A*D SUB B LD D*A CR =CEJ*TSTK5IDTH TAB9ERO LD A*D OR A C% 9*=CGL*NE5LINE TABLOO% LD C% RET %USH LD CALL %O% CR A*AECB=B D 9 DE A*N3= =C4A*TCHANKOUT DE =CFD*TABLOO%

Col$m! !o reac1ed* F$mp bac,: Sa/e space co$! er: %ri! 1e re;$ired !$mber o. spaces b+ calli!g TCHANKOUT rec$rsi/el+: Res ore space co$! er:

C$mp 7i 1 AT co! rol code: C$mp 7i 1 TAB co! rol code: Re $r! 7i 1 codes lo7er 1a! 8Jd

Ser/ice ro$ i!e .or INK* %A%ER :::co! rol codes: Ser/ice ro$ i!e .or AT a!d TAB S ore .irs opera!d: Fe c1 c$rre! c1a!!el address: %oi! o ?o$ p$ address? poi! er:

S ore !e7 ?o$ p$ ? address:

T1e !e7 ?o$ p$ ? address: S ore seco!d opera!d: C$mp o c1a!ge 1e ?o$ p$ ? address: Res ore 1e !ormal ?o$ p$ ? address: %ass ?seco!d opera!d? o D: Fe c1 .irs opera!d Acode +peB: C$mp 7i 1 AT: Re $r! $!less 1e code is TAB:

Fe c1 TAB col$m!: "o/e i i! o D: Fe c1 li!e 7id 1: C$mp i. TAB is a las col$m!: C$mp i. TAB is 7i 1i! ra!ge: Fe c1 col$m! 7id 1: Fe c1 TAB col$m!: AMTABK5IDTH T1e !e7 posi io!: Ta,e ATAB pos:B "OD A7id 1B: Fe c1 TAB col$m!: Ne7 li!e 7i 1 TAB =:

Fe c1 c$rre! pri! posi io!: Re $r! i. alread+ a 1e:: ::TAB posi io!: %ri! 1e TAB spaces:

6o$ s1o$ld !o e 1a /ariable li!e 7id 1 is allo7ed b+ %OKEi!g /al$e i! o 1e loca io! 34G3DI 1e de.a$l /al$e is <=:

1e re;$ired

O 1er impor a! al era io!s co!cer! 7i 1 "icrodri/e readi!g opera io!s Ai:e: c1a!!el ope!i!g* CAT comma!dBI 1e !$mber o. sec ors e)ami!ed is !o .i)ed o 3EE* b$ is gi/e! b+ ?ma)im$m sec or !$mber N 4?I 1is pre/e! s 1e ro$ i!e .rom readi!g ?!o!e)is e! ? sec ors* a!d red$ces 1e ime re;$ired i! 1e comma!d e)ec$ io!: T1e c1ec,i!g opera io! do!e b+ 1e FOR"AT comma!d ro$ i!e is !o7 made direc l+ 7i 1 OUT i!s r$c io!s* 7i 1o$ $si!g 1e "icrodri/e c1a!!el o se!dPrecei/e 1e bloc,s co! ai!i!g ? es da a?: O 1er mi!or c1a!ges are' K T1e O%KRSKCH ro$ i!e s ores >b> c1a!!el: 1e >B> speci.ier i! o AIXNLB 71e! ope!i!g a RS343 o 1e

K "os o. 1e es s do!e o 1e BREAK ,e+ 1a/e bee! replaced b+ calls TESTKBRK s$bro$ i!e a N8J4E: K T1e carr+ .lag is preser/ed 71e! calli!g 1$s* 1e ?1oo, code? N3F 7or,s correc l+: 1e BORDKREST s$bro$ i!e a

N=DLDI

K 51e! a >m> or >!> c1a!!el is crea ed i! 1e CHANS area AO%K%ER"KN a!d SETKTK "CHB* a c1ec, is made o see i. 1ere is s$..icie! memor+ o i!ser 1e !e7 space: K T1e @ETK"KHD s$bro$ i!e* re $r!s A7i 1 bi = o. HDFLA@ or RECFL@ i!/er edB 71e! ? imeKo$ ? occ$rs d$ri!g 1e readi!g opera io!: K A! i!s r$c io! ?SET G*AHLB? 1as bee! i!ser ed a loca io! N8GL8 Ai:e: 1e middle o. 1e CLOSE ro$ i!eB* o correc 1e b$g prese! i! 1e ?old? s1ado7 RO" Asee comme! o 1e CLOSE ro$ i!eB: K No CR code is se! 71e! a RS343 ?b> c1a!!el is closed: 1e SETKTK"CH s$bro$ i!e:

K T1e ?1oo, code? N3B calls

K T7o !e7 ?1oo, codes?* N44 a!d N4L* are !o7 a/ailable: Hoo, code N44 ma+ be $sed o .e c1 a ?record descrip or? .rom 1e !e) sec orI 1e microdri/e mo or m$s be $r!ed o! be.ore calli!g 1e ro$ i!e: T1e record descrip or is s ored i! o 1e c$rre! microdri/e c1a!!el A71ose s ar address m$s be 1eld i! o 1e IX i!de) regis erB* a!d 1e carr+ .lag is re $r!ed se i. a!+ error occ$rs* or i. 1e ?record descrip or? 1olds a .ile!ame s ar i!g 7I 1 CHRQ =: Hoo, code N4L ope!s a RS343 >b> c1a!!el b+ calli!g 1e O%KRSKCH s$bro$ i!e: T1e c1a!!el base address is re $r!ed i! o 1e DE regis er pair:

A%%ENDIX < Ho7 o ell 71ic1 edi io! I! er.ace 8 +o$ 1a/e 1e

T1ere are 7o di..ere! /ersio!s o. 1e 9X I! er.ace* eac1 1a/i!g a slig1 l+ di..ere! program i! i s RO": I is impor a! 1a +o$ ,!o7 71ic1 /ersio! o. RO" +o$ 1a/e* a!d +o$ ca! .i!d 1is o$ i! 1e .oElo7i!g ma!!er' R$! 1e .ollo7i!g li!e o. BASIC'

CLOSE 2 =' %RINT %EEK 34G3D I. o$ 1is pri! s o$ a ?=?* 1e! +o$ 1a/e a! edi io! 8 I! er.ace 8: i. i ?<=?* +o$ 1a/e a! edi io! 3 I! er.ace 8: pri! s

T1ere is 1e possibili + 1a Si!clair Researc1 ma+ release a 1ird edi io! o. 1e S1ado7 RO"* 7i 1 a .e7 more c1a!ges: I. +o$ s1o$ld ge o!e o. 1ese* 1e e) e!ded BASIC comma!ds ma+ !o 7or, properl+ 7i 1 i : T1e ?%RINT %EEK 34G3D? es probabl+ 7o! dis i!g$is1 be 7ee! 1e edi io! 3 a!d edi io! 4 S1ado7 RO"s* 6o$ ca!* 1o7e/er* $pload 1e S1ado7 RO" i! o a 1ig1er area o. RA"* disassemble i 1ere* a!d compare 1e code o 1e lis i!gs gi/e! i! 1is boo,: T1e .ollo7i!g program 7ill load 1e S1ado7 RO" i! o RA" .rom 43GJ< o L<DJ<' OR@ LD LD RST DEFB %O% %O% LD LD LD LDIR RST RET 4L=== HL*LABEL A34G<DB*HL =< 43H HL HL HL*= DE*43GJ< BC*<8D3 = 1e .ollo7i!g program'

LABEL

To do 8= 3= 4= L= E= J= G= <=

1e same

1i!g .rom BASIC* $se

CLEAR 3J=== FOR XMEL=== TO EL=33 READ 6 %OKE X*6 NEXT X RAND USR EL=== DATA 44*3L<*38=*4L*34G*D3*3=G*E=*33E*33E DATA 44*=*=*8G*=*83<*8*=*43*34G*8GJ*8DD*3=8

For i!.orma io! o! 1o7 o ma,e 1e e) e!ded BASIC comma!ds 7or, 7i 1 edi io! 4 or la er S1ado7 RO"s* re.er o Appe!di) 88* page 8JE:

A%%ENDIX D Basic loader program .or edi io! 3 S1ado7 RO" AFor o7!ers o. I! er.ace 8s e;$ipped 7i 1

1e edi io! 3 S1ado7 RO":B

Here is 1e !e7 BASIC loader program* c1a!ged o r$! 7i 1 1e !e7 s1ado7 RO": To e! er 1e !e7 BASIC comma!ds i! o +o$r Spec r$m 7i 1o$ $si!g a! assembler* e! er 1e .ollo7i!g BASIC loader program: 8 8= 3= 4= L= E= J= G= <= %RINT D= 8== 88= 83= CLEAR J4GL4 FOR AMJ4GLL TO JEDE8 STE% 83 %RINT >ADDRESS'>IA? LET CM= FOR BM8 TO 83 LET 9MANBK8' IF 9OMJE=E8 THEN IN%UT X' %RINT X' %OKE 9*X' LET CMCNX NEXT B %RINT ?>CHECKSU"M>IC IN%UT >THIS IS 5RON@ H A6PNB >I LINE 6Q' IF CODE 6QM<= OR CODE 6QM838 THEN >Re +pe .rom address >IA' %AUSE 8==' CLS ' @O TO 3= IF CODE 6QORG< AND CODE 6QOR88= THEN @O TO <= CLS' NEXT A %RINT >Sa/i!g 1e program> SASE (>">IlI>SHAD%> CODE J4GLL*84=<

51e! +o$ 1a/e .i!is1ed +pi!g 1is program i! o +o$r Spec r$m* +o$ s1o$ld ?RUN? i : 6o$ s1o$ld 1e! +pe .rom 1e lis i!g o! 1e !e) page* 1e 83 b+ es .rom 1e address s1o7! o! 1e scree!: 51e! +o$ 1a/e +ped 1e .irs 83 b+ es* a ?c1ec,s$m? s1o$ld be displa+ed o! 1e scree!I i. i ma c1es 1e o!e pri! ed o! 1e lis i!g* a 1e rig1 1a!d side o. 1e li!e* 1e! +o$ 1a/e made !o mis a,es i! +pi!g 1e !$mbers* a!d +o$ ma+ e! er ?N? or ?!? o co! i!$e 7i 1 1e !e) li!e: I. 1e c1ec,s$ms do !o ma c1* +o$ m$s e! er ?6? or ?+?* a!d 1e! re +pe 1e 71ole li!e: 51e! all !$mbers 1a/e bee! e! ered* 1e program 7ill a$ oma icall+ be sa/ed o! "icrodri/e car ridge A 1ere m$s be a car ridge 7i 1 a leas 3K .ree i! "icrodri/e 8B: I. +o$ 7is1 o sa/e 1e program o! ape* li!e 83= o. 1e lis i!g s1o$ld be modi.ied appropria el+: 51e! a some 8a er ime +o$ 7is1 o $se 1e ro$ i!es* +o$ 1a/e simpl+ o place 1e car ridge i! "icrodri/e 8* a!d 1e! o e! er 1e .ollo7i!g direc comma!ds' CLEAR J4GL4' LOAD (>">I8I>SHAD%> CODE' RANDO"I9E USR J4GLL a!d 1e !e7 com!a!ds s1o$ld be a/ailable: No e 1a i. +o$ $se 1e NE5 comma!d* +o$ s1o$ld 1e! gi/e 1e direc comma!d ?RANDO"ISE USR J4GLL? o rei!i ialise 1e SECTOR s+s em /ariable:

Here is J4GLL' J4GEJ' J4GJ<' J4G<=' J4GD3' J4<=L' J4<8J' J4<3<' J4<L=' J4<E3' J4<JL' J4<GJ' J4<<<' J4D==' J4D83' J4D3L' J4D4J' J4DL<' J4DJ=' J4DG3' J4D<L' J4DDJ' JL==<' JL=3=' JL=43' JL=LL' JL=EJ' JL=J<' JL=<=' JL=D3' JL8=L' JL88J' JL83<' JL8L=' JL8E3' JL8JL' JL8GJ' JL8<<' JL3==' JL383' JL33L' JL34J' JL3L<' JL3J=' JL3G3' JL3<L' JL3DJ' JL4=<' JL43=' JL443' JL4LL' JL4EJ' JL4J<' JL4<=' JL4D3' JLL=L' JLL8J' JLL3<' JLLL=' JLLE3' JLLJL'

1e da a .or 3=G 3EL 3=3 3E3 3EL 8E4 8DE 43 384 E 8=3 38E 3=E 33D 33E 3L 3=E = 83 JG J8 EL 8DE 838 E J 8DG 33D 8JG 4L = 38E 3=E 3=E E< 3=E 8= 33 83< 33D LL 834 338 3D = = 3E8 3=4 3E8 3LE DJ 43 DL 4 = <3 884 884 4E 38E 4= LD 3LL 88 3EL L3 4= 8D4 = 38E 34G 3E= 84= 38L J 83J 3 3L< 38E 83J G4 D3 = 8<= 3< 38E = 38E 3LE 34G 34G 3=E 8 8JD 4< D 33G 3E8 3=E 3E= 8GE = 3=4 33E 33D = = 3=E <G 83J J3 3=E 3E8 4E 3=E 3=E L< 3D 3D 8J 838 3EL 44 3=3 3E= 33L 8DL 8DG E 38E 8E4 8GJ 3LJ 3< 3= J 34= J3 3= 84= 3=3 D3 33D 3EE 8< 3EL 8L< 8DG 8E4 8DG JJ D3 4= 33 8D 3= 3E8 8D 8<4 44 338 3=E 3E J4 3=E 8DE = = 8G< 8DL 8<4 33< 884 83J <J 8L4 8L4 3E= 4E 33E 3LD 3< 8J

1e !e7 S1ado7 RO"' D LE 3EL 3=3 GE 38E 38E 8L= 4= 8DE 43 3=E 83E 8DG 83G 43 3L 3< 3L= 34G 44 38E 38E LL 4= 38E 4= 33D L< 3=G J 3=E 44 43 44 3L 43 3E8 83J E= 3=E 38E 8ED 3L3 = = 3E8 J3 3=3 3=E 3D 34= 34E 3E8 3E8 3E 33D 8DE 3=8 3=E 38= 3LD 3LD 33G 8GE 3LD 8E4 84= 3< <= 8D4 3EL 8<4 3=E 83J 3EL 3=E 3=3 3=E 8 834 83G 8JD 43 8DL 3LE 8L< 8DG 384 3L= E= 3=E 8JE D 34D 83 38E 3=4 3=E L8 38 8G< L= 8G 38 = = J3 3E8 DD 884 3L8 8D3 8G 8G 8G 3LJ 4E 883 38E 8<4 DD 4L 3EL 3=3 3E3 38E 4= 3< 3=E <D E 8=< E 38L 3=E 43 3L< 3EL 8<4 83= J8 8J 8E = 3L= 38E 4= 3=E 3=E J8 3E4 8<4 8J 3E8 44 3E8 E< 338 = 338 3=E 3E8 LE 8DE = = 44 43 J3 3E8 3D 3== 8D3 8J 8== 8 L< 4E 3E8 43 E J 8<4 L3 8<< 8DE 838 8DG 3EL 8<4 334 38E 8DL 38E 3= 34G EJ 3= 8=8 E 34= D3 33D 44 3EL 8 8L< 8JG = 8<8 33E EL E 338 8G D 8<3 84 83J 3E8 88D = 3=E 38E 8D4 = = 8L= 3=E 3LE 3EL E< J3 L4 4D = = 8DE 3=E J < 38E 38E D3 3=3 3E8 3L= 3< 33E LL E 8D4 43 8DG 8E4 J3 3= J 4E 8DL 38E 8D3 44 34G EJ L3 38E 4= L= G 4 43 = 3=E 83J 3L 3E8 34= 3E8 L8 338 84 3E8 = 33G E = = D3 884 8DE 4 3D 4J J3 3=E 3=E J3 884 883 8= 3EL 8L< 8 3=8 88L 3EL 8 3=E 8D4 8DL 38E 83= = 3LD 4= 43 4E 3EL 8J 3L= 8E4 8DL G 88E 8E 8DL 838 8JG LL 33E 3=D 34E = 8=D 3E = 3=4 3 8<4 338 83J 8DE 338 3E8 LE J3 = = EL 3D 884 3=3 3E8 8DE 3=3 8L4 8L4 3EE 3D 3E8 83J 4E 4= 33 38E 3LD 33D 38E 8<4 884 3L= 3L8 8GG 3EL 38E DJ 3=E 8J 83< 34E 8 4= 3L= 3E= J8 33D 3L= 3< L= GD 3=D 33E 44 34D J 3=E 3=E G= 8DL L= 8D= 84 83< 33D 3=E 3=E 84 = = 3EE E< 3D 8EG 34= 884 3=E 3E8 3E8 J= J3 J3 3=E 8DL 3LE 338 3L 3EL 3=3 43 E 4E 8 L4 3=3 3=G 43 8=E 3L< 3LD L< J3 38E 3E4 8 33D D3 8DD 8 3=E EL J 8D4 8D4 8D4 38E J3 E= E 43 8JD 3=D 84 8<4 3E= 33E JG = 8DE = = 44 D 44 3E8 48 3D 884 8G 8G 8<4 8GE LL 884 3L= 38E L3 = 38E 83 = 38E 883 38E 8DG 8D4 3=3 = 83L 3= 8D4 3 84 43 3=4 34G L3 3E4 33E 38E 8<4 GD = 3L8 3L8 E 43 3 38 3E8 343 3E= E< L= 8DL 338 8G 3D 3E8 884 = = 84 3E8 3L J8 8D< 44 3D 343 8= 34G 3=E 3=E 3D 8 8L< <8 83DJ 34<L 33<3 3=L3 8G<J 8JE4 8G8L 8E=L 8<D= 8G38 8<GD 8L<D 8EG= 8E8D 8L<< DEL 8G4J 8J3= 8GDE 84=J 8ELE 8LJE 8E<J 8J4L 84GJ D43 8<G3 34G= 8EL3 8L84 8=8< 83G3 88<< 84JL 8JL8 8E=3 8E48 8G=L 8D84 8<3< 8LJ= 8J43 8J=4 G8J = J3= 8JLL 8LD< 3=L= 8JGD 84E3 8JGG 84G= 84LE 8L8L 8LG< 84EE 8L8L 8LG3 8GE< 88DG

JLLGJ' JLL<<' JLE==' JLE83' JLE3L' JLE4J' JLEL<' JLEJ=' JLEG3' JLE<L' JLEDJ' JLJ=<' JLJ3=' JLJ43' JLJLL' JLJEJ' JLJJ<' JLJ<=' JLJD3' JLG=L' JLG8J' JLG3<' JLGL=' JLGE3' JLGJL' JLGGJ' JLG<<' JL<==' JL<83' JL<3L' JL<4J' JL<L<' JL<J=' JL<G3' JL<<L' JL<DJ' JLD=<' JLD3=' JLD43' JLDLL' JLDEJ' JLDJ<' JLD<=' JLDD3' JE==L' JE=8J' JE=3<' JE=L='

D3 G= E= 338 38E 3EL 338 8DL 4L JG 3=E 3=3 338 8D< L8 33 34< 8GE L= 8 3E= 8DE E= 3EL E 83L 34 88 J3 J3 3E4 83G E< 888 J8 3J 3EL 8GE 8JG 44 83E J3 8D3 88L 3E4 L< L< G3

338 8DL 38 88D 43 8J 83J J 3=8 G< 33G 8<E 8=3 3=E 43 338 388 3=E 88 38E 3E4 8D4 33 8DE 38E 8L3 44 384 4 83 3=4 EJ 8D 3E4 E= 3EL J= E= J3 L3 8<< 43 8G 3=8 3=E E E 3L

83J 84 44 88 = 38= L D D3 L= 8D 48 G= G4 3LE 33D 34D E= 3EL 838 E= E 3EL 8D4 8L< 3=E 8G 44 E= 3E4 8 3 3EL 8GE 8D 8JG 8<L 3G 8 8D L< 3=E 33J E= 38J 3E4 34G 8<=

L 8< 3EE 338 38E DD 3EL 338 3=E 88 3=E 3=E 338 4= J3 33E 3=E 38 LG 3< 38 38E 38E E 4= 3L = E 38J 3=4 8D< J3 8<L E= 3EL 8DJ 43 3EL E= 3EL 8JG E4 3E4 8E 3E4 EL J< =

3EL 3L8 = 88D 84= J GG 83J 83< 338 3LG J4 88G 3=E 34= 8G 33G 8DE L= 3=E 3EL 838 8L< 38E 3EL 34 8JG = D3 8 3LE J4 L< 3L E< G = 3=8 3L E< 8LL 3E4 L3 D3 E< = GD <=

GG 338 4L 83 3< 38E 8DL 3E 8< 83J 8D 48 88 8JD 388 EE 8D 8D4 44 8<4 38E 3< 4= 43 8 8DE 34G 3E 3=D 84L J3 3=E E 3EL 3E 84 E< 3EL 3EL 38 L= 8D4 <8 8G 8E 8= 3L 3=

8DL 88D 3=8 3=E 3=E 8 LE 3=E EJ L8 43 38< 338 8D 34D = 338 E 3EL E 8L< 3=E E= = L= 8D4 JJ 8G 8DE 3EL 8 G J= 3=8 3EL E< 33 84 3== 3EL L 84 D3 34L D3 34D 8<< 83

LE 84 D3 E= 8<4 33 J E= 8D 338 33G 83J 88J 338 8 3E 83J 38E J4 38E 4= 8<4 34 38E 83 E 38< E4 <8 43 E= 84 E= J3 8JG 34 3EL 43 3L G8 L< 43 J 3E4 G8 E< 8DG J=

J 338 3=E 38 E 338 338 38 L= 88D 38D 8< 83 83J 8=L 3=E J< 43 L= 8L< J8 E 3EL 84= J3 J3 LG 3E4 88 EJ 3L E< 8D 8 8DJ 3EL 8JG 83 8DL 8L 3E8 3LJ E 3L E< 8D 3=E 8

338 83J DE 8DE 38E L3 3=4 44 8L 84 34D 338 338 84 8 8GD 338 = EL 4= E= 38E 8GE 3< 4 4 E 88E 3EL D8 3EL 3= 3EL E= G G8 8DJ E< 3EL = 3L 3=8 D 34< 3= 3EL 888 84

3=4 3E 8< 8D4 8L< <8 3L 3EE 338 3L 34= 88= 3=4 338 3=E 38 88D 3EL 8DE 8JG 3= 8L< E= 3=E 3E4 38E 3=E 4E 8JE 43 3L8 3EL 3=8 3L 84 E< G 3L J 83 3L4 3EL 88E 8G 3EL 8LL 3E4 8=

3L 3=E 8GE E 4= D3 G= = 3=4 4 8 JD 3L 8D= <3 J3 84 44 3L= 3=3 3EL 4= 3G 8<4 3=4 4D 34 88L 388 L 3EL G8 3=E 3EL E< 3G 84 3EL 43 LL 8DG 34 4E E4 8<L 3== 8D4 =

8LJG 8LJJ 88GD 84G3 8L=J 83ED 8LLE 88LE 8348 DJL 8<G= 8LGD 8E4D 8JG= 8LE4 83J8 8D=G 84G< 83G8 8E3= 8J=J 8EL4 83D< 8JEE 833J 834= 8=L8 <GL 8EL< 884L 8G<J D4< 84EG 8LED 88J3 88EL 83EE 84EL 83J< <33 8LGD 8EJG 8=G4 84=< 8JGD 83<L 8J=< LG3

A%%ENDIX 8= E) e!ded BASIC comma!ds .rom assembler .or edi io! 3 S1ado7 RO" AFor o7!ers o. I! er.ace 8s e;$ipped 7i 1 1e edi io! 3 S1ado7 RO":B To add 1e e) e!ded BASIC comma!ds o +o$r Spec r$m* i. +o$ o7! a! edi io! 3 S1ado7 RO" a!d a! assembler* .irs e! er 1e assembl+ program o! pages 83 o 43 i! o +o$r Spec r$m: Do !o e! er 1e able o. ETU s a eme! s 1a .ollo7s o! page 44: T1ese labels all re.er o 1e edi io! 8 S1ado7 RO"* a!d are !o rele/a! o edi io! 3: I!s ead* .or eac1 label gi/e! o! page 44* e! er 1e /al$e gi/e! i! 1e alp1abe ical lis o. S1ado7 RO" 3 labels 71ic1 .ollo7: 51e! +o$ 1a/e e! ered 1is program a!d assembled i * sa/e i o! o "icrodri/e or ape: To $se 1e !e7 BASIC comma!ds* load 1e mac1i!e code .ile +o$ 1a/e made i! o +o$r Spec r$m a J4GLL AFD== He)B* a!d gi/e 1e direc comma!d ?RANDO"ISE USR J4GLL?: T1e !e7 comma!ds s1o$ld 1e! be a/ailable: Belo7 is a! alp1abe ical lis o. 1e labels rela ed o 1e edi io! 3 s1ado7 RO": ACCKCODE ALLK"OTRS BKIN%UT BDKDELK3 BFKFILLED BREAKK%@" CAT CATKSCRN CHECKK"K3 CHECKKS% CHKKLOO% CHKKNA"E CHKKSCT CHKK5K"A% CHKLOO% CHKS8 CHKS6NTAX CLK"KCH CLOSE CLOSEKNET CLS2KS6N CONSKOUT CRTKNE5 DECKSECT DELK"KBUF DELA6KBC8 DIS%KHEX3 EKREADKN ENDKCODE ENDKLDK%R ENDKSAKDR ENDHERE ERASE ERASEK"K ERRKJ EXKDKSTR EX%TKNA"E EX%TKSTR FKHDK4 FKREC3 FORKBKT FOR"ATK8 FREESECT @KRECKERR @ETK"KBUF @ETKNBLK =D<A 8EG= =BGC =D43 8CFF =EE3 8CE3 =LAJ =JJD ==GG 8=B4 8L=4 8BFJ 8E4A 8EFD =EJ3 ==8< 8GJB 8G8< 8F8< =EED 8EE= =DFG 84FG 88DF 8JE4 8LED 8==A =GB< =A84 8DJA =JCC 8DGD 8E=4 =8F= =EDF =J3F =EEG 8D<A 8AED =LCD 8BGE 8DL4 83B8 8EEB =EBE ALLKBITS ALLKSTR"S BCHANKIN BDKDELK4 BORDKREST CALBAS CATKL% CATKS6N CHECKK"A% CHKKA@K3 CHKKL%K3 CHKKNSECT CHKKSCT3 CHKEND CHKSKALL CHKS3 CKNA"KEND CLKNKCH CLOSEKCH CLR2KS6N C""KLOO% CONSK8 CRTKSARS DEFAULT DELKOK8 DELA6KSC DIS%KNIB EACHKST ENDKDATA ENDK%RK"S ENDKSET ENDRD ERASEK8 ERASEK"K3 ERRKRS EXISTIN@ EX%TKNU" EX%TKSTR" FK"KHEAD FAILED FORK" FRKSKL%B FR"TKS6N @KT6%E @ETK"KHD @ETKNBUFF 8=3F =E<E =B<< =DL< =DLD ==8= 8CJ< =L<J 84CL 8J=< 8J=F 8C8E 8C=E =8ED 8L3E =EG8 8L34 8GEC 8G=< =EGF =CD3 8LEG =8FG =33L 8=<G 8=8A 8LDF =8E3 =<8C =3BL =AE< 8JAD 8D<A 8E=J 84A4 =GF3 =J8E =JLE 8DG8 84J3 =LEG 8DE8 =LBL =GFJ 8EE3 =F=3 ALLKB6TES ALLCHRK3 BCHANKOUT BDKDELA6 BRKDELA6 CALBASK3 CATKL%KE CHANKS%C CHECKKN CHKKA@AIN CHKK"KEOF CHKK%RES CHKKTE"%" CHKENDKL CHKSKBUFF CHKS4 CLKCHAN CLK5ORK CLOSEK" CLRKBUFF CODE CO%6CHADD CTRLKCD DEFLTK= DELKSK8 DIS%KCH DLKLOO% EACHKSAR ENDKEX%T ENDKRSKIN END8 ENTR6 ERASEK3 ERASEKRUN ERRKS EX%TKEX%8 EX%TK%R"S FKERROR FKNKSCT FETCHKERR FORKRUN FRKSKRES @KHDKRC @ETKDESC @ETK"KHD3 @ETK%ACK =EAG 8L8< =D=G =BD< =EAC ==<8 8CGG 8=F8 8<<4 8EFJ 8344 8ELE 8GD= =8JD 8L3B =ECL 8<A< =8AA 84<B 8FDL =G<D ==FB =CG= =GDA 8EA3 8LF< =EAF =3EA =GE= =C4L =EC8 84CG 8DC4 8AAB =8EC =JBD =G=8 8AGB 8CFL =3GJ 8ABA 8DEE 83<= 8FEL 84AD 8F3E ALLKCHARS 8L=G ALTERKOUT =CBB BDKDELK8 =D8C BDKDELA63 =C8D BRCAST =EDD CALLKIN% =DEA CATKRUN 8ABE CHECKK" =JJE CHECKKR 8<<F CHKKFULL 84LD CHKK"A%K3 84BF CHKKREST =FCG CHKKTE"%N 8GDC CHKESEN =8JE CHKSKHDKR 8L3J CHKSL =F3L CLKCHKKN 8<BC CLAI"ED =FDD CLOSEK"3 84<E CLRKERR 8EGG CONSKIN 8ECD C%KNA"E 84== DATA =GD3 DELKBKCT 8FGE DELA6KBC 8JE3 DIS%KHEX 8LDJ DRKREAD6 8J3= E"ITKCH =CJC ENDKIN%UT =DDL ENDKSKDEL 8=LC ENDC 8ACD ENTR6K3 8GC= ERASEKL% 8DAG ERASEKS6N =E48 EXKCHANS 8GC= EX%TKEX%R =JA4 EX%TKS%EC =EF3 FKHDK3 8D<3 FKREC8 8AEG FILLK"A% 88J4 FOR"AT 8<ED FRKSCKL% 8DLD @KRDES 8EEE @ETK"KBLK 8EF3 @ETKNKBUF =DDC @ETKRK3 83E<

@ETKRKL% @%KERROR HOOKK48 INKA@AIN INCKBLKN IN%AKK3 KBDKTEST LDKBLKKL LDKHDKNET LDKNOK%@" LDKSFK"R LOADKS6N L%KSCOUT LSKBN LSBNKEND "AKEK%ER" "CHANKOUT "KKBLK "OSEKOUT NKACTISE NETKSTATE NEXTKCHAN NOKAUTOST NOKNA"E NOFULL NONSENSE NOTKCR NOTKNET NOTKRECS NRE%ORTK3 NRE%ORTK< NU"KARR NXTKENTR6 NXTCHAN O%KFK8 O%KFKE O%K%ER"KN O%KSTREA" O%ENKNKST ORE%K8K3 OUTKBLKKN OUTK"KB6T OUT%AK %RKRE%KL% %RNA"E %RTKOUT RCL"K"A% RDKB6TK3 RDKSECTOR RDLOO%L READKRS RECKB6TE RESKBK"A% RESTKSTR" RO"ERR RUNTI"E SKSCKDEL SAKBLOCK SAKDRIKL SAK"A% SASEKRUN SCREENQ SENDKNEOF

83EF 8F4A 8ED< =DG< =EDA 8=EA 8EFE =DEJ =<EL =DJJ =<B4 =<D< 8=8E =AJE =AD4 8AED 83B4 8CLD 8<3G 8=E8 =FBC 8=EG =DGG =G8J 83FC =E<L =C<3 =G33 8FF8 =JJ4 =JA8 =<8D =ADL 88EE 8B8J 8BEB =FE3 =BE8 =FL= =G4C =E4= 8ED= 8=<3 =3AG 8DEB 8EF= 88EF 8JDD 8F4F 8JJB =BAF =BDE 84E4 8LLL ==3< =88B 8=4A =<JE 8DLF 8A=L 8ACL =GG8 =FAE

@ETKRECD HDKLOO% HOOKK43 INKCHK INCREC IN%AKKL LCHAN LDKBLKKE LDKHDKRS LDK%RKAR LINE LOOKK"A% L%END LSKBNKE "KA@AIN "AKESURE "ER@EKBLK "OSE "OSEKRUN NKIN%UT NE5KBUFF NEXTNU" NOKFORK" NOK%RT NOINCKC NO%RES NOTKFORKB NOTKO%KB NOTKTOKEN NRE%ORTK4 NRE%ORTKD NXTK8 NXTK"OTOR OFFK"OTOR O%KFK3 O%KFKX O%KRSKCH O%KSTR" O%ENKRS ORE%ORTK8 OUTKCODE OUTK"KHD OUT%AKKL %RCHAR %RN"KL% %TKNKCHAN RCL"KNU" RDKB6TK4 RDLOO%8 REK"A% READKSET RECK%ROC RESKSARS RETADKRUN ROTATE R5FKERR SKSTAT SAKB6TE SAKDRIK5R SAK"A%KL% SASEKS6N SEKNA"E SENDK%ACK

83E3 =<EL 8EDL 8ELD 8F=< 8=EB 8L<3 =DED =<EB =DAG =G4E 8DEA 8LAJ =A<3 8<8< =FCA =DJB 8GFE 8AB= =DAD 834D =8AE =LBF 84GL 8DF< 8EEB =LD4 =E8F =CLL =J3D =J<4 =8A4 8EDG 8E<J 8BL8 8B3J =B8G 8<ED =E8C =LB3 8EE4 8EAD 8=<D 8DG8 8DEE 8GEB =8<3 8JAE 8JEC 8A8E 8EFD =BD< =3EE =EDD 84DD 8843 =8JF =<<L 8DL4 8A88 =<3F 8CA= =ELF

@ETBFKEND HEXKLINE HOOKKCODE INK"KBLK INKE6Q INSKNA"E LDKBLKK3 LDKBLOCK LDKHDRK3 LDK%RO@ LINEKLEN L%KBK"A% LSKAN6 LSK"CH "KIN%UT "ARKKFREE "ER@EKEND "OSEKEOF "OSEKS6N NCHANKIN NE5KNA"E N"INTKSRS NOK@OOD NOKREAD NONA"ES NOREAD NOTK@RA%H NOTKO%K" NOTRI@HT NRE%ORTKL NRE%ORTKL NXTKBK"A% NXTKSCT O%KBKCHAN O%KFK4 O%K"KC O%KRSCHAN O%KTE"%K" O%ENKS6N ORE%ORTK< OUTK"KBLK OUT"E" %ARK8 %RE%K"ARK %RO@ RCLKTKCH RCL"KOLD RDKNEXT RDLOO%3 REK"A%KL% READ6KR3 RE%K"S@ RESTK"A% RETADKS6N RSKSH SKBLKKEND SAKBKEND SAKDRIK3 SAKDRISE SAKNET SCKLKLOO% SELKDRISE SENDKRES%

=F4E 8E8D 8EG8 8J44 =DD< 8CDA =D4J =D8D =<F= =DBD =8LL 8DFL =AJ= 8DDA 88FD 8CL= =DAL 8<43 =E4D =DAF 8<ED =JJ= 8FLE =D<G 8D3G 83C8 =CEE =E== 8LEC =JLC =D4L 84E8 83GD 8FFJ 8BLJ =E3D =BLE 8B=E =LED =D<3 8EBG =FDE =GDF 8C4E =GE4 8GBG =DEC 8FGA 8JEE 8A3E 8J<J =3J= 8LGJ =EE= 8ACE =<<8 =<DE 8D38 8<CB =<D3 =844 8E43 8=GB

@ETNBKEND =EFF HEXKLINE3 8E33 IKA@AIN 8<8E INKNA"E 8C<B IN%AK 8=LF INTKSERS ==4< LDKBLKK4 =DLE LDKDATA =<=E LDKHEADER =<DC LDKSEK" 8A4D LOADKRUN =ADD L%K%K"A% 8DF= LSKB =AGD LSKN =AGJ "AINKRO" ==== "CHANKIN 83=G "ISSIN@KD =LDL "OSEKNA 8CDE "R@KS6N =<AC NCHANKOUT =E=D NE5SARS ==4= NOKAUTO =AE3 NOK"KARR =GDA NOE"% 84DB NONSKBSC =GFL NOTKC"" =CAE NOTKLEAD =CLF NOTK%ROT 8EBF NRE%ORTK8 =84D NRE%ORTKE =J<8 NRE%ORTKN =D=J NXTKB6TE 8L48 NXTKSTR" 8LLA O%KCHAN 8<JA O%KFKL 8BLD O%K"KSTR" 8ACC O%KRUN 8ABF O%KTE"%KN =FLJ ORDKNA" 8CC8 OTKNA"S 8D33 OUTK"KBUF 8EB4 OUT"E"3 88DA %ARK3 =GB3 %RINTKS%C =CDA %RO@KLINE =84= RCL"KCH 8GGD RDKB6TK8 8JDJ RDKRANDO" 8F=B RDLOO%4 8JJD READKBLK 8JEA READ6KRE 8J3A RE%TEST 8ELC RESTKNKAD 8A<3 R"ERRK3 ==L= RSKSH3 88A4 SK%ACKK8 =EL< SAKBLKKL% =<G3 SAKDRIK4 8D3D SAKHEADER =<LF SASEK" =<LD SCOUTKEND 8=84 SENDKBLK 84EA SENDKSC 8=8E

SENDSCOUT SERIALKIN SHKERR S%KNKEND STKERROR STARTK4 STCHK STOREKLEN TKFURTHER TKNAK8 TABK%ROC TCHANKIN TESTKBRK TESTKLO5 TESTK"NA" TESTKRET TESTKSTAT TR6KA@AIN TSTK"ER@E TSTKNU" TSTK5IDTH UNTILK"K U%DKSTR" SARWEXIST SRKBN 5RKBLK 5RKFKTEST 5RKSK4 5TKSCOUT

=EGG =BDJ ==3= =EA3 ==J< ==AE 8L4D =F4= =BFG 8CAA =CBE =B<3 8J4E =84B =J<E =EBF =J<F =DE3 =D=< 8DEE =CEJ 8=JB 8G<G =34D =A<E 8JAF 8BAB 8FBB =FDJ

SE%ARATOR SETKBAUD SI@NKERR S%CKCOUNT STK"A%KAD STARTKL STOKDIS% S5K"OTOR TKIN%UT TKNAK3 TABKSERS TCHANKOUT TESTKBUFF TESTKNKBF TESTKNEXT TESTKSASE TESTKT6%E TSKLKNET TSTK"RK" TSTK%LACE TURNKON UNTILFISE USEKCKRC SEKFAIL SRKDATA 5RKB6TK8 5RKRECD 5RKSECTOR 5TKS6NC

=EB8 =ACD 8EDE =C<C 88J< ==BC 8LJ4 8EJE =BGJ 8CBE =CC< =C4A =DBB 83=F =J=C =GAG =<FJ =<D8 =D<C 8ADD 8E4D 8AJL 8FEG 8AEE =<=4 8JCL 83DA 8F<E =FED

SERKIN3 SETK%RO@ SKI%KNU" STKBFKLEN STKSHADO5 STARTKBIT STOREKCOD S6NCKRD TKLDKNET TKOTHER TABLOO% TESTKBAUD TESTKCODE TESTK"A% TESTKOUT TESTKSCT TI"EKOUT TSKLKRS TSTK"RKN TSTKS%ACE UN%A@E U%DKNXTKS USEKR SEK"KE 5AITK8 5RKB6TK3 5RKSK8 5RITEK%RC 5TKE6

=C8B =A8D =8LE =E3E ===< =BCF =CB< 8JGC =DE3 8E48 =CFD =JB= ==ED 88L4 =E8G 8BDF =DFC =<DG =DD< =DC3 =G== 8GA3 8<DD 8ALD =BEE 8JC< 8FA8 83EE 8ED3

SERKOUTKL =D3C SETKTK"CH 8=AE S%KDLK8 =ED4 STKEND =EBG STARTK3 ==DA STARKSA 8<DD STOREKDS% 8AFF TKCHKNA"E 884E TK"KCOOE =D8E TABK"OD =CEE TAB9ERO =CFL TESTKBLKN =EE3 TESTKDTR =D38 TESTK"CHL 88D= TESTK%"A% 84E< TESTKS% ==4A TONKDELA6 84LL TSTKA@AIN =BC4 TSTKNKEOF =DDE TSTKT6%E =DCB UNTK"ARK 8=<F U%DK%OINT 8LJD USEKREC 8DD= SERIFS6N =<A3 5AITK3 =BEF 5RKB6TK4 8JCD 5RKSK3 8FB4 5TKSCKE =FD4

A%%ENDIX 88 51a o do i. +o$ 1a/e a! $!,!o7! RO"

I. +o$ s1o$ld .i!d 1a +o$r I! er.ace 8 co! ai!s a RO" 71ic1 di..ers .rom bo 1 1e edi io! 8 a!d 1e edi io! 3 S1ado7 RO"* 1e! 1e code o impleme! 1e e) e!ded BASIC comma!ds 1a is gi/e! i! 1is boo, 7ill !o 7or,: T1is is beca$se 1e code 1a 7e 1a/e gi/e! co! ai!s a !$mber o. calls o ro$ i!es i! 1e S1ado7 RO"* 71ic1 per.orm a !$mber o. $se.$l as,s* s$c1 as selec i!g "icrodri/es* readi!g a sec or o. ape* displa+i!g 1e)adecimal !$mbers o! 1e scree!* e c: "a!+ o. 1ese ro$ i!es are a di..ere! loca io!s i! 1e .irs 7o edi io!s o. 1e RO"* a!d pres$mabl+ 1e+ 7o$ld be di..ere! agai! i! a!+ .$ $re RO"s: T1is does !o * 1o7e/er mea! 1a i is !o possible .or +o$ o add 1e e)pa!ded BASIC comma!ds o +o$r mac1i!e: T1e code 1a 7e 1a/e gi/e! is s ill ;$i e correc * b$ 1e calls i ma,es o 1e RO" are !o lo!ger acc$ra e: T1e sol$ io!* 1e! is o add o 1e e) e!ded BASIC comma!ds ro$ i!es o. +o$r o7! 71ic1 1a/e 1e same !ames as 1e RO" ro$ i!es* a!d 7ill per.orm 1e same .$!c io!s: T1is does!? mea! 1a +o$?ll 1a/e o 7ri e all 1ese ro$ i!es K all 1e code +o$ !eed is co! ai!ed i! 1e S1ado7 RO" disassembl+ gi/e! earlier i! 1is boo,: Simpl+ .i!d 1e ro$ i!e +o$ !eed i! 1e S1ado7 RO" disassembl+* a!d cop+ i i! o +o$r program: Co!sider 1e .ollo7i!g e)ample' T1e e) e!ded BASIC comma!d ?(L !? i!cl$des LD LD LD CALL LD H*B L*C A*H DIS%KHEX A*L 1e .ollo7i!g code' i! o HL

Imo/e i

A@AIN

Idispla+ 1ig1 b+ e o. address i! 1e) Idispla+ lo7 b+ e

T1is 7o! 7or, as i s a!ds* as i i!cl$des a call o 1e S1ado7 RO" ro$ i!e DIS%KHEX* a!d 1e address gi/e! .or DIS%KHEX i! 1e able o. ETU s a eme! s 7ill !o be correc : 51a +o$ s1o$ld do o ma,e 1is 7or, is o remo/e 1e e! r+ .or DIS%KHEX .rom 1e ETU able* a!d 1e! loo, $p 1e e! r+ .or DIS%KHEX i! 1e alp1abe ical lis o. labels AAppe!di) 3:B: Accordi!g o 1is* 1e DIS%KHEX ro$ i!e is a 8E<GH: Loo, 1is $p i! 1e disassembl+* a!d add 1e ro$ i!e +o$ .i!d As1o7! belo7B o 1e e!d o. +o$r program: DIS%KHEX %USH RRA RRA RRA RRA CALL %O% AND C% CR ADD ADD CALL RET AF

DIS%KNIB

CONSK8

DIS%KNIB AF =FH =AH C*CONSK8 A*G A*4=H DIS%KCH

No e* 1o7e/er* 1a 1is ro$ i!e ma,es i s o7! call o a!o 1er S1ado7 RO" ro$ i!e* DIS%KCH* 71ic1 +o$ 7ill also 1a/e o add o +o$r code: DIS%KCH is loca ed a 8EAD i! 1e disassembl+* a!d is as .ollo7s' DIS%KCH %USH %USH %USH %USH EXX HL DE BC AF

%USH %USH %USH %USH LD %USH %USH LD RST DEF5 %O% RST DEF5 %O% LD %O% %O% %O% %O% EXX %O% %O% %O% %O% RET

HL DE BC AF HL*ACURCHLB HL AF A*3 CALBAS 8J=8H AF CALBAS 8=H HL ACURCHLB*A AF BC DE HL AF BC DE HL

Doi!g 1e same 1i!g 7i 1 all 1e o 1er S1ado7 RO" calls s1o$ld ma,e i possible .or +o$ o r$! all 1e e) e!ded BASIC comma!ds: No e 1a 1e program* as i s a!ds* .i s i! o 1e /er+ 1ig1es par o. memor+* 7i 1 !o room abo/e i o spare: T1e code +o$ 7ill be addi!g 7ill ma,e 1e e) e!ded comma!ds some71a lo!ger: Beca$se o. 1is* +o$ 7ill 1a/e o OR@ +o$r program o a! earlier loca io!* i! order .or i o .i i! o memor+: Remember 1a 71e! +o$ i!i ialise 1e !e7 comma!ds .rom BASIC* +o$ s1o$ld !o lo!ger $se RANDO"ISE USR J4GLL b$ i!s ead $se RANDO"ISE USR ) 71ere ) is 1e loca io! a 71ic1 +o$r assembler program is OR@ed:

You might also like