Ter herinnering; de schakelkaart van de club is als volgt ingedeeld:
2 x 4k RAM op #A000
2 x 4k RAM op #E000 6 x 4k EPROM op #A000
De software in de zes 4k EPROMs en de twee 4k RAM-blokken op pagina A0 moet hetzij elk apart hetzij
in samenwerking met elkaar te gebruiken zijn.
Om het laatste te realiseren zal een vorm van 'bank - switching' moeten worden toegepast. (het beurtelings
'voor' schakelen van de betreffende voet)
Na de komst van de schakelkaart zijn een aantal schakelroutines ontwikkeld.
In de loop der tijd zijn een groot aantal 4k EPROMS verschenen met een nog grotere hoeveelheid
commando's, statements en functies. Er is onvoorstelbaar veel vernuft in dit werk gestoken en zeker niet in
de laatste plaats door de leden van de Fed. Acorn Computerclubs zelf.
Er is echter een maar. In (te) veel 'boxen' komt bijv. een 1200 Baud COS-routine, READ, DATA en
ESTORE voor. Daarnaast verzetten Toolkit(box) en Superbasic van PP een aantal vectoren en maken
het er niet gemakkelijker op deze op te nemen in een systeem. En last but not least is onze toch al aparte
basic met P-CHARME verrijkt. Deze laatste 4k EPROM heeft onze ATOM min of meer uniek gemaakt.
Een en ander heeft geleid tot het volgende concept.
De P-CHARME box is in eerste instantie bedoeld voor gebruikers zonder schakelkaart.
Omdat de breakvector verwijst naar deze box zal P-CHARME niet weggeschakeld mogen worden tijdens een
programma. De schakelroutine is gebaseerd op 'CHAIRPROGRAM' van Bram Poot, (zie AN 2.4, p.51 e.v.) en
is zodanig aangepast dat de P-CHARME als eerste doorlopen wordt; omdat deze box een zeer zinvolle
basic-uitbreiding vormt die niet door schakelen vertraagt mag worden. Tevens is het mogelijk omzelf
ontworpen functies toe te voegen, doordat P-Fun van F.v.Hoesel is ingebouwd.
Beschrijving van de schakelroutine.
Bij binnenkomst op 1002 wordt eerst de "lock-feature" (het "vastzetten van een box") bekeken, eventueel
een statement tabel op het 1000 blok doorlopen, waarna de P-CHARME adressen geinitialiseerd worden.
Dit houdt in dat m.b.v. een indirecte sprong in P-CHARME via adres in het 1000-blok, hier #1100, in de
schakelsoft teruggesprongen wordt (zie handleiding P-CHARME pg. 37). Wordt tijdens de interpretatie door
P-CHARME een fout ontdekt, dan wordt teruggesprongen naar de schakelsoft. Hier wordt bekeken of een
onbekend statement betreft (error 94), zo ja dan de schakelroutine in, als het een onbekende functie betreft
(error 29): P-Fun in, zo nee dan verder in P-CHARME. In de schakelroutine wordt eerst het stuk #90-#9F
waard voor o.m. de error aanwijs-routine waarna de overige boxen worden afgezocht met als laatste voet
nummer 6 voor de P-CHARME-voet nummer 7. Indien het statement nog steeds niet is herkend kan nog
een extra tabel doorlopen worden op een nader te bepalen plaats, indien geen gebruik van de mogelijkheid
in P-CHARME gewenst is. Is het statement dan nog niet herkend dan wordt P-CHARME weer voortgezet,
het stuk #90-#9F weer teruggezet en wordt een error gegeven, eventueel met aanwijzing. Indien een
bepaalde box is "vastgezet", bit 6 van het schakelbyte is dan gezet, wordt over de gehele schakelroutine
heen gesprongen, rechtstreeks deze box in. Dit gebeurt na het lezen van de tabel op #1Fxx zodat deze
statements altijd bereikt kunnen worden. Het schakelen kan weer geactiveerd worden door een
SHIFT/RETURN te geven. Het statement OFF kan eveneens hiervoor worden gebruikt.
Mogelijkheden. In principe kunnen nu alle statements door elkaar in een programma gebruikt worden
(ook in procedures en functies), mits ze niet blijvend zero-page adressen gebruiken in het stuk #90-#9F. Ttevens kan na de eerste
run van een "PROGRAM" met een "GOTO" in een programma gesprongen worden. Uiteraard niet 'middenin'
routines springen. Bovendien moet het mogelijk zijn een (mini) symbolische assembler hierachter te hangen
of meerletterige variabelennamen. Een functie (bv. TRUE) kan in deze routine niet in combinatie met een andere box dan P-CHARME gebruikt worden (bv. DISAS(TRUE)). Dit lijkt mij geen onoverkomelijk bezwaar omdat de functie eerst aan een hulpvariabele kan worden gegeven (bv. A=TRUE;DISAS(A)).
Voorbereidingen Wat te doen bij de practische realisatie? Lees eerst om het geheugen wat op te frissen de artikels over het 'driewegwissel' in AN.2.2 p.61 e.v. Dan is
het duidelijk dat er een aangepaste Floatingpoint EPROM moet worden gemaakt met een verwijzing naar
het adres waar de schakelsoft staat. Kies voor de plaats waar de schakelsoft komt #1000 en niet #E000.
Voor de nieuwe schakelkaart een kwestie van instellen; voor de oude kaart een 'daktuintje' bouwen op de
LS 138 (IC.7) zoals hieronder is getekend. De niet gebruikte poten van de LS138 afknippen, buig de overige
pootjes, behalve pen 8 en pen 16 (aarde en +5 V), horizontaal en 'scheer' ze totdat de 'lepeltjes' resten.
Monteer nu het 'gecastreerde' IC op het tussenvoetje. Plak tot slot met tweecomponentenlijm e.e.a. vast en
plaats het resultaat in voet 7.
De onderstaande wijziging moet in de Floatingpoint Eprom worden aangebracht: D4AF: AD 00 10 LDA #1000 D4B2: C9 40 CMP@#40 D4B4: F0 0A BEQ #D4C0 D4B6: AD 01 A0 LDA #A001 D4B9: C9 BF CMP@#BF D4BB: D0 83 BNE #D440 D4BD: 4C 02 A0 JMP #A002 Zonder de bootstrap worden de mogelijkheden van de ATOM niet volledig gebruikt. Gebruik voet IC.24
op het Atomboard om een nieuwe, aangepaste, F-pagina te installeren volgens onderstaand schema.
De installatie Als dit gereed is kan het CX gebeuren worden geinstalleerd. d.w.z.: CX-1.8 naar #1000 CX-2.7 naar #A000 in voet 2 P-CHARME naar #A000 in voet 7 CX-DATA naar #6800 -- #7FFF (eventueel) De overige EPROMS zoals CALC, EDIT, GAGSROM, DISKROM etc. naar de overige voetjes in willekeurige volgorde. Voorts is het hoodzakelijk voor een goede werking dat RAM in het geheugengebied #9800-#9FFF aanwezig is. Voor het gebruik van de interupt-routines is het VIA-IC noodzakelijk. Ook moet link 2 op het ATOM- board gesloten zijn. Hiermee wordt een orginele ATOM-break uitgevoerd. Dit moet gegeven worden als de machine aangezet
wordt. Voor alle duidelijkheid: druk dus eerst op bv. SHIFT; daarna, dus samen met de SHIFT op BREAK;
laat dan eerst de BREAK-toets los en daarna de SHIFT-toets.
Stel we willen voor BREAK een bootstrap programma op #6800.
Eerst het programma schrijven op #6800, daarna ?#7FFD=#68.
Voor REPEAT-BREAK kan bijvoorbeeld een bootstrapje op #6A00, (?#7FFC=#6A), gezet worden.
BREAK ALLEEN
Reset de poorten, controleert of het DOS aangesloten is, zo ja: #DOS; controleert of de klok loopt, zo ja:
doorlopen. De bootstrap vervolgt met de melding "BREAK"; indien een basic-programma liep volgt nog:
"AT LINE XX". Dan wordt er gekeken op #7FFD om daar het paginanummer te halen waar eventueel een
basic-bootstrapje staat. Op #7FFD kan een willekeurige pagina aangewezen worden om een basic
bootstrap te plaatsen. Nadat de pagina-pointer van #7FFD is gehaald wordt eerst nog gekeken of daar
inderdaad een programma staat; zo ja, dan wordt de TOP-pointer goed gezet
(belangrijk voor DIM- statements) en het basic-programma gestart.
Het is belangrijk om bij het gebruik van de bootstrap de write-protect van de schakelkaart aan te hebben
omdat anders geheugenplaatsen gewijzigd kunnen worden door de processor. De oude text-space, van waaruit
men de break gaf wordt opgeslagen op #9FFC om later te gebruiken, bv. om na het programma terug te springen
naar de oude pagina.
ESC-BREAK
Indien men het basic-bootstrapje niet wil laten uitvoeren geef dan ESCAPE-BREAK. Er volgt dan tevens
geen melding meer op het scherm. Indien in GRMOD een break gegeven wordt deze volgen met CTRL- L.
REPEAT-BREAK
Hierbij wordt het gehele systeem gereset, d.w.z. poorten goed zetten; indien het DOS aanwezig: *DOS;
initialiseerd de DISKBOX, FAST, zet keyclics en page-mode aan; tijdmelding uit; scherm schoon, meldt
"ACORN ATOM DOS CX-RESET" ( COS , indien geen DOS ) en geeft een overzicht van de
basicprogramma's in het geheugen. Ook hier bestaat de mogelijkheid een eigen bootstrapje te runnen; de
pagina-verwijzing staat nu op #7FFC. Ook bij deze break blijven de text- en array- pointers onveranderd; de
oude pagina staat weer op #9FFC.
EPROM x
EPROM gevolgd door een box nummer zet het schakelbyte uit en de gekozen box wordt 'voor' gezet.
Met SHIFT en RETURN samen of het commando OFF wordt het schakelsysteem weer ingeschakeld
en de eerder geselecteerde eprom opgenomen in het schakelsysteem.
Uitbreidingen
Zelf statements en functies toevoegen
Een mogelijkheid van dit systeem is het zelf toevoegen van commando's, statements
en functies, bijvoorbeeld op de 16K. kaart onder write protect.
Dit kan op twee manieren:
- op de in de handleiding van P-CHARME beschreven wijze (pg.35-37),
- met de in CX-1 ingebouwde interpreter.
In de CX-1 is een interpretor opgenomen die in een tabel zoekt op #xx00 (xx staat voor het high-byte). Indien op #xx00 staat: #40., en op #xx01 staat #BF dan springt de schakelroutine na in alle boxen gezocht te hebben naar de interpretor die dan in de tabel op #xx02 gaat zoeken. De routines die bij deze extra statements horen mogen overal on het geheugen staan, bv. in het blok #6B00 en verder. Dit heeft als voordeel dat statements die we niet zoveel nodig hebben, of die erg veel ruimte gebruiken (zoals de 40*24 schermroutine) op het moment dat we ze gebruiken willen ingeladen kunnen worden. Ook kan op deze manier een nieuwe routine risicoloos getest worden. Op het blok #6800-#7FFF kan een CX-DATA gebeuren gemaakt worden dat naast een serie statements ook een evt. basic-bootstrap bevat, alles naar eigen behoefte. het hoofdsysteem blijft dan voor iedereen gelijk, alleen de CX-DATA verschilt per gebruiker. CX - SYSTEEM COMMANDO'S CX-1.8 GRMOD schakelt deze routine uit de CX-2.7 in. TXMOD schakelt GRMOD uit. EPROM x Schakelt het schakelsysteem uit en de gekozen EPROM voor, met SHIFT & RETURN samen wordt het schakelsysteem weer ingeschakeld en de geselecteerde EPROM wordt weer opgenomen in her systeem. EPROM is uit te schakelen met OFF. # (zie AN 3.2 p.50 ) Voert ?1B=#xx uit, met OLD of NEW naar gelang #0D het eerste byte van de beteffend pagina is.p (zie AN 3.2 p.50 ) p is bedoeld voor gebruik in de direct-mode. Het verzet de BRK-vector naar P-CHARME zodat ook multidimensionale array's kunnen worden afgedrukt. ( zie de P-CHARME doc. p. 49 ) BREAK Voert een deel van de ATOM-breakroutine uit. De routine zet de vectoren op default en reset een aantal poorten. TIME "uu-mm:ss" Geeft een tijd op interrupt in de R-bovenhoek van het scherm. In de toekomst zal deze routine gaan samenwerken met de real time clock. PRINT $T drukt de waarde van TIME af. TMOFF zet de klok op interrupt basis af. DTIME Zet de tijd op interrupt basis op het scherm of juist niet; afhankelijk of TIME geinitialiseerd is of niet. IRQ xxxx,yy een commando dat men moet leren waarderen. Het wijst als IRQ (interrupt ReQuest) een stuk machinetaal aan met startadres xxxx, met als tijdsinterval tussen de interrupts de waarde yy (<256>). In principe moet de assembler routine met RTS worden afgesloten. Let op TIME blijft doorlopen. Bijvoorbeeld: P=#2800;[;LDA#B002;EOR@4;STA#B002;RTS of: TIME"00-00:00";IRQ#135C,1 Zet de keyclics en de knipperende cursor aan en uit,
autorepeat op de toetsen tevens blijft naar gelang FAST of
SLOW geselecteerd is een van deze twee actief en voert de
CTRL-functies uit zonder ERROR. Tijdelijke opslag van
leesvectoren voor deze routine op #9FF8 tot #9FFB. De
bootstrap op #1C00 initialiseert een aantal routines: het DOS
indien aanwezig, de klok op interrupt basis indien aan, voert
een eventueel aanwezige BASIC bootstrap (testbyte #7FFD) uit.
Op #7FFD staat het paginanummer voor de bootstrap die
uitgevoerd wordt na BREAK. Op #7FFC kan het testbyte voor een
BASIC bootstrap, uit te voeren na REPT & BREAK, worden gezet.
Deze laatste vorm meldt zich met ACORN ATOM CX-RESET, geeft
een opgave van de in het geheugen aanwezige BASIC-programma's
en haalt tevens van #9FFC de tekstpagina op waar u het laatst
in werkte.
De commando's DISAS, HDUMP, XDUMP en RELOC zijn gebaseerd op
de AXR1 en in alle boxen te gebruiken.
TYD, DATE en DAY zijn de prints statements voor de real time
clock (Big Benny, AC 2.4, bl.45)
CODE #xxx,#yyy (zie AN 3.3 p.91)
Na invoer van het bovenstaande volgt de vraag INSTRUCTION ? ,
waarop u bijvoorbeeld intoetst LDA@0 of EOR@#4;STA#B002
SEARCH "----------" (sie AN 3.5 p.36) zoekt in het geheugen naar de opgegeven string. BUFFER (zie Acorntjesbrood 1.4 p.13 e.v. TYPEAHEAD )
Dit programma verzorgt een typeahead buffer voor de ATOM. Met
timer 1 van de VIA wordt regelmatig een interrupt opgewekt,
waarbij gekeken wordt of een toets is ingedrukt. Zo ja dan
wordt de ASCII waarde opgeslagen in een buffer. Als er weer
invoer nodig is, wordt door een nieuwe OSRDCH routine die
ASCII waarde weer uit de bufefr gehaald. Als de buffer vol is
hoort u een piepje. Omdat de echo van de vooruitgetypte tekst
ontbreekt, worden de REPT-, COPY-, LOCK- en cursor toetsen
uitgeschakeld. Verder wordt gewacht tot de ESC- toets wordt
losgelaten voordat de karakters uit de buffer worden
ingelezen. in pagemode na een vol scherm reageren met een van
de genegeerde toetsen. Uiteraard is deze routine niet te
gebruiken met IRQ en of TIME (op interupt).
CX-2.7
USKEY x,"------"
Geeft u 9 functietoetsen: dus met CTRL & 1 ect.
Aan de hand van een paar voorbeelden wordt de werking van dit
commando het best verduidelijkt.
USKEY 1."LINK#6ED5)" executeert ( doordat de geinverteerde
teksthaak voor de afsluitende aanhalingstekens staat ) de
string.
USKEY 2."LDA@" drukt deze string af in bijvoorbeeld een stuk
te typen basic tekst.
PAGE x
PAGE #30 is ?18=#30PAGE (?#xxxx) kan ook mits op dat adres een zinnige waarde isneergezet. PSCREEN x ( zie AN 3.5 p.38 ) Zet een scherm weg in de upper tetxtspace (tot 12 toe) GSCREEN x ( zie AN 3.5 p.38 ) Haalt de schermen weer op. Ook bruikbaar in basic programma's. LIB
Geeft een overzicht van de in het geheugen aanwezige basic
programma's. REM en PROGRAM worden genegeerd, dus alleen
zinnige tekst.
PLAY, GRMOD,TXMOD en FIND zijn uit de AXR1.
FIX \X,Y\ ( zie Atomix )
Is een nieuw printstatement. Tussen de \'s twee variabelen,
met een som =< 9> , die het aantal te printen cijfers voor en na
de komma bepalen. In tabellen worden de komma's onder elkaar
geprint.
FLASH x,y,z ( zie AN 3.1 p.93 )
Laat een schermdeel knipperen vanaf de cursorpositie x met een
breedte van y en met z regels groot. Let op met het berekenen
van de variabelen dat u niet 'buiten'het scherm komt.
HEADER x ( zie AN 3.6 p.98 )
Staat u maximaal 6 vaste kopregels toe. met de cursor kunt u
tekst in de kop schuiven in de direct mode. HEADER 0 zet de
routine uit. EXEC$ ( zie AN 3.6 p.96 )
Maakt het mogelijk om bijvoorbeeld direct mode command's ook
vanuit een programma te gebruiken. Ook kunnen variabelen en
bewerkingen daarvan vannuit een string als een functie worden
gebruikt.
bijvoorbeeld het volgende programma:
10 DIM A(6),B(3),C(7);X=50
20 $A="GOTO 90";$B="X=3"
30 INPUT"TOETS EEN VERGELIJKING IN"$C (bv. Y=3*X+1 )
40 P.X';EXEC$B;P.X'
50 EXEC$C;P.$C,Y'
60 EXEC$A
70 END
90 P.'"OVER - END - GESPRONGEN "'
TP drukt op een regel de gekozen tekstpagina, TOP en DIMTOP af.
SLOW en FAST regelene de output naar het scherm.
LCASE
In GRMOD kunt u nadat, dit commando is gegeven, onderkast
(kleine, geinverteerde) letters typenCURSOR x,y Zet de cursor op positie x van lijn y gerekend vanaf 0, de linker bovenkant van het scherm. DUMP dumpt de tekst van het scherm naar de printer en voert PRINT $2 en PRINT $3 uit. FILL #xxxx,#yyyy,#zz Vult het geheugen van locatie xxxx tot yyyy met zz. FVAR drukt de floatingpoint variabelen af. FZERO maakt de floatingpointvariabelen gelijk aan nul. CLC maakt het scherm schoon tot aan de cursor. CLS voert PRINT $ 12 uit en laat de cursor, al naar gelang geselecteerd, aan of uit. CON , COF zet de cursor respectievelijk aan of uit. CX-3.02 Een voorlopige versie met een aantal grafische commando's. INITTURTLE x Initialiseert de super snelle turtle commando's TMOVE, RANGLE
en ANGLE. Het zal ergo altijd deze commando's vooraf moeten
gaan. De variabele heeft een waarde, overeenkomstig het CLEAR-
commando, tussen 0 en 4. De turtle wordt in het midden van het
beeld gezet met een hoekwaarde van 0 graden: d.w.z. naar
rechts gericht.
TMOVE x,y ( Turtle MOVE )
Verplaatst de turtle over het scherm; x is de plotparameter
met een waarde tussen de 4 en 7 (zie ook ATOM Th.& P.); y bepaalt
de lengte van het lijnstuk.
ANGLE x
Hiermee zet u de turtle onder een hoek op het scherm; x is de
hoekwaarde >=0; gerekend vanaf 0 graden
RANGLE x (Relative ANGLE of TURN)
Verhoogt de hoekwaarde met x ten opzichte van een eerder
ingenomen waarde.
GFILL x,y (AC.3.5 p.22)
Vult een omlijnd schermgedeelte vanaf de coordinaat x,y.
SHAPE is de bekende routine uit de AXR1.
SIRCLE x,y,r,m (AC.3.4 p.61) (tijdelijk aanpassing i.v.m. de
Gagsrom)
Tekent een cirkel op coordinaat x,y met een straal r in
plotmode m.
DIF (10variabelen) (Atomix 2.8 \GRAPHICS\)
(In een latere versie zal deze routine vervallen.)
Met deze routine kunnen 8x8 dots figuren worden gedefineerd.Bijvoorbeeld: DIF#48,0,60,126,255,235,235,126,36,60 Waarbij #48 de plaats van de data tabel is waar de figuur
wordt opgeslagen. (max 32 per tabel). De volgende waarde is
het figuur nummer (hier dus 0). De B volgende variabelen bepalen de figuur. 128 64 32 16 8 4 2 1 0 0 x x x x 0 0 60 0 x x x x x x 0 126 x x x x x x x x 255 x x x 0 x 0 x x 235 x x x 0 x 0 x x 235 0 x x x x x x 0 126 0 0 x x x x 0 0 36 0 0 x x x x 0 0 60 FIG (5 variabelen) (Atomix 2,8) (In een latere versie vervalt deze routine.) bijvoorbeeld: FIG#48,0,0,25,122 #48 is weer de plaats van de tabel. Dan volgt het
figuurnummer, de wijze van plotten, de x-coordinaat en de
y-coordinaat.
SPRITE (5 variabelen) (Atomix 2.8)
(In een latere versie vervalt deze routine.)
Deze routine plaatst een 16 x 16 figuur op het scherm. Een
sprite is opgebouwd uit vier opvolgende 8 x 8 figuren in de
volgorde 1 3 en daaronder 2 4. Voor de wijze waarop de
variabelen worden gedeclareerd zie FIG. Sprite 0 gebruikt de
figuren 0,1,2,3.
GWINDOW x1,y1,x2,y2 (Dataceck 2.6 p.16)
(Deze routine is nam het verschijnen van de GAGSrom overbodig en vervalt in een latere versie.) De coordinaten x1 en y1 bepalen de linker benedenhoek; x2 en y2 de rechter boven hoek van het window. Buiten het window wordt niet geplot. GWRESET (Datacheck 2.6 p.17) (zie onder GWINDOW ) Reset de geldende grafische mode. Het DATA-blokOp het blok #6800-#7FFF kan een CX-DATA gebeuren gemaakt worden dat naast een
serie statements ook een basic-bootstrap bevat, alles naar eigen behoefte.
Er zijn veel manieren om een datablok samen te stellen. Ze hangen af van de eisen die u er aan stelt.
Bijvoorbeeld:
Bij BREAK dus terug in de fast-output-mode, met behoud van de tekstpagina waarin u werkte
en met P-CHARME uitbreidingen geinitialiseerd.
Op #6A00 kan een basic boot up voor REPT & BREAK worden geplaatst. (testbyte op #7FFC)
Een dergelijk programma kan er zo uitzien,
10 REM BOOT20 BE.12,9;BE.9,12 30 US.1,"X.0}" 40 US.2,"IRQ#6B4*,150}" 50 COF;P.';DAY;P." ";DATA;P." ";TYD'' 60 FA.;BL.;CON 70 PAGE(?#9FFC);E. Regel 30 maakt het mogelijk met USKEY 1 een driekoloms catalog van de schijf die in de drive zit op
m te zetten.
Regel 40 maakt het mogelijk, met USKEY 2 onder interrupt, de STATUS regel op het scherm te zetten. Met regel 50 wordt de real time clock gepresenteerd. Let op; pas het statement PROGRAM met beleid toe in deze basic bootstrapjes.
Dit statement 'vult' van #28BD tot #2900 het geheugen met nullen.
U kunt zich indenken wat een REPT/BREAK teweeg brengt in een zojuist gereed gekomen textfile.
Hieronder volgt de indeling van het geheugen van #6800 tot #7FFF.
van t/m exec. comment. BREAK boot up 6800 6834 basic, testbyte #7FFD REPT+BREAK " 6A00 6A92 basic, testbyte #7FFD P-CHARME uitbreidingen ATTACH 6835 6869 6835 (#6B+#E8), zie PC.doc p.30 VLIST 6889 68F3 6889 idem zie AN.3.2 p.48 EXTERN 7720 77BD 7720 (#77+#80=#F7), zie AN.3.2 p.48 CST P-CHARME, 6B00 6B02 testbytes #FFECC6 commandwords 6B03 6B3F CST afsluiten met #80Uitbreidingen van de schakelsoft in het datablok CST 6900 6901 testbyte #40BF CST words 6902 ---- voor elk adres #FF en afsluiten met #FFC55 MEMORYED #xxxx 7000 770B 7102 HEXIT zie AN.3.3 p.598 MONIT 6C00 6FFF 6ED5 de APPLE monitor zie AN.jrg82 p.30 STATUS 6B40 6BFF 6B40 status SHIFT,CTRL, Pagemode,FAST/SLOW, EPROM.*MON VDU x,y 7800 7F6A 7EFE zie AN.2.4 p.70Het Kladblok
Enkele notities over het gebruik van het kladblok.
Het geheugen gebied van #9900 tot en met #9FFF wordt door het CX-systeem als kladblok gebruikt.
In een latere versie zal dit beperkt worden van #9E00 tot #9FFF.
Geheugen-map voor #9Fxx e.v.
USKEY gebruikt #9900 tot #99FF voor het opslaan van de strings. Een versie van cx-2 waarin dew strings vanaf #9E00 worden opgeslagen is in voorbereiding. De timer op interrupt (TIME) gebruikt #9F70 tot #9F7A voor het opslaan van string $T . #9F7E is het testbyte voor TIME aan/uit. Van #9F7B tot #9Fb0 wordt gebruikt door respectievelijk IRQ en TIME. Page gebruikt #9FFC om de tekstpagina te bewaren. Het schakelbyte wordt op #9FFF bewaard. De BLIP routine gebruikt de adressen #9FF8 tot #9FFB en #9FFD met #9FFE als tijdelijke opslag van vectoren. Door GRMOD wordt het boxnummer van de diskbox bewaard. #9FFF schakelbyte #9FFE BLIP writevec #9FFD " #9FFC PAGE nr.(BREAK) #9FFB BLIP saveadres #9FFA " #9FF9 " #9FF8 " #9FF7 sprongadres FAST #9FF6 vrij #9FF5 " #9FF4 " #9FF3 " #9FF2 boxnr. diskbox #9FF1 CLI vec.diskbox #9FF0 " #9FF0 tot #9FE5 vrij #9FE5 tot #9FE0 diskbox terugspring routine #9FE0 tot #9FDB vrij #9FDB tot #9FA0 CLI hulproutine bij gebruik van statement DISK #9FA0 tot #9F90 back-up voor cx-schakelsysteem #9F90 tot #9F81 vrij #9F80 tot #9F70 IRQ en TIME vect. en $T #9F70 tot #9F00 vrij #9F00 tot #9E00 USKEY strings cx-2.8Overzicht van plaatsvervangende write- en readvectoren. routine 208 209 20A 20B standaard ATOM 52 FE 94 FE LCASE A9 11 70 11 GRMODE BA 11 70 11 FAST A0 11 7C 11 SLOW 50 14 7C 11 Geheugen-map voor #9Fxx e.v. #9FFF schakelbyte #9FFE BLIP writevec #9FFD " #9FFC PAGE nr.(BREAK) #9FFB BLIP saveadres #9FFA " #9FF9 " #9FF8 " #9FF7 sprongadres FAST #9FF6 vrij #9FF5 " #9FF4 " #9FF3 " #9FF2 boxnr. diskbox #9FF1 CLI vec.diskbox #9FF0 " #9FF0 tot #9FE5 vrij #9FE5 tot #9FE0 diskbox terugspring routine #9FE0 tot #9FDB vrij #9FDB tot #9FA0 CLI hulproutine bij gebruik van statement DISK #9FA0 tot #9F90 back-up voor cx-schakelsysteem #9F90 tot #9F81 vrij #9F80 tot #9F70 IRQ en TIME vect. en $T #9F70 tot #9F00 vrij #9F00 tot #9E00 USKEY strings cx-2.8 Overzicht van plaatsvervangende write- en readvectoren. routine 208 209 20A 20B standaard ATOM 52 FE 94 FE LCASE A9 11 70 11 GRMODE BA 11 70 11 FAST A0 11 7C 11 SLOW 50 14 7C 11bijlage 1 DE F- ROM Zoals die aangepast kan worden voor het CX- systeem. FF3F: 2C 01 B0 ,.. BIT #B001 FF42: 10 04 .. BPL #FF4B FF44: 6C FC 1F l.. JMP (#1FFC) de indirecte jump naar de bootstrap FF47: EA . NOP FF48: A2 17 .. LDX @#17 FF4A: BD 9A FF ... LDA #FF9A,X FF4D: 9D 04 02 ... STA #0204,X FF50: CA . DEX FF51: 10F7 ... BPL #FF4A FF53: 9A . TXS FF54: 8A . TXA FF55: EB . INX FF56: 86 EA .. STX #EA FF58: 86 E1 .. STX #E1 FF5A: 86 E7 .. STX #E7 FF5C: A2 33 .3 LDX @#33 FF5E: 9D EB 02 ... STA #02EB,X FF61: CA . DEX FF62: 10 FA .. BPL #FF5E FF64: A9 0A .. LDA @#0A FF66: 85 FE .. STA #FE FF68: A9 8A .. LDA @#8A FF6B: 8D 03 B0 ... STA #B003 FF6D: A9 07 .. LDA @#07 FF6F: 8D 02 B0 ... STA #B002 FF72: 20 D1 F7 .. JSR #F7D1 FF75: 06 0C .. ASL #0C FF77: 0F . ??? FF78: 41 43 AC EOR (#43,X) FF7A: 4F O ??? FF7B: 52 R ??? FF7C: 4E 3A 41 N:A LSR #413A FF7F: 54 T ??? FF80: 4F O ??? FF81: 4D 0A 0A M.. EOR #0A0A FF84: 0D A9 82 ... ORA #82A9 FF87: 85 12 .. STA #12 FF89: 58 X CLI FF8A: A9 55 .U LDA @#55bijlage 2a CX-1.7 Overzicht van de indeling. De schakelroutine van : #1000 tot #1C8 De CSI voor de uitbreidingen op de geheugenkaart : #10CC tot #10FF op #10A7, #10D6, 10E1, 10F1 en 10F6 staat het highbyte van de CST voor de uitbreidingen (niet via P-CHARME) op de 16 Kb. kaart. (b.v. #69 of #7F) De jump vanuit P-CHARME naar: de schakelsoft (JMP!1040) : #1100 functie routine (P-FUN) : #1A60 tot #1AC6 De CSI voor de altijd bereikbare commandwords : #1103 tot #1138 Vectoren t.b.v. de BOOTSTRAP : #1139 tot #115C en t.b.v. GRMOD, FAST, SLOW ea : #1FF0 tot #1FF8 Indirecte jump naar de bootstraproutine : #1FFC de bootstraproutine : #1C00 tot #1DCD RPT/BREAK : #1C22 SHIFT/BREAK : #1C78 ("linkin" #1C78) De Command string tabel (CST) : #1F60 tot #1FEF Deze tabel afsluiten met (terug naar schakelsof) : #100F De FUNCTIE tabel : #1F00 tot #1F60 Op adres #11CB en #120C staat het nummer van de voet waarin de GRMOD routine moet worden
geplaatst. (voet 2 voor CX-2.7h ). Het adres #1192 bevat het nummer van de voet waarin FAST, SLOW
en de USKEY routines zijn opgenomen. (voet 2 voor CX-2.7h ). op #1739 moet de voet van de P-CHARME
worden vemeld. (voet 7 ) Voor de resetroutine staat op #1d10 het voetnummer van CX-2.
En op #1D68 staat de subroutine verwijzing naar LIB in CX-2.
Hulproutines
GRMOD 140E terug naar CX-2.7
141D idem
1422 idem
1438 idem
hulproutine
SLOW 1450 tot 1459
HEADER 1EF2 tot 1EF4
subroutines 1160 tot 1180
bijlage 2b vervolg CX-1.7
In de CST zijn de volgende commandowords opgenomen. van tot exec TXMOD 121A ---- 121A GRMOD ---- 1236 121E EPROM x 125A 1269 125A TIME "uu-mm:ss" 126A 12D6 126A TMOFF 12D9 12E2 12D9 DTIME 12EA 12F3 12EA $T (van TIME) wordt bewaard op #9F70 IRQ xxxx,yy 12F4 144C 130A OFF 1ABC 1AC6 1ABC CODE #xxxx,#yyyy 145B 154B 145B BUFFER 154C 1671 154C SEARCH " " 1672 171E 1672 # 171F 1737 171F p 1738 1742 1738 BREAK 1C25 1DCA 1DD0 Toonhoogte (#0A of #1E) : 1E21 vervangende routine #FE92 : 1E15 "linkin"vanuit opvang CNTR : 1EA2 DISAS 1743 ---- 18EA XDUMP ---- ---- 177C HDUMP ---- ---- 1782 RELOC ---- 1A58 1917 TYD 1B00 ---- 1BB4 DATE ---- ---- 1BB7 DAY ---- 1BEA 1BBA bijlage 3 CX-2.7Overzicht van de indeling. De CSI van A000 tot A02B De CST van AA00 tot AAAF Subroutines A02C sub voor USKEY A02E sub voor PAGE A03F sub voor A04C sub voor PAGE,FAST A055 sub voor PAGE (num?) A05F (arg?) A069 sub voor USKEY,FAST,HEADER (system?) AABE t/m AAFF routine voor S(et)INT(erupt) AB00 t/m AB0F vectoren AB10 (p.$#AB10) AB20 t/m ABFF tabel voor LCASE ACoo tabel voor GRMODIn de CST zijn de volgende commandwords opgenomenvan tot exec. comment. USKEY X," " A076 A1BC A076 van #10xx A0DB (1182) SLOW A197 (samen met FAST en CX-1.7) FAST A13C A1BC A19B van #10xx A13C (11A3) PAGE X A1BB A1DC A1BB LCASE A1DD A1F4 A1DD CURSOR X,Y A200 A25C A200 FILL X,Y,Z A25D A2BF A2B3 PSCREEN X A2C0 ---- A2C0 GSCREEN X A2E0 A326 A2E0 DUMP A326 A375 A343 LIB A376 A41A A376 van #10xx A37C (1D3B) TP A420 A46B A420 PLAY X,Y A46D A562 A46D (tabel A52A tot A557) FVAR A563 A5A9 A563 FZERO A5A0 A5AC A5A0 CLC A5AD A5D9 A5AD CLS A5DA A5DF A5DA FIX \X,Y\ A5E0 A7F1 A603 \ (REM) A7F1 A7F6 A7F1 FLASH X,Y,Z A7F7 A89A A7F7 HEADER X A8A0 A8FB A8A0 (vectoren op A8B5 + A8BA voor #10xx #A8BF) EXEC$ " " A900 A96A A900 PIP A944 A96A A951 (sub van EXEC$) FIND "string" A96B A9F9 A976 CON A9FA A9FF A9FA COF AAB0 AAB7 AAB0 GRMOD AC00 AFFF AE06 TXMOD AC00 AFFF AE02 |