+4 Programnyilvántartás V2.8 (2020.11.15.) forráskódja C=plus/4 gépre Készítette: MCG (Tóth Gábor), e-mail: tgabor72@freemail.hu Leírás: a program mindösszesen 4kB területet foglal el a RAM-ból. Az adatokat a program a gép megmaradó szabad memóriában tárolja (C=plus/4-nél $2000-$FD00, 55kB, C=16-nál 8kB), amely a mentés menüpont alatt kimenthető kazettára turbóval vagy lemezre egyaránt a teljes programmal együtt. A program alapvetően 1-2, a munka elején megadott hosszúságú adatmezővel dolgozik, mint adatbáziskezelő. Itt: filenév és azonosító mezőket kezel egyszerre. Azonban később tetszőlegesen átírható bármilyen más egyéb adatbázis kezelési metódusra. A programban csak a teljes adatbázis törlésére van lehetőség, egyenkénti rekordok, adatok törlésére nem, azt manuálisan kívülről tudjuk megtenni. A program szolgáltatásai: - Keltezés nyilvántartása, dátum aktualizálása - Adatok bevitele - Kezdés esetén a beviendő programnevek és a hozzátartozó azonosító hosszának megadása - A teljes adatbázis növekvő ABC sorrendbe rendezése - Keresési funkció - bevitt programnév szerint, megadott mintaszöveggel - bevitt azonosító szerint, megadott mintaszöveggel - megadott sorszámtól való listázás - Adatok listázása a képernyőn görgetés/szünet funkcióval - Nyomtatásnál a papír paraméterei megadhatók (karakterszélesség, sornagyság, példányszám) - Listanyomtatás automatikusan több hasábon (a papíron fejlécadatok, minden lista tetején a mezők megnevezése) - Program mentése a teljes adatbázissal együtt lemezre vagy kazettára turbósan - Teljes adatbázis törlésének lehetősége - A program összes beviteli eseményénél lehetőség van az általi azonnali kilépésre Változtatások a 2.8 verzióban az előzőhöz képest: - A korábbi szubrutinok és alprogramok kezdőcímei a fejlesztés és az átrendezés folyamán teljesen más helyre kerülnek - A fentiek miatt a program indítási címe is változik (SYS 4528) - A programban lévő egyéb szövegek a program végére kerülnek - A programnév és azonosító mezők hosszának tárolási helye $101E-$101F helyekre kerül a $115E-$115F helyett - Új funkció: a $1020 Billentyű beolvasó rutinban ellenőrzése $102B -> CMP #$1B, BNE $1031, SEC, BIT $18 - Új funkció: a $1039 Beviteli mező lekezelő rutin a grafikus karaktereket is elfogadja ezentúl - Új funkció: a $13A9 Különböző kódok kiküldése szubrutinban, soremelés kódjának kiküldése is lehetséges ($0A), $13A9 -> LDA #$0A BIT... - Új funkció: a $1B59 Program kimentése, mentési üzenetek és hibaüzenetek megjelenítése - Új szubrutin: a $14A8, a programban alkalmazott különböző szövegek kiíratásához - Javítás: a $1719 Keresés alprogram menüjéből is kiléphetünk az lenyomásával ezentúl - Kód optimalizálása az $1039 Egy beviteli mező lekezelése szubrutinban - Kód optimalizálása a $14F9 Adatok bevitele alprogramban - Kód optimalizálása a $15FB Rendező alprogramban - Kód optimalizálása a $1719 Keresés alprogramban - Kód optimalizálása a $1B59 Program kimentése alprogramban - Kód optimalizálása a $1C52 Her-Turbó rutinban Változtatások a 2.7 verzióban az előzőhöz képest: - $1055 LDY #$00 -> javítás: INY, NOP - $10F5 BEQ -> javítás: ugrás a $1106 címre - $14E3 BEQ -> javítás: ugrás a $1502 címre - $14F3 -> #$06 kerül a hossz megadásánál - $1515 BEQ -> javítás: ugrás a $1528 címre - $1524 LDA $115F -> javítás TYA, utána a JSR $1131 a $1525-re kerül és a rutin végén a JMP $1403 a $1528-ra kerül - $1631 a képernyőn a listaablakból ESC lenyomásával lehet kilépni - $1703 javítás: az ESC kódja kerül ide, CMP #$1B - $18FF JMP -> javítás: ugrás az $1BAB címre - $1A44 BEQ -> javítás: ugrás az $1A61 címre (ez az ugrás rossz helyre mutatott korábban) - $1BC5 CMP -> javítás: CMP $38 (RAM tetejének vizsgálata) - $1BC7 BNE -> javítás: BCC $1BCD - $1D60 IOINIT sor törlése -> RTS A teljes program visszafejtése magyarázattal(<> jelben a használt regiszterek illetve memória területek): Program start: SYS 4528 (G 11B0) >1000 00 1C 10 CB 07 9E 34 35 :...K..45 >1008 32 38 20 1B 4A 20 20 4D :28 .J M >1010 43 47 2D 53 4F 46 54 57 :CG-SOFTW >1018 41 52 45 00 00 00 :ARE... Egy rekordban a filenév- és az azonosítómező hossza (itt 19 és 6 karakter) >101E 13 06 : .. ;amennyiben filenév hossza ($101E) 0, akkor nincs adatbázis a program után Szubrutin: Egy karakter beolvasása a billentyűzetről . 1020 98 TYA ;X,Y regiszterek mentése . 1021 48 PHA ;a verembe . 1022 8A TXA . 1023 48 PHA . 1024 20 D9 EB JSR $EBD9 ;GETIN, karakter beolvasása billentyűzetpufferből . 1027 F0 FB BEQ $1024 ;ha a puffer üres volt, akkor vissza . 1029 85 02 STA $02 ;beolvasott karakter mentése a $02-be . 102B C9 1B CMP #$1B ;ha nem ESC volt . 102D D0 02 BNE $1031 ;akkor ugrás . 102F 38 SEC ;carry beállítása, jelezvén, hogy a leütött billentyű ESC volt . 1030 24 BIT ;NOP a CLC utasítás átugrásához . 1031 18 CLC ;Carry törlése, jelezvén, hogy nem billentyű leütés történt . 1032 68 PLA ;elmentett X,Y regiszterek visszatöltése . 1033 AA TAX ;a veremből . 1034 68 PLA . 1035 A8 TAY . 1036 A5 02 LDA $02 ;beolvasott karakter kódja az akkumulátorban . 1038 60 RTS Szubrutin: Egy beviteli mező lekezelése (a rutin adott hosszú beviteli mezőben kezeli le a szövegbevitelt a program számára. A beviteli mező hossza rögzített, így csak adott hosszúságú bevitel megengedett, kurzorral nem lehetséges a beviteli mezőből kilépni.) A: beviteli mező hossza . 1039 A8 TAY ;a beviteli mező hossza Y-ba . 103A 88 DEY ;a tényleges hossz 1-gyel kevesebb a pozícionálás miatt a képernyőn . 103B A5 CA LDA $CA ;kurzor aktuális oszlopa a képernyőn . 103D 18 CLC ;a beviteli mező a korábban kiírt szöveg után 1 karakterhely után kezdődik, . 103E 69 01 ADC #$01 ;ezért növelés 1-gyel . 1040 65 C8 ADC $C8 ;a képernyő sorcímének hozzáadása . 1042 85 03 STA $03 ;a beviteli mező kezdőcímének mentése $03-$04-be . 1044 8D 0D FF STA $FF0D ;kurzor ráállítása mező elejére a TED-ben . 1047 A5 C9 LDA $C9 ;képernyősor felső címbájtja . 1049 69 00 ADC #$00 ;átvitel hozzáadása . 104B 85 04 STA $04 ;mentése $04-re . 104D 8D 0C FF STA $FF0C ;kurzor felsőbájtja a TED-ben . 1050 84 05 STY $05 ;beviteli mező hosszának mentése $05-be . 1052 A9 20 LDA #$20 ;ciklus: a beviteli mező ideiglenes pufferének törlése szóközökkel . 1054 99 00 06 STA $0600,Y ;az átmeneti tároló helye $600-as címnél van . 1057 88 DEY ;tovább az előző helyre . 1058 C0 FF CPY #$FF ;ha még nem végzett a teljes puffer inicializálásával . 105A D0 F8 BNE $1054 ;akkor vissza az eggyel megelőző hely törlésére . 105C C8 INY ;Y törlése, kurzor a beviteli mező első karakterén . 105D 20 20 10 JSR $1020 ;egy karakter beolvasása . 1060 B0 05 BCS $1067 ;ha ESC volt ugrás kilépéshez . 1062 C9 0D CMP #$0D ;ha a leütött billentyű nem RETURN volt . 1064 D0 0A BNE $1070 ;ugrás tovább . 1066 18 CLC ;egyébként a Carry törlése, jelzi, hogy érvényes bevitel történt . 1067 A9 FF LDA #$FF ;a kurzor . 1069 8D 0C FF STA $FF0C ;képernyőn kívülre helyezése . 106C 8D 0D FF STA $FF0D . 106F 60 RTS ;visszatérés a rutinból . 1070 C9 14 CMP #$14 ;ha nem DELETE volt . 1072 D0 28 BNE $109C ;ugrás tovább . 1074 C0 00 CPY #$00 ;ha az aktuális pozíció az első karakteren van . 1076 F0 E5 BEQ $105D ;nincs törlés, ugrás új karakter beolvasására . 1078 84 02 STY $02 ;aktuális pozíció mentése $02-re . 107A E6 05 INC $05 ;a hossz ideiglenes megnövelése 1-gyel . 107C B9 00 06 LDA $0600,Y ;ciklus: Delete, szöveg olvasása . 107F 99 FF 05 STA $05FF,Y ;mentés egy pozícióval előre . 1082 B1 03 LDA ($03),Y ;szöveg elhúzása a képernyőn is . 1084 88 DEY ;pozíció a képernyőn eggyel megelőző helyre . 1085 91 03 STA ($03),Y ;mentés a képernyőn eggyel előző helyre . 1087 C8 INY ;ugrás a következő . 1088 C8 INY ;karakterre . 1089 C4 05 CPY $05 ;ha a ciklus nincs még a szöveg végén, . 108B D0 EF BNE $107C ;akkor vissza következő karakter elhúzásához . 108D C6 05 DEC $05 ;a korábbi ideiglenes növelés visszavétele . 108F 88 DEY ;pozíció a beviteli mező végére . 1090 A9 20 LDA #$20 ;a mező utolsó helyén a korábban bevitt karakter . 1092 91 03 STA ($03),Y ;törlése a képernyőn . 1094 99 00 06 STA $0600,Y ;és az átmeneti tárolóban is . 1097 A4 02 LDY $02 ;aktuális pozíció visszatöltése . 1099 18 CLC ;Carry törlése . 109A 90 08 BCC $10A4 ;ugrás a kurzor képernyőn állításához . 109C C9 9D CMP #$9D ;ha nem kurzor balra volt . 109E D0 16 BNE $10B6 ;ugrás tovább . 10A0 C0 00 CPY #$00 ;ha a kurzor a beviteli mező elején van . 10A2 F0 B9 BEQ $105D ;vissza új karakter beolvasásához . 10A4 88 DEY ;pozíció csökkentése eggyel . 10A5 98 TYA ;Y A-ba . 10A6 18 CLC ;Carry törlése összeadáshoz . 10A7 65 03 ADC $03 ;hozzáadás a beviteli mező kezdőcíméhez . 10A9 8D 0D FF STA $FF0D ;a kurzor helyének módosítása a TED-ben . 10AC A5 04 LDA $04 ;laphatár esetén . 10AE 69 00 ADC #$00 ;carry hozzáadása a felső címbájthoz . 10B0 8D 0C FF STA $FF0C ;kurzor helyének korrigálása . 10B3 18 CLC ;Carry törlése . 10B4 90 A7 BCC $105D ;ugrás vissza új karakter beolvasásához . 10B6 C9 94 CMP #$94 ;ha nem INSERT volt . 10B8 D0 25 BNE $10DF ;ugrás tovább . 10BA C4 05 CPY $05 ;ha a kurzor a beviteli mező végén . 10BC F0 9F BEQ $105D ;vissza új karakter beolvasásához . 10BE 88 DEY ;egyébként egy hely beszúrása . 10BF 84 02 STY $02 ;pozíció mentése . 10C1 A4 05 LDY $05 ;indexbe az utolsó hely . 10C3 88 DEY ;eggyel korábbi pozíció . 10C4 B9 FF 05 LDA $05FF,Y ;ciklus: a karakterek eltolása a következő helyre . 10C7 99 00 06 STA $0600,Y ;az átmeneti tárolóban . 10CA B1 03 LDA ($03),Y ;szöveg eltolása a képernyőn is . 10CC C8 INY ;a következő helyre . 10CD 91 03 STA ($03),Y ;mentve a karakter . 10CF 88 DEY ;eggyel korábbi . 10D0 88 DEY ;pozicióra . 10D1 C4 02 CPY $02 ;ha még nincs a ciklus a beviteli mező végén . 10D3 D0 EF BNE $10C4 ;vissza az eggyel korábbi karakterre . 10D5 C8 INY ;a beszúrás helyére . 10D6 A9 20 LDA #$20 ;szóköz kerül . 10D8 91 03 STA ($03),Y ;a képernyőn . 10DA 99 00 06 STA $0600,Y ;és a szövegpufferben is . 10DD D0 D4 BNE $10B3 ;vissza új karakter beolvasásához . 10DF C9 1D CMP #$1D ;ha nem kurzor jobbra volt . 10E1 D0 07 BNE $10EA ;urgás tovább . 10E3 C4 05 CPY $05 ;ha a kurzor a beviteli mező végén áll . 10E5 F0 CC BEQ $10B3 ;vissza új karakter beolvasásához . 10E7 C8 INY ;pozíció növelése . 10E8 D0 BB BNE $10A5 ;kurzor helyének módosítása a TED-ben, vissza tovább . 10EA C9 11 CMP #$11 ;ha nem kurzor le volt . 10EC D0 0F BNE $10FD ;ugrás tovább . 10EE 98 TYA ;pozíció A-ba . 10EF 18 CLC ;Carry törlése összeadáshoz . 10F0 69 28 ADC #$28 ;pozíció növelése egy képernyősorral . 10F2 B0 BF BCS $10B3 ;ha az index növelésénél átvitel történne, ugrás vissza . 10F4 C5 05 CMP $05 ;ha éppen a beviteli mező végére ugrana, . 10F6 F0 0F BEQ $1107 ;akkor tovább, Y A-ba, kurzor módosítása képernyőn . 10F8 B0 B9 BCS $10B3 ;ha a beviteli mező rövidebb 40 karakternél, akkor ugrás vissza . 10FA A8 TAY ;a növelt pozíció vissza Y-ba . 10FB 90 A8 BCC $10A5 ;kurzor módosítása a képernyőn, ugrás vissza új karakter beolvasásához . 10FD C9 91 CMP #$91 ;ha nem kurzor fel volt . 10FF D0 09 BNE $110A ;ugrás tovább . 1101 98 TYA ;pozíció A-ba . 1102 38 SEC ;Carry beállítása kivonáshoz . 1103 E9 28 SBC #$28 ;csökkentés egy sorral . 1105 90 AC BCC $10B3 ;ha átvitel történne, vissza új karakter beolvasásához . 1107 A8 TAY ;csökkentett pozíció Y-ba . 1108 B0 9B BCS $10A5 ;kurzor módosítása a képernyőn, ugrás vissza új karakter beolvasásához . 110A 48 PHA ;karakterkód verembe . 110B 29 7F AND #$7F ;legfelső bit törlése . 110D C9 20 CMP #$20 ;ha kód 32 alatti vagy 128-159 közötti egyéb vezérlőkarakter volt . 110F 68 PLA ;karakterkód visszatöltése veremből . 1110 90 A1 BCC $10B3 ;ugrás vissza új karakter beolvasásához . 1112 99 00 06 STA $0600,Y ;a beolvasott karakter mentése az átmeneti tárolóba . 1115 C9 40 CMP #$60 ;ha a karakter kódja $60 alatti . 1117 90 0C BCC $1125 ;ugrás . 1119 C9 80 CMP #$80 ;ha a kód nem shiftelt karakter . 111B 90 05 BCC $1122 ;ugrás . 111D 29 7F AND #$7F ;kód felső bitjének törlése . 111F 09 40 ORA #$40 ;kód korrekciója . 1121 2C BIT ;NOP az AND átugrásához . 1122 29 DF AND #$DF ;$60-80 közötti kód korrekciója . 1124 2C BIT ;NOP az AND átugrásához . 1125 29 3F AND #$3F ;$20-60 közötti kód korrekciója, és . 1127 91 03 STA ($03),Y ;a karakter a képernyőre . 1129 18 CLC ;Carry törlése . 112A 90 B7 BCC $10E3 ;kurzor helyének vizsgálata, módosítása a következő helyre, új karakter beolvasása Szubrutin: Az adatok kezdetének megadása (az adatmező $2000-es címtől kezdődik és a maradék teljes RAM memória használható, plus4-nél 55kB) . 112C A9 00 LDA #$00 ;az adatok helye . 112E 85 D2 STA $D2 ;a program után a $2000-es címtől . 1130 A9 20 LDA #$20 ;aktuális rekord . 1132 85 D3 STA $D3 ;mutatója a $D2-$D3 címen . 1134 60 RTS Szubrutin: $D2-$D3 munkamutató címének növelése egy rekordhosszal . 1135 AD 1F 10 LDA $101F ;az azonosítómező hosszának beolvasása . 1138 20 3E 11 JSR $113E ;a beolvasott értékkel a $D2-$D3 cím növelése . 113B AD 1E 10 LDA $101E ;a névmező hosszának beolvasása . 113E 18 CLC ;Carry törlése összeadáshoz . 113F 65 D2 ADC $D2 ;$D2-$D3 cím növelése, az akkuban található értékkel . 1141 85 D2 STA $D2 ;az új érték mentése $D2-re . 1143 90 03 BCC $1148 ;laphatár ugrásakor a . 1145 E6 D3 INC $D3 ;$D3 növelése . 1147 18 CLC ;a Carry törlése jelzi, hogy az összeadás rendben volt . 1148 60 RTS ;visszatérés Szubrutin: Az adatterületen lévő rekordok számának megállapítása (rekordok száma $D7-$D8-ban), és a munkamutató ráállítása ($D2-$D3) a terület végére . 1149 A2 0C LDX #$0C ;a munkaterületen az adatok törlése . 114B A9 00 LDA #$00 ;A törlése . 114D 95 D0 STA $D0,X ;ciklus: $D0 nulláslap nullázása $D0-$DC között . 114F CA DEX ;ha a ciklus még tart . 1150 10 FB BPL $114D ;akkor vissza a következő cellára . 1152 A8 TAY ;Y-ba #$00 . 1153 20 2C 11 JSR $112C ;$D2-D3-ra az adatterület kezdete . 1156 20 66 11 JSR $1166 ;ciklus: adatterület végének keresése, a rekord első karakterének beolvasása . 1159 F0 ED BEQ $1148 ;Ha nincs adat (A-ban #$00), kilépés a rutinból . 115B E6 D7 INC $D7 ;a rekordszámláló ($D7-$D8) növelése, egy rekord megtalálva . 115D D0 02 BNE $1161 ;Lapváltás esetén . 115F E6 D8 INC $D8 ;$D8 növelése . 1161 20 35 11 JSR $1135 ;$D2-$D3 munkamutató címének növelése a következő rekord elejére . 1164 90 F0 BCC $1156 ;Vissza a rekord első karakterének olvasásához Szubrutin: egy karakter beolvasása a RAM memóriából . 1166 A9 D2 LDA #$D2 ;Olvasási cím $D2-D3 . 1168 4C 94 04 JMP $0494 ;Karakter olvasása a memóriából, és visszatérés Szubrutin: Alprogramokhoz használt képernyő inicializáló rutin, képernyő törlése, szöveg kiíratása . 116B 20 4F FF JSR $FF4F ;Szöveg kiíratása, pozícionálás: CLR,↓→ >116E 93 11 1D 00 : .... . 1172 20 84 11 JSR $1184 ;korábban a regiszterekben megadott paraméterek alapján szöveg kiíratása out eszközre . 1175 20 4F FF JSR $FF4F ;Szöveg kiíratása, "..." (három pont kerül a korábban kiírt szöveg után) >1178 2E 2E 2E 00 : .... . 117C 60 RTS Szubrutin: adott szöveg kiíratása, előtte kurzor pozícionálása: RETURN,↓→ . 117D 20 4F FF JSR $FF4F ; a regiszterekben megadott memóriacímtől, adott hosszúságú szöveg kiküldése out eszközre (képernyőre, nyomtatóra), előtte kurzor pozícionálással >1180 0D 11 1D 00 : .... ;"↓→" Szubrutin: adott szöveg kiíratása, közvetlenül a korábban kiírt szöveg után . 1184 86 03 STX $03 ;X és A regiszterben a kezdőcím . 1186 85 04 STA $04 . 1188 84 05 STY $05 ;Y-ban a kiírandó szöveg hossza . 118A A0 00 LDY #$00 . 118C A9 03 LDA #$03 ;ciklus:szöveg kiküdése, az olvasó rutinhoz a cím megadása ($03),Y . 118E 20 5B 11 JSR $1168 ;karakter olvasása a $03-$04 címről . 1191 20 D2 FF JSR $FFD2 ;CHROUT, karakter kiküldése Output eszközre . 1194 C8 INY ;ugrás következő karakterre . 1195 C4 05 CPY $05 ;ha még nem végzett a teljes szöveg kiírásával, . 1197 D0 F3 BNE $118C ;vissza a következő karakter kiíratásához . 1199 18 CLC ;Carry törlése, a feladat rendben volt . 119A 60 RTS Szubrutin: keresésnél a bevitt keresési szöveg ürességének ellenőrzése . 119B A4 05 LDY $05 ;szöveghossz beolvasása . 119D B9 00 06 LDA $0600,Y ;ciklus: ha a beolvasott karakter az átmeneti tárolóban . 11A0 C9 20 CMP #$20 ;nem szóköz volt . 11A2 F0 05 BNE $11A9 ;akkor ugrás . 11A4 88 DEY ;pozíció eggyel korábbi karakterre . 11A5 C0 FF CPY #$FF ;ha még nem vagyunk a szöveglánc elején, . 11A7 D0 F4 BNE $119D ;akkor vissza az eggyel korábbi karakter vizsgálatára . 11A9 C8 INY ;ha az összes szóköz volt, akkor végjel az első karakterre . 11AA A9 00 LDA #$00 ;egyébként végjel rakása a . 11AC 99 00 06 STA $0600,Y ;karakterlánc végére, Y-ban hány bevitt karakter van a teljes szövegből . 11AF 60 RTS ;visszatérés az ellenőrzésből Start: Program kezdete . 11B0 A9 06 LDA #$06 ;alapszín sötétkék . 11B2 8D 15 FF STA $FF15 . 11B5 A9 26 LDA #$26 ;háttér világosabb kék . 11B7 8D 19 FF STA $FF19 . 11BA A9 71 LDA #$71 ;a karakterek színe . 11BC 8D 3B 05 STA $053B ;fehér a képernyőn . 11BF 20 4F FF JSR $FF4F ;következő szöveg képernyőre vitele >11C2 13 13 93 1B 4C 11 1D 44 : ....L..D ;képernyőablak törlése, képernyő törlése,kurzor →↓,"DATUM:" >11CA 41 54 55 4D 3A 00 : ATUM:. . 11D0 A0 0A LDY #$0A ;korábban a programban mentett dátum kiíratása . 11D2 B9 AB 1E LDA $1EAB,Y ;ciklus: dátum a programban az $1EAB címnél . 11D5 99 30 0C STA $0C30,Y ;a képernyőre . 11D8 88 DEY ;pozíció tovább a következő karakterre . 11D9 10 F7 BPL $11D2 ;ha még nem végzett a ciklus, vissza . 11DB A9 0B LDA #$0B ;a dátum beviteli mezője 11 karakter hosszú (ÉÉÉÉ.HH.NN.) . 11DD 20 39 10 JSR $1039 ;Dátum bevitele . 11E0 B0 0A BCS $11EC ;ESC esetén nincs dátum módosítás . 11E2 A0 0A LDY #$0A ;a bevitt érték visszamentése . 11E4 B1 03 LDA ($03),Y ;ciklus: a dátum olvasása a képernyőről . 11E6 99 AB 1E STA $1EAB,Y ;mentése a programban az $1EAB címnél . 11E9 88 DEY ;tovább a következő karakterre . 11EA 10 F8 BPL $11E4 ;ha még nem végzett, akkor vissza . 11EC A0 00 LDY #$00 ;Főmenü visszatérési címe . 11EE 84 9A STY $9A ;kernel I/O üzenetek tiltása . 11F0 AD 1E 10 LDA $101E ;programnevek hossza . 11F3 D0 06 BNE $11FB ;ha nem nulla, ugrás tovább . 11F5 20 2C 11 JSR $112C ;adatterület kezdete $D2-$D3-ra . 11F8 98 TYA ;$00 akkuba . 11F9 91 D2 STA ($D2),Y ;adatterület inicializálása, nulla kiírása az adatterület elejére . 11FB 20 4F FF JSR $FF4F ;Főmenü kiíratása Adatterület a főmenü részére >11FE 13 13 93 11 20 20 20 20 : .... >1206 20 20 20 20 20 20 50 52 : PR >120E 4F 47 52 41 4D 4E 59 49 : OGRAMNYI >1216 4C 56 41 4E 54 41 52 54 : LVANTART >121E 41 53 0D 11 20 20 20 20 : AS.. >1226 20 20 20 20 20 42 59 20 : BY >122E 4D 43 47 20 28 43 29 20 : MCG (C) >1236 32 30 32 30 2E 20 56 32 : 2020. V2 >123E 2E 38 2E 0D 11 11 1D 31 : .8.....1 >1246 2E 20 41 20 50 52 4F 47 : . A PROG >124E 52 41 4D 4E 45 56 45 4B : RAMNEVEK >1256 20 42 45 49 52 41 53 41 : BEIRASA >125E 0D 11 1D 32 2E 20 52 45 : ...2. RE >1266 4E 44 45 5A 45 53 0D 11 : NDEZES.. >126E 1D 33 2E 20 4B 45 52 45 : .3. KERE >1276 53 45 53 0D 11 1D 34 2E : SES...4. >127E 20 4C 49 53 54 41 5A 41 : LISTAZA >1286 53 20 41 20 4B 45 50 45 : S A KEPE >128E 52 4E 59 4F 52 45 0D 11 : RNYORE.. >1296 1D 35 2E 20 50 52 4F 47 : .5. PROG >129E 52 41 4D 4C 49 53 54 41 : RAMLISTA >12A6 20 4E 59 4F 4D 54 41 54 : NYOMTAT >12AE 41 53 41 20 20 20 20 20 : ASA >12B6 20 20 20 20 0D 11 1D 36 : ...6 >12BE 2E 20 41 20 50 52 4F 47 : . A PROG >12C6 52 41 4D 20 4B 49 4D 45 : RAM KIME >12CE 4E 54 45 53 45 0D 11 1D : NTESE... >12D6 39 2E 20 41 44 41 54 4F : 9. ADATO >12DE 4B 20 54 4F 52 4C 45 53 : K TORLES >12E6 45 8E 08 00 : E... A főmenü billentyűzet figyelő rutinja . 12EA 20 20 10 JSR $1020 ;Várás billentyű leütésére . 12ED C9 31 CMP #$31 ;Ha a leütött karakter kódja '1'-nél kisebb . 12EF 90 F9 BCC $12EA ;Vissza a billentyűzet olvasásához . 12F1 C9 39 CMP #$39 ;Ha a leütött karakter a 9-es . 12F3 F0 04 BEQ $12F9 ;akkor ugrás tovább . 12F5 C9 37 CMP #$37 ;Ha a leütött karakter 7 vagy 8 volt . 12F7 B0 F1 BCS $12EA ;Vissza a beolvasáshoz . 12F9 29 0F AND #$0F ;karakterkódról a felső 4 bit törlése . 12FB A8 TAY ;index Y-ba . 12FC B9 B8 12 LDA $1308,Y ;ugrócím alsó byte-jának olvasása a vektortáblázatból . 12FF 85 D0 STA $D0 ;mentés $D0-ra . 1301 B9 11 13 LDA $1311,Y ;ugrócím felső byte-jának olvasása a vektortáblázatból . 1304 85 D1 STA $D1 ;mentés $D1-re . 1306 6C D0 00 JMP ($00D0) ;Ugrás a kiválasztott alprogramhoz Vektortáblázat a menüpontok ugrócímeihez 1. $14F9 2. $15FB 3. $1719 4. $16F9 5. $182B 6. $1B59 7-8. Nem használt 9. $1711 >1309 F9 FB 19 F9 2B 59 00 00 : .╋..+Y.. >1311 11 : . >1312 14 15 17 16 18 1B 00 00 : ........ >131A 17 : . Szubrutin: Szám bekérése előjelek nélkül (legfeljebb 5 jegyű szám bekéréséhez) . 131B 85 E5 STA $E5 ;beviteli mező hosszának mentése . 131D A5 E5 LDA $E5 ;hossz visszatöltése . 131F 20 39 10 JSR $1039 ;beviteli mező aktiválása, bevitel . 1322 90 01 BCC $1325 ;ha nem volt ESC lenyomva, tovább . 1324 60 RTS ;egyébként kilépés . 1325 A4 E5 LDY $E5 ;Y-ba a beviteli mező hossza . 1327 B1 03 LDA ($03),Y ;az utolsó karakter beolvasása . 1329 C9 20 CMP #$20 ;ha szóköz volt, . 132B F0 08 BEQ $1335 ;akkor tovább . 132D C9 30 CMP #$30 ;ha a karakter ASCII kódja kisebb '0'-nál, . 132F 90 EC BCC $131D ;vissza, a szám újrabekérése . 1331 C9 3A CMP #$3A ;ha a karakter ASCII kódja a '9' felett van, . 1333 B0 E8 BCS $131D ;vissza, a szám újrabekérése . 1335 88 DEY ;eggyel nagyobb helyiérték . 1336 10 EF BPL $1327 ;ha van még, a helyiérték ellenőrzése, hogy szám szerepel-e ott . 1338 A9 00 LDA #$00 ;$E6-$E7 nullázása . 133A 85 E6 STA $E6 ;a szám számításához . 133C 85 E7 STA $E7 . 133E A4 E5 LDY $E5 ;bevitt számok karakterhossza . 1340 A2 04 LDX #$04 ;utolsó helyiérték (egyesek) . 1342 B1 03 LDA ($03),Y ;ciklus: a szám binárissá alakítása és tárolása $E6-$E7-en, karakter képernyőről . 1344 C9 20 CMP #$20 ;ha szóköz volt, akkor az előző karakter lesz az aktuális helyiértéken lévő szám . 1346 F0 1F BEQ $1367 ;ugrás, az előző helyen lévő karakterre . 1348 29 0F AND #$0F ;a felső bitek nullázása . 134A F0 1A BEQ $1366 ;ha nulla volt, azt nem kell hozzáadni, ugrás tovább . 134C 85 E5 STA $E5 ;érték mentése . 134E A5 E6 LDA $E6 ;ciklus: helyiérték kiszámolása, az alsó byte betöltése . 1350 18 CLC ;Carry törlése összeadáshoz . 1351 7D 1C 13 ADC $136C,X ;helyiértékhez tartozó hatvány hozzáadása (1, 10, 100, 1000, 10000) . 1354 85 E6 STA $E6 ;és az érték mentése . 1356 90 02 BCC $135A ;ha nem volt átvitel, ugrás tovább . 1358 E6 E7 INC $E7 ;átvitel hozzáadása $E7-hez . 135A A5 E7 LDA $E7 ;és a helyiérték felső bytejának hozzáadása . 135C 18 CLC ;összeadás előtt az esetleges korábbi átvitel törlése . 135D 7D 71 13 ADC $1371,X ;helyiérték hatvány felső byte-jának hozzáadása . 1360 85 E7 STA $E7 ;és mentése . 1362 C6 E5 DEC $E5 ;a helyiérték felszorzása a számmal $E6-$E7-en . 1364 D0 E8 BNE $134E ;vissza újraösszeadásra . 1366 CA DEX ;előző (nagyobb helyiérték) . 1367 88 DEY ;pozíció csökkentése a képernyőn . 1368 10 D8 BPL $1342 ;a szám olvasása mindaddig, amíg a beviteli mezővel nem végzett . 136A 18 CLC ;carry törlése, a bevitel sikeres volt . 136B 60 RTS ;visszatérés a rutinból, a bevitt szám értéke $E6-$E7-ben Vektortáblázat a 10-es számrendszer kódolásához (10000, 1000, 100, 10, 1) >136C 10 E8 64 0A 01 : .hd.. >1371 27 03 00 00 00 : '.... Szubrutin: keresésnél a megadott keresendő szöveg ellenőrzése a rekordban . 1376 85 E5 STA $E5 ;adathossz mentése . 1378 A0 00 LDY #$00 ;Y törlése, rekord adatindex . 137A A2 00 LDX #$00 ;X törlése, keresendő szöveg, a szövegminta indexe . 137C BD 00 06 LDA $0600,X ;egy karakter betöltése a szövegpufferből . 137F F0 1C BEQ $139D ;ha szövegvégjel volt, ugrás kilépésre, volt egyezés . 1381 20 66 11 JSR $1166 ;adatolvasás a $D2-D3-on található címről . 1384 DD 00 06 CMP $0600,X ;ha a beolvasott karakter megegyezik, . 1387 F0 09 BEQ $1392 ;akkor ugrás mindkét index növeléséhez . 1389 E0 00 CPX #$00 ;ha nem és X értéke 0, . 138B F0 06 BEQ $1393 ;akkor ugrás a következő bájtra csak a rekordban, szövegminta ellenőrzése újraindul . 138D 88 DEY ;ciklus: ha X nagyobb volt, akkor Y visszacsökkentése . 138E CA DEX ;a korábbi egyezőségi hosszal . 138F D0 FC BNE $138D ;mindaddíg, amíg X nagyobb nullánál . 1391 24 BIT ;NOP az X növelésének átugrásához . 1392 E8 INX ;ugrás a következő bájtra a keresendő szövegben . 1393 C8 INY ;ugrás a következő bájtra a rekordban . 1394 C4 E5 CPY $E5 ;ha Y még nem érte el az adathossz végét . 1396 D0 E4 BNE $137C ;vissza a következő karakter ellenőrzésére . 1398 BD 00 06 LDA $0600,X ;ha Y már az adat végén jár és szövegminta indexe még nincs a végén . 139B D0 02 BNE $139F ;és van még a szövegmintából, kilépés a rutinból, nincs egyezés . 139D 18 CLC ;Carry törlése, egyezés jelzése . 139E 24 BIT ;NOP a SEC utasítás átugrásához, . 139F 38 SEC ;Carry 1-be, nincs egyezés . 13A0 60 RTS Szubrutin: Különböző kódok kiküldése az aktuális out eszközre . 13A1 A9 0A LDA #$0A ;, soremelés kódja . 13A3 2C ;NOP utasítás az elrejtéshez . 13A4 A9 0C LDA #$0C ; Lapdobás kódja . 13A6 2C ;NOP utasítás az elrejtéshez . 13A7 A9 0D LDA #$0D ; RETURN kódja . 13A9 2C ;NOP utasítás az elrejtéshez . 13AA A9 20 LDA #$20 ;szóköz kódja . 13AC 2C ;NOP utasítás az elrejtéshez . 13AD A9 3A LDA #$3A ;kettőspont kódja . 13AF 4C D2 FF JMP $FFD2 ;CHROUT, karakter kiküldése, visszatérés a rutinból Szubrutin: a képernyőn való adatok listázásához a listaablak elkészítése (ezt használja a keresés funkció is) . 13B2 20 4F FF JSR $FF4F ;képernyőre a fejléc kiírása >13B5 93 20 3C 45 53 43 3E 20 : . >13BD 4B 49 4C 45 50 45 53 20 : KILEPES >13C5 20 45 47 59 45 42 20 42 : EGYEB B >13CD 49 4C 4C 2E 20 53 54 4F : ILL. STO >13D5 50 2F 53 43 52 4F 4C 4C : P/SCROLL >13DD 20 53 4F 52 53 5A 41 4D : SORSZAM >13E5 20 20 20 50 52 4F 47 52 : PROGR >13ED 41 4D 4E 45 56 20 20 20 : AMNEV >13F5 20 49 44 20 42 4C 2E 20 : ID BL. >13FD 20 20 20 0D 00 : .. . 1402 A0 28 LDY #$28 ;egy képernyősornyi . 1404 A9 60 LDA #$60 ;grafikus karakter, vízszintes vonal . 1406 20 D2 FF JSR $FFD2 ;ciklus: a fejléc alá vonal húzása, CHROUT . 1409 88 DEY ;tovább a következő karakterre . 140A D0 FA BNE $1406 ;ha még nem végzett a vonal húzásával, akkor vissza . 140C 20 4F FF JSR $FF4F ;képernyőn ablak készítése (ESC+T) a fejléc alatt >140F 0D 1B 54 00 : ..T. . 1413 20 49 11 JSR $1149 ;adatok megszámlálása, $D7-$D8-ba . 1416 4C 2C 11 JMP $112C ;$D2-$D3 munkamutató az adatterület elejére, és visszatérés Szubrutin: egy rekord listázása képernyőre (listázáskor a programnév és az azonosító csonkított, max. 16 karakter hosszon jelenik meg) . 1419 A0 20 LDY #$20 ;32-es kód Y-ba, a képernyőn 33 karakter hosszúságú a listasor a sorszám után . 141B 98 TYA ;ugyanez szóköz kódjaként A-ba . 141C 99 00 07 STA $0700,Y ;ciklus: az átmeneti tároló törlése . 141F 88 DEY ;egy rekord összeálllításához . 1420 10 FA BPL $141C ;ha még nem végzett, vissza a következő hely törlésére . 1422 A9 0D LDA #$0D ;a listarekord végére kerül . 1424 8D 21 07 STA $0721 ;így a puffer 34 karakter hosszú . 1427 AC 1E 10 LDY $101E ;a programnév hosszának betöltése . 142A C0 11 CPY #$11 ;ha ez maximum 16 karakter . 142C 90 02 BCC $1430 ;akkor tovább . 142E A0 10 LDY #$10 ;egyébként ennek maximalizálása 16-ban . 1430 88 DEY ;hossz korrigálása adatolvasáshoz . 1431 20 66 11 JSR $1166 ;adatolvasás RAM-ból . 1434 D0 02 BNE $1438 ;ha érvényes bejegyzés volt, tovább . 1436 38 SEC ;egyébként Carry 1-be, jelezvén a listázás végét . 1437 60 RTS ;kilépés a rutinból . 1438 99 00 07 STA $0700,Y ;karakter mentése a listapufferbe . 143B 88 DEY ;ha még nem végzett a ciklus, . 143C 10 F3 BPL $1431 ;tovább a következő karakter olvasásához . 143E 20 3B 11 JSR $113B ;$D2-$D3 mutató megnövelése a programnév hosszával . 1441 AC 1F 10 LDY $101F ;azonosító hosszának betöltése . 1444 F0 16 BEQ $145C ;ha nincs, akkor tovább . 1446 C0 11 CPY #$11 ;ha ez maximum 16 karakter hosszú . 1448 90 02 BCC $144C ;akkor tovább . 144A A0 10 LDY #$10 ;egyébként a hossz redukálása 16-ra . 144C 88 DEY ;hossz korrigálása adatolvasáshoz . 144D 20 66 11 JSR $1166 ;adatolvasás RAM-ból . 1450 99 11 07 STA $0711,Y ;adatmentés a rekordpufferben a 17. helytől . 1453 88 DEY ;ha még nem végzett a ciklus, . 1454 10 F7 BPL $144D ;tovább a következő karakter olvasásához . 1456 AD 1F 10 LDA $101F ;azonosítóhossz újratöltése . 1459 20 3E 11 JSR $113E ;$D2-$D3 mutató megnövelése az azonosító hosszával . 145C E6 D0 INC $D0 ;rekord sorszámának növelése . 145E D0 02 BNE $1462 ;az alső byte átfordulásakor . 1460 E6 D1 INC $D1 ;a felső byte növelése . 1462 A6 D0 LDX $D0 ;sorszám kiíratásához a címek betöltése . 1464 A5 D1 LDA $D1 ;A-ba és X-be . 1466 20 5F A4 JSR $A45F ;sorszám kiíratása . 1469 20 4F FF JSR $FF4F ;a sorszám sorában a szám után pont, és az összeállított rekord pozícionálása >146C 2E 1B 4A 1D 1D 1D 1D 1D : ..J..... >1474 1D 1D 00 : ... . 1477 A9 07 LDA #$07 ;szöveg helye a $0700-as címnél . 1479 A2 00 LDX #$00 ;és összesen . 147B A0 22 LDY #$22 ;34 karakternyi . 147D 4C 84 11 JMP $1184 ;szöveg kiküldése a képernyőre és visszatérés Szubrutin: listázás közben scrollozás illetve a kilépés vizsgálata . 1480 20 D9 EB JSR $EBD9 ;billentyűzetpuffer olvasása, input eszköz billentyűzet . 1483 D0 01 BNE $1486 ;ha volt billentyű leütve, tovább . 1485 60 RTS ;egyébként visszatérés . 1486 C9 1B CMP #$1B ;ha nem a kilépéshez lévő kód (ESC) volt leütve . 1488 D0 05 BNE $148F ;akkor ugrás tovább . 148A 68 PLA ;JSR visszatérési cím törlése a veremből . 148B 68 PLA . 148C 4C 9C 11 JMP $11EC ;visszatérés a főprogramhoz . 148F 4C 20 10 JMP $1020 ;várás új billentyű leütésére, és visszatérés a listázáshoz Szubrutin: A mentési névben a sorszám megnövelése 1-gyel ("PROGRAM NY.T. 01") . 1492 A2 01 LDX #$01 ;két számjegy szerepel a névben, a program nevének utolsó két karaktere . 1494 FE BA 1D INC $1DBA,X ;ciklus: számjegyek megnövelése . 1497 BD BA 1D LDA $1DBA,X ;számjegy bekérése . 149A C9 3A CMP #$3A ;ha nagyobb "9" értéknél . 149C B0 01 BCS $149F ;akkor korrekció, ugrás tovább . 149E 60 RTS . 149F A9 30 LDA #$30 ;"0" . 14A1 9D BA 1D STA $1DBA,X ;mentése a megnövelt számjegy helyére . 14A4 CA DEX ;X csökkentése, mutató az eggyel nagyobb helyiértékű számjegyre . 14A5 10 ED BPL $1494 ;ha X még nem ment át negatívba, akkor visszaugrás a következő számjegy növelésére . 14A7 60 RTS Szubrutin: Különböző szövegek kiküldése (A, X, Y) . 14A8 18 CLC ;"PROGRAMNEV " szöveg, carry törlése, alaphelyzetben két sorral lejjebb új sorba íródik ki . 14A9 A0 0A LDY #$0A ;szóköz nélkül a szó végén . 14AB 2C BIT ;NOP a következő utasítás átugrásához . 14AC A0 0B LDY #$0B ;szóköz a szó végén . 14AE A9 13 LDA #$13 ;szöveg mutatója . 14B0 A2 E8 LDX #$E8 . 14B2 B0 03 BCS $14B7 ;ha nem kell előzetesen sort emelni akkor ugrás . 14B4 4C 7D 11 JMP $117D ;szöveg kiküldése két sorral lejjebb, új sorba . 14B7 4C 84 11 JMP $1184 ;kiíratás az előző szöveg után közvetlenül . 14BA 18 CLC ;"ID. BL. " szöveg, carry törlése, alaphelyzetben két sorral lejjebb új sorba íródik ki . 14BB A0 06 LDY #$06 ;szóköz nélkül a szó végén . 14BD 2C BIT ;NOP a következő utasítás átugrásához . 14BE A0 07 LDY #$07 ;szóköz a szó végén . 14C0 A9 13 LDA #$13 ;szöveg mutatója . 14C2 A2 F6 LDX #$F6 . 14C4 90 EE BCC $14B4 ;szöveg kiküldése két sorral lejjebb, új sorba . 14C6 B0 EF BCS $14B7 ;kiíratás az előző szöveg után közvetlenül . 14C8 A0 07 LDY #$07 ;"HOSSZA:" szöveg . 14CA A9 1E LDA #$1E . 14CC A2 6E LDX #$6E . 14CE D0 E7 BNE $14B7 ;kiküldése az előző szöveg után közvetlenül . 14D0 A0 07 LDY #$07 ;"SZERINT" szöveg . 14D2 A9 1E LDA #$1E . 14D4 A2 67 LDX #$67 . 14D6 D0 DF BNE $14B7 ;kiküldése az előző szöveg után közvetlenül . 14D8 A0 03 LDY #$03 ;"1. " szöveg . 14DA A9 12 LDA #$12 . 14DC A2 45 LDX #$45 . 14DE D0 D4 BNE $14B4 ;kiküldése két sorral lejjebb, új sorba . 14E0 A0 03 LDY #$03 ;"2. " szöveg . 14E2 A9 12 LDA #$12 . 14E4 A2 61 LDX #$61 . 14E6 D0 CC BNE $14B4 ;kiküldése két sorral lejjebb, új sorba . 14E8 18 CLC ;"SORSZAM " szöveg, carry törlése, alaphelyzetben két sorral lejjebb új sorba íródik ki . 14E9 A0 03 LDY #$03 ;"SOR" . 14EB 2C BIT ;NOP a következő utasítás átugrásához . 14EC A0 07 LDY #$07 ;"SORSZAM" . 14EE 2C BIT ;NOP a következő utasítás átugrásához . 14EF A0 08 LDY #$08 ;szóköz a szó végén . 14F1 A9 13 LDA #$13 ;szöveg mutatója . 14F3 A2 DE LDX #$DE . 14F5 90 BD BCC $14B4 ;kiküldése két sorral lejjebb, új sorba . 14F7 B0 BE BCS $14B7 ;kiíratás az előző szöveg után közvetlenül Alprogram: Adatok bevitele . 14F9 20 49 11 JSR $1149 ;Munkamutató ($D2-$D3) ráállítása az adatok végére . 14FC A9 12 LDA #$12 ;"PROGRAMNEVEK BEIRASA" szöveg a $11FA-nál kezdődik a Főmenüben . 14FE A2 4A LDX #$4A . 1500 A0 14 LDY #$14 ;kiírandó szöveg hossza . 1502 20 6B 11 JSR $116B ;képernyő törlése és a szöveg kiíratása képernyőre . 1505 AD 1E 10 LDA $101E ;a programnév mező hossza . 1508 D0 2A BNE $1534 ;ha nem 0, tovább . 150A 18 CLC . 150B 20 AC 14 JSR $14AC ;"PROGRAMNEV " szöveg kiíratása, két sorral lejjebb, új sorba . 150E 20 C8 14 JSR $14C8 ;"HOSSZA:" szöveg kiküldése az előző szöveg után közvetlenül . 1511 A9 02 LDA #$02 ;programnevek hossza legfeljebb 99 karakter hosszú lehet . 1513 20 1B 13 JSR $131B ;a programnevek hosszának bekérése . 1516 B0 70 BCS $1588 ;Ha ESC volt lenyomva, kilépés a programból, vissza a főmenühöz . 1518 A5 E6 LDA $E6 ;Ha a bevitt hossz 0 volt, . 151A F0 F5 BEQ $1511 ;akkor vissza, a hossz újrabekérése . 151C 8D 1E 10 STA $101E ;programnevek hosszának mentése . 151F 20 BE 14 JSR $14BE ;"ID BL. " szöveg kiíratása, két sorral lejjebb lévő sorba . 1522 20 C8 14 JSR $14C8 ;"HOSSZA:" szöveg kiküldése az előző szöveg után közvetlenül . 1525 A9 02 LDA #$02 ;az azonosító ("ID BL.") mező legfeljebb 99 karakter hosszú lehet . 1527 20 CB 12 JSR $131B ;hossz bekérése . 152A B0 5C BCS $1588 ;ESC esetén visszalépés a főmenübe . 152C A5 E6 LDA $E6 ;hossz betöltése . 152E 8D 1F 10 STA $101F ;hossz elmentése . 1531 20 2C 11 JSR $112C ;adatterület inicializálása . 1534 A6 D2 LDX $D2 ;A beírandó rekord helyigényének ellenőrzése a tárban, $D2 mentése X-be . 1536 A4 D3 LDY $D3 ;$D3 mentése Y-ba . 1538 20 35 11 JSR $1135 ;a $D2-$D3 munkamutató növelése egy rekordhosszal . 153B A5 D2 LDA $D2 ;$D2 értéke A-ba . 153D 86 D2 STX $D2 ;az eredeti érték visszamentése $D2-re . 153F A6 D3 LDX $D3 ;$D3 X-be . 1541 84 D3 STY $D3 ;az eredeti érték visszamentése $D3-ra . 1543 E4 38 CPX $38 ;ha a következő rekord tárolása még a teljes tárterület határa alatt van, . 1545 90 08 BCC $154F ;akkor urgás tovább a rekord felvételéhez . 1547 F0 02 BEQ $154B ;ha a felső cím a határon, akkor megnézni az alsó címet is . 1549 B0 06 BCS $1551 ;ha felette, akkor a tár megtelt, ugrás a figyelmeztetésre . 154B C5 37 CMP $37 ;ha az alsó címbyte éppen nulla . 154D F0 41 BEQ $1590 ;ugrás tovább bevitelre, egy rekord még éppen elfér . 154F 90 3A BCC $158B ;ha az alsó címbyte kevesebb a tár határánál, van még hely, ugrás a bevitelre . 1551 20 4F FF JSR $FF4F ;"A TAR MEGTELT!" figyelmeztető szöveg kiírása >1554 0D 11 1D 41 20 54 41 52 : ...A TAR >155C 20 4D 45 47 54 45 4C 54 : MEGTELT >1564 21 0D 00 : !.. . 143F . 1567 20 4F FF JSR $FF4F ;"NYOMJ LE EGY BILLENTYUT!" szöveg kiírása a korábbi szöveg alá >156A 11 1D 4E 59 4F 4D 4A 20 : ..NYOMJ >1572 4C 45 20 45 47 59 20 42 : LE EGY B >157A 49 4C 4C 45 4E 54 59 55 : ILLENTYU >1582 54 21 00 : T!. . 1585 20 20 10 JSR $1020 ;várás egy billentyű lenyomására . 1588 4C 9C 11 JMP $11EC ;visszatérés a Főmenübe . 158B A0 00 LDY #$00 ;egy rekord felvétele, index törlése . 158D 98 TYA ;a végjel #$00 . 158E 91 D2 STA ($D2),Y ;kiírása az utolsó rekord után . 1590 20 A8 14 JSR $14A8 ;"PROGRAMNEV" szöveg kiírása két sorral lejjebb új sorba . 1593 20 AD 13 JSR $13AD ;":" kiírása az előző szöveg után . 1596 AD 1E 10 LDA $101E ;programnevek hosszának betöltése . 1599 20 39 10 JSR $1039 ;adatszöveg bekérése . 159C B0 EA BCS $1588 ;ha ESC volt, kilépés és vissza a Főmenübe . 159E A0 00 LDY #$00 ;a bevitt szöveg ürességének ellenőrzése . 15A0 98 TYA ;A törlése . 15A1 85 02 STA $02 ;ciklus:akku mentése . 15A3 B9 00 06 LDA $0600,Y ;szöveg beolvasása . 15A6 99 00 07 STA $0700,Y ;mentése a $0700 cím alá . 15A9 05 02 ORA $02 ;a beviteli tárban minden karakterének VAGY-olása A-hoz . 15AB C8 INY ;tovább a következő karakterre . 15AC CC 1E 10 CPY $101E ;ha még nincs a beviteli mező végén . 15AF D0 F7 BNE $15A1 ;akkor vissza az akku mentésére és a következő karakterre . 15B1 C9 20 CMP #$20 ;ha a teljes beviteli mező csak szóközt tartalmazott . 15B3 F0 D3 BEQ $1588 ;akkor nem történt újabb adatfelvétel, kilépés és vissza a Főmenübe . 15B5 AD 1F 10 LDA $101F ;azonosító hosszának bekérése . 15B8 F0 18 BEQ $15D2 ;ha nulla, akkor nincs bekérés, ugrás tovább . 15BA 20 4F FF JSR $FF4F ;azonosító szövegéhez pozícionálás a képernyőn >15BD 0D 11 11 11 1D 00 : ...... . 15C3 38 SEC . 15C4 20 BB 14 JSR $14BB ;"ID BL." szöveg kiírása az előző szöveg után . 15C7 20 AD 13 JSR $13AD ;kettőspont kiírása az előzőleg kivitt szöveg után . 15CA AD 1F 10 LDA $101F ;azonosító hosszának bekérése . 15CD 20 39 10 JSR $1039 ;azonosító bevitele . 15D0 B0 B6 BCS $1588 ;ha ESC volt kilépés és visszatérés a Főmenübe . 15D2 A0 00 LDY #$00 ;a bevitt adatok mentése az adatbázisba . 15D4 B9 00 07 LDA $0700,Y ;ciklus: először a bevitt filenév elmentése . 15D7 91 D2 STA ($D2),Y ;az adatbázis végére . 15D9 C8 INY ;tovább a következő karakterre . 15DA CC 1E 10 CPY $101E ;ha még nem végzett a teljes filenév átvitelével . 15DD D0 F5 BNE $15D4 ;akkor vissza a másoló ciklushoz . 15DF 20 3B 11 JSR $113B ;$D2-$D3 munkamutató megnövelése a filenév hosszával . 15E2 AD 1F 10 LDA $101F ;azonosító hosszának bekérése . 15E5 F0 11 BEQ $15F8 ;ha 0 volt, akkor nics mit menteni az adatbázisba, mentés kihagyása . 15E7 A0 00 LDY #$00 ;azonosító elmentése . 15E9 B9 00 06 LDA $0600,Y ;ciklus: azonosító mentése . 15EC 91 D2 STA ($D2),Y ;a programnév után az adatbázisba . 15EE C8 INY ;tovább a következő karakterre . 15EF CC 0F 10 CPY $101F ;ha még nem végzett a teljes azonosító mentésével . 15F2 D0 F5 BNE $15E9 ;akkor vissza a másoló ciklushoz . 15F4 98 TYA ;azonosító hossza A-ba . 15F5 20 3E 11 JSR $113E ;$D2-$D3 növelése . 15F8 4C FC 14 JMP $14FC ;visszatérés új adatsor beviteléhez Alprogram: Rendezés (növekvő ABC sorrendbe) . 15FB AD 1E 10 LDA $101E ;filenév hosszának ellenőrzése . 15FE D0 03 BNE $1603 ;ha nem nulla, ugrás tovább a rendezéshez . 1600 4C EA 12 JMP $12EA ;visszatérés a Főmenühöz, új billentyű bekéréséhez . 1603 A9 12 LDA #$12 ;"RENDEZES" szöveg a főmenüből . 1605 A2 64 LDX #$64 . 1607 A0 08 LDY #$08 . 1609 20 6B 11 JSR $116B ;kiíratása a képernyőre előzőleg képernyőtörléssel . 160C A9 1C LDA #$1C ;"#" kiíratása a képernyőre . 160E A2 8F LDX #$8F . 1610 A0 01 LDY #$01 . 1612 20 7D 11 JSR $117D ;2 sorral lejjebb új sorba . 1615 20 49 11 JSR $1149 ;mutatók területének inicializálása, munkamutató adatbázis végére, adatok számlálása . 1618 A6 D7 LDX $D7 ;adatok számának bekérése . 161A A5 D8 LDA $D8 . 161C 20 5F A4 JSR $A45F ;szám kiíratása képernyőre . 161F 78 SEI ;megszakítás tiltása . 1620 8D 3F FF STA $FF3F ;CPU olvasás RAM-ra kapcsolása . 1623 18 CLC ;összeadáshoz Carry jelzőbit törlése . 1624 AD 1E 10 LDA $101E ;filenevek hossza Akkuba . 1627 6D 1F 10 ADC $101F ;azonosító hosszának hozzáadása . 162A 85 D4 STA $D4 ;a kapott rekord hossz elmentése $D4-re . 162C A5 D2 LDA $D2 ;az adatbázis végének címe . 162E 85 D0 STA $D0 ;a $D0-$D1-re kerül . 1630 A5 D3 LDA $D3 . 1632 85 D1 STA $D1 . 1634 20 2C 11 JSR $112C ;$D2-$D3-ra az adatbázis kezdetének címe . 1637 A5 D2 LDA $D2 ;$D2-$D3 mentése $D5-$D6-ra . 1639 85 D5 STA $D5 . 163B A5 D3 LDA $D3 . 163D 85 D6 STA $D6 ;az adatbázis kezdetének címe $D5-$D6-on . 163F 20 35 11 JSR $1135 ;Egy rekord rendezése, $D2-$D3 címe a következő rekordra mutat . 1642 A0 00 LDY #$00 ;pozíció a rekord első karakterére . 1644 B1 D2 LDA ($D2),Y ;ha nem érte el a végjelet . 1646 D0 07 BNE $164F ;ugrás tovább a rendezésre . 1648 8D 3E FF STA $FF3E ;egyébként a CPU olvasása ROM-ra . 164B 58 CLI ;megszakítás engedélyezése . 164C 4C 9C 11 JMP $11EC ;visszatérés a Főmenübe . 164F A2 05 LDX #$05 ;itt a képernyőn lévő szám eggyel történő csökkentése következik, X-képernyőn a szám . 1651 BD 79 0C LDA $0C79,X ;képernyőn az X-beli helyiértéken a szám helyének olvasása . 1654 C9 20 CMP #$20 ;ha szóköz, . 1656 F0 09 BEQ $1661 ;akkor tovább . 1658 C9 30 CMP #$30 ;ha nem nulla . 165A D0 0A BNE $1666 ;akkor, ugrás tovább . 165C A9 39 LDA #$39 ;akkuba "9" . 165E 9D 79 0C STA $0C79,X ;kimentés a képernyőre . 1661 CA DEX ;következő (ezt megelőző helyiérték) számhelyre . 1662 D0 ED BNE $1651 ;ugrás a képernyőről való olvasáshoz . 1664 F0 03 BEQ $1669 ;ugrás, a következő utasítás kihagyása . 1666 DE 79 0C DEC $0C79,X ;az X indexű helyiértéken a szám csökkentése . 1669 AD 7A 0C LDA $0C7A ;a "#" melletti legelső szám olvasása . 166C C9 30 CMP #$30 ;ha nem nulla . 166E D0 0B BNE $167B ;ugrás tovább . 1670 BD 7A 0C LDA $0C7A,X ;ciklus: számok balra húzása . 1673 9D 79 0C STA $0C79,X ;a vezető nulla törlése, az utolsó számjegy helyére szóköz kerül . 1676 E8 INX ;tovább a következő helyiértékre . 1677 E0 06 CPX #$06 ;ha a pozíció a még nincs a végén, . 1679 D0 F5 BNE $1670 ;akkor vissza a számjegyek mozgatásához . 167B A5 D2 LDA $D2 ;$D2-$D3 mutatóból . 167D 38 SEC ;Carry beállítása kivonáshoz . 167E E5 D4 SBC $D4 ;kivonunk egy rekordhossznyit . 1680 85 D9 STA $D9 ;az eredmény $D9-$DA-ra kerül . 1682 A5 D3 LDA $D3 . 1684 E9 00 SBC #$00 ;a kivonás korrigálása az átvitellel a nagyobbik byte-on . 1686 85 DA STA $DA . 1688 A0 00 LDY #$00 ;$D2-$D3 címen kezdődő rekord mentése . 168A B1 D2 LDA ($D2),Y ;ciklus: rekord olvasása . 168C 99 00 06 STA $0600,Y ;mentése ideiglenesen a $0600 alá . 168F C8 INY ;tovább a következő karakterre . 1690 C4 D4 CPY $D4 ;ha még nem végzett a teljes rekord átmentésével . 1692 D0 F6 BNE $168A ;akkor vissza a másoló ciklusra . 1694 A5 DA LDA $DA ;két rekord összehasonlítása, $D9-$DA cím összehasonlítása az adatbázis kezdetének címével . 1696 C5 D6 CMP $D6 ;ha $DA $D6-hoz képest . 1698 90 43 BCC $16DD ;ha kevesebb, ugrás, a mentett rekord visszatétele az adatbázis elejére . 169A F0 02 BEQ $169E ;megegyezik, urgás az alsó bájt ellenőrzésére . 169C B0 06 BCS $16A4 ;ha több, ugrás . 169E A5 D9 LDA $D9 ;ha $DA=$D6 és . 16A0 C5 D5 CMP $D5 ;ha $D9 $D5-höz képest . 16A2 90 39 BCC $16DD ;ha kevesebb, ugrás, a mentett rekord visszatétele az adatbázis elejére . 16A4 A0 00 LDY #$00 ;az ideiglenesen $0600-on lévő rekord összehasonlítása . 16A6 B1 D9 LDA ($D9),Y ;ciklus: a $D9-$DA címnél lévő rekorddal . 16A8 D9 00 06 CMP $0600,Y ;ha a karakterek éppen megegyeznek, . 16AB F0 04 BEQ $16B1 ;ugrás a következő karakterek vizsgálatára . 16AD B0 09 BCS $16B8 ;ha több, ugrás, a rekordok hátra húzása mindaddig, míg kisebb nem lesz . 16AF 90 2C BCC $16DD ;ha kevesebb, ugrás, a kimentett rekord betétele az adatbázisba . 16B1 C8 INY ;ugrás a rekord következő karakterére . 16B2 C4 D4 CPY $D4 ;ha még nem végzett a teljes rekord összehasonlításával . 16B4 D0 F0 BNE $16A6 ;akkor vissza a rekord következő karaktereinek vizsgálatára . 16B6 F0 25 BEQ $16DD ;a ciklus végén a kimentett rekord visszakerül a helyére, mutatók léptetése eggyel előre . 16B8 A5 D9 LDA $D9 ;rekordok tolása hátrafelé, közben a mutató egyre kisebb helyre mutat . 16BA 18 CLC ;Carry törlése összeadáshoz . 16BB 65 D4 ADC $D4 ;$D9-$DA növelése egy rekordhosszal . 16BD 85 DB STA $DB ;az eredmény $DB-$DC-re kerül . 16BF A5 DA LDA $DA . 16C1 69 00 ADC #$00 . 16C3 85 DC STA $DC . 16C5 A0 00 LDY #$00 . 16C7 B1 D9 LDA ($D9),Y ;ciklus: rekord másolása $D9-$DA alól . 16C9 91 DB STA ($DB),Y ;a következő helyre kerül . 16CA C8 INY ;tovább a következő karakterre . 16CC C4 D4 CPY $D4 ;ha még nem végzett a teljes rekord másolásával, . 16CE D0 F7 BNE $16C7 ;akkor vissza a ciklusba . 16D0 A5 D9 LDA $D9 ;$D9-$DA mutató . 16D2 38 SEC ;Carry beállítása kivonáshoz . 16D3 E5 D4 SBC $D4 ;egy rekorddal megelőző helyre mutat . 16D5 85 D9 STA $D9 ;érték mentése $D9-re . 16D7 B0 BB BCS $1694 ;átvitel esetén . 16D9 C6 DA DEC $DA ;a felső bájt csökkentése . 16DB D0 B7 BNE $1694 ;mindig ugrás vissza az összehasonlításhoz, mert $DA sosem kerül nullába . 16DD A5 D9 LDA $D9 ;mentett rekord visszatétele az adatbázisba, ha a $D9-$DA mutató kisebb volt az adatbázis kezdetének címénél . 16DF 18 CLC ;$D9-$DA visszakorrigálása . 16E0 65 D4 ADC $D4 . 16E2 85 DB STA $DB ;az eredmény $DB-$DC-re kerül (e.g. az adatbázis kezdőcíme) . 16E4 A5 DA LDA $DA . 16E6 69 00 ADC #$00 . 16E8 85 DC STA $DC . 16EA A0 00 LDY #$00 . 16EC B9 00 06 LDA $0600,Y ;ciklus: az ideiglenesen kimentett rekord . 16EF 91 DB STA ($DB),Y ;a $DB-$DC mutató általi rekordhelyre kerül . 16F1 C8 INY ;tovább a következő karakterre . 16F2 C4 D4 CPY $D4 ;ha még nem végzett a mentéssel, . 16F4 D0 F6 BNE $15CF ;akkor vissza a ciklusba . 16F6 20 35 11 JMP $163F ;vissza új rekord rendezéséhez Alprogram: Listázás képernyőre . 16F9 AD 1E 10 LDA $101E ;ha vannak adatok . 16FC D0 03 BNE $1701 ;akkor tovább . 16FE 4C EA 12 JMP $12EA ;egyébként visszatérés a főprogramba a billentyűzet figyeléséhez . 1701 20 B2 13 JSR $13B2 ;a listázáshoz a képernyőn a listaablak elkészítése . 1704 20 19 14 JSR $1419 ;egy rekord listázása . 1707 90 03 BCC $170C ;ha a listázás nem ért véget, tovább . 1709 4C 67 15 JMP $1567 ;ha végetért, "NYOMJ LE EGY BILLENTYUT!" és visszatérés a főprogramba . 170C 20 80 14 JSR $1480 ;Scroll illetve kilépés vizsgálata . 170F 90 F3 BCC $1704 ;vissza új adat listázásához Alprogram: Adatok törlése . 1711 A9 00 LDA #$00 . 1713 8D 1E 10 STA $101E ;Nulla mentése a név hosszát tartalmazó helyre . 1716 4C EC 11 JMP $11EC ;Visszatérés a főprogramba Alprogram: Keresés . 1719 AD 1E 10 LDA $101E ;ha a név hossza 0, azaz nincsenek adatok . 171C F0 E0 BEQ $16FE ;akkor vissza a főprogramba . 171E 20 2C 11 JSR $112C ;adatok kezdetének inicializálása . 1721 A0 00 LDY #$00 ;Y-törlése . 1723 20 66 11 JSR $1166 ;ha nincs adat . 1726 F0 F4 BEQ $171C ;akkor visszatérés a főprogramba . 1728 A9 12 LDA #$12 ;képernyőtörlés és "KERESES..." szöveg kiíratása . 172A A2 72 LDX #$72 ;címének beállítása kiíratáshoz . 172C A0 07 LDY #$07 ;szöveg hossza . 172E 20 6B 11 JSR $116B ;szöveg kiküldése képernyőre, továbbiakban a keresés almenüjének összeállítása . 1731 20 D8 14 JSR $14D8 ;"1. " szöveg kiküldése a képernyőre két sorral lejjebb . 1734 38 SEC ;"PROGRAMNEV " szöveg . 1735 20 AC 14 JSR $14AC ;kiküldése a képernyőre az előző szöveg után . 1738 20 D0 14 JSR $14D0 ;"SZERINT" szöveg kiküldése a képernyőre az előző szöveg után . 173B 20 E0 14 JSR $14E0 ;"2. " szöveg kiküldése a képernyőre két sorral lejjebb . 173E 38 SEC ;"ID BL. " szöveg . 173F 20 BE 14 JSR $14BE ;kiküldése a képernyőre az előző szöveg után . 1742 20 D0 14 JSR $14D0 ;"SZERINT" szöveg kiküldése a képernyőre az előző szöveg után . 1745 A9 12 LDA #$12 ;"3. " szöveg . 1747 A2 6F LDX #$6F . 1749 A0 03 LDY #$03 . 174B 20 7D 11 JSR $117D ;kiküldése a képernyőre . 174E 38 SEC ;"SORSZAM " szöveg . 174F 20 EF 14 JSR $14EF ;kiküldése a képernyőre az előző szöveg után . 1752 20 D0 14 JSR $14D0 ;"SZERINT" szöveg kiküldése a képernyőre az előző szöveg után . 1755 20 20 10 JSR $1020 ;billentyűzet olvasása . 1758 B0 BC BCS $1716 ;ESC esetén visszatérés a főprogramba . 175A C9 31 CMP #$31 ;ha 1 volt kiválasztva . 175C F0 65 BEQ $17C3 ;akkor tovább a programnév szerinti kereséshez . 175E C9 32 CMP #$32 ;ha nem 2 volt kiválasztva . 1760 D0 07 BNE $1769 ;akkor tovább a következő menüpont ellenőrzéséhez . 1762 AD 1F 10 LDA $101F ;egyébként azonosító hosszának ellenőrzése . 1765 F0 EE BEQ $1755 ;ha nulla, akkor vissza új billentyűre várva . 1767 4C 68 BNE $17D1 ;egyébként ugrás az azonosító szerinti kereséshez . 1769 C9 33 CMP #$33 ;ha nem 3 volt kiválasztva . 176B D0 E8 BNE $1755 ;akkor ugrás vissza új billentyűre várva . 176D 18 CLC . 176E 20 EC 14 JSR $14EC ;"SORSZAM" szöveg kiíratása a képernyőre új sorban . 1771 20 AD 13 JSR $13AD ;kettőspont kiküldése a szöveg után . 1774 20 49 11 JSR $1149 ;munkaterület inicializálása, rekordok számának megállapítása . 1777 A9 05 LDA #$05 ;szám bekérése . 1779 20 1B 13 JSR $131B ;5 karakterhosszon, mert a rekordok száma a RAM-ban biztosan kisebb 100000-nél . 177C B0 DA BCS $1758 ;ESC esetén visszatérés a főprogramba . 177E A5 E7 LDA $E7 ;a bevitt szám felső bájtja . 1780 C5 D8 CMP $D8 ;ha kisebb a rekordok számának felső bájtjánál . 1782 90 0C BCC $1790 ;akkor tovább . 1784 F0 02 BEQ $1788 ;ha egyenlő, akkor tovább az alsó bájt vizsgálatára . 1786 B0 EF BCS $1777 ;ha több, új szám bekérése . 1788 A5 E6 LDA $E6 ;a bevitt szám alsó bájtja . 178A C5 D7 CMP $D7 ;ha éppen megegyezik a rekordszáméval . 178C F0 02 BEQ $1790 ;tovább a sorszám megkereséséhez . 178E B0 E7 BCS $1777 ;ha több, vissza új szám bekéréséhez . 1790 20 B2 13 JSR $13B2 ;listaablak készítése képernyőn . 1793 A5 E6 LDA $E6 ;ha a sorszám . 1795 05 E7 ORA $E7 ;0 volt . 1797 F0 0A BEQ $17A3 ;tovább normál a listázáshoz . 1799 C6 E6 DEC $E6 ;a bevitt sorszám csökkentése 1-gyel . 179B A5 E6 LDA $E6 ;ha a sorszám . 179D C9 FF CMP #$FF ;még nem fordult alá . 179F D0 02 BNE $17A3 ;tovább . 17A1 C6 E7 DEC $E7 ;a a bevitt sorszám felső bájtjának csökkentése 1-gyel . 17A3 A5 E6 LDA $E6 ;$E6-$E7 mentése . 17A5 85 D0 STA $D0 ;$D0-$D1-re . 17A7 A5 E7 LDA $E7 . 17A9 85 D1 STA $D1 . 17AB C6 E6 DEC $E6 ;a megadott sorszámú rekord listázásához a $D2-$D3 rekordmutató számítása . 17AD A5 E6 LDA $E6 ;$E6-$E7 csökkentése 1-gyel . 17AF C9 FF CMP #$FF ;ha az alsó bájt még nem fordult át . 17B1 D0 08 BNE $17BB ;akkor tovább . 17B3 C6 E7 DEC $E7 ;a felső bájt csökkentése 1-gyel . 17B5 A5 E7 LDA $E7 . 17B7 C9 FF CMP #$FF ;ha a sorszám már 0 alá csökkent . 17B9 F0 05 BEQ $17C0 ;nincs további rekordmutató cím növelése, és ugrás a rekordok listázására . 17BB 20 35 11 JSR $1135 ;$D2-$D3 rekordmutató növelése a következő rekordhoz . 17BE 90 EB BCC $17AB ;vissza a rekordmutató növeléséhez . 17C0 4C 04 17 JMP $1704 ;ugrás a rekordok listázásához . 17C3 AD 1E 10 LDA $101E ;programnév szerinti keresés, programnevek hosszának betöltése . 17C6 85 D4 STA $E0 ;mezőhossz mentése $D4-re . 17C8 A9 00 LDA #$00 ;jelző értéke programnév alapján történő kereséshez . 17CA 85 D5 STA $E1 ;mentése $D5-re . 17CC 20 A8 14 JSR $14A8 ;"PROGRAMNEV" szöveg kiíratása a képernyőre . 17CF 90 0C BCC $17DD ;mindig ugrás a keresés lekezeléséhez . 17D1 AD 1F 10 LDA $101F ;azonosító szerinti keresés, azonosító hosszának betöltése . 17D4 85 D4 STA $E0 ;mezőhossz mentése $D4-re . 17D6 A9 80 LDA #$80 ;jelző értéke azonosító alapján történő kereséshez . 17D8 85 D5 STA $E1 ;mentése $D5-re . 17DA 20 BA 14 JSR $14BA ;"ID BL." szöveg kiíratása a képernyőre . 17DD 20 AD 13 JSR $13AD ;kettőspont kiküldése a szöveg után . 17E0 A5 D4 LDA $E0 ;mező hosszának betöltése . 17E2 20 39 10 JSR $1039 ;kereséshez a keresendő szöveg bekérése . 17E5 B0 95 BCS $177C ;ESC esetén visszatérés a főprogramba . 17E7 20 9B 11 JSR $119B ;a bevitt szöveg ellenőrzése . 17EA 20 B2 13 JSR $13B2 ;listaablak képernyőre . 17ED 20 80 14 JSR $1480 ;egy rekord ellenőrzésének kezdete, billentyűfigyelés . 17F0 A0 00 LDY #$00 ;Y-törlése . 17F2 20 66 11 JSR $1166 ;adatolvasás $D2-$D3-on . 17F5 D0 03 BNE $17FA ;ha van adat, tovább . 17F7 4C 67 15 JMP $1567 ;egyébként "NYOMJ LE EGY BILLENTYUT!" kiíratása, és visszatérés a főprogramba . 17FA A5 D5 LDA $E1 ;programnév szerinti keresés esetén . 17FC F0 03 BEQ $1801 ;ugrás tovább . 17FE 20 3B 11 JSR $113B ;azonosító szerinti keresés esetén a $D2-$D3 mutató urgása az azonosító mezőre . 1801 A5 D4 LDA $E0 ;mező hosszának betöltése . 1803 20 76 13 JSR $1376 ;rekordban a keresési szöveg ellenőrzése . 1806 08 PHP ;státusz mentése verembe . 1807 A5 D5 LDA $E1 ;programnév szerinti keresés esetén . 1809 F0 0C BEQ $1817 ;ugrás tovább . 180B A5 D2 LDA $D2 ;azonosító szerinti keresés esetén . 180D 38 SEC ;a korábban programnév hosszával megnövelt $D2-$D3 mutatóból . 180E ED 1E 10 SBC $101E ;a programnév hosszának kivonása . 1811 85 D2 STA $D2 ;így a mutató visszaállítása a rekord elejére . 1813 B0 02 BCS $1817 . 1815 C6 D3 DEC $D3 . 1817 28 PLP ;státusz visszatöltése veremből . 1818 B0 06 BCS $1820 ;ha nincs egyezés, tovább a következő rekordra . 181A 20 19 14 JSR $1419 ;egyezés esetén a rekord kiírása a képernyőre . 181D 18 CLC ;ugrás vissza . 181E 90 CD BCC $17ED ;a következő rekord ellenőrzéséhez . 1820 E6 D0 INC $D0 ;rekord sorszámának növelése . 1822 D0 02 BNE $1826 . 1824 E6 D1 INC $D1 . 1826 20 35 11 JSR $1135 ;$D2-$D3 mutató ráállítása a következő rekordra . 1829 90 C2 BCC $17ED ;ugrás vissza a következő rekord ellenőrzéséhez Alprogram: Programlista nyomtatása . 182B AD 1E 10 LDA $101E ;programnév hosszának betöltése . 182E D0 03 BNE $1833 ;ha van adat, ugrás tovább . 1830 4C EA 12 JMP $12EA ;egyébként vissza a főprogram billentyűzet figyeléséhez . 1833 A9 12 LDA #$12 ;"PROGRAMLISTA NYOMTATASA" szöveg . 1835 A2 9A LDX #$9A . 1837 A0 17 LDY #$17 . 1839 20 6B 11 JSR $116B ;kiíratása a képernyőre előzetes képernyőtörlés után . 183C A9 04 LDA #$04 ;nyomtató csatorna nyitásához . 183E AA TAX ;a paraméterek beállítása . 183F A0 00 LDY #$00 . 1841 20 BA FF JSR $FFBA ;SETLFS . 1844 98 TYA ;nincs filenév . 1845 20 BD FF JSR $FFBD ;SETNAM . 1848 20 C0 FF JSR $FFC0 ;OPEN . 184B A2 04 LDX #$04 ;nyomtatócsatornára váltás . 184D 20 C9 FF JSR $FFC9 ;CHOUT . 1850 90 26 BCC $1878 ;ha a nyomtató elérése rendben volt, ugrás tovább . 1852 20 4F FF JSR $FF4F ;egyébként hibaüzenet a képernyőre >1855 0D 11 1D 48 49 42 41 20 : ...HIBA >186D 41 20 53 4F 52 4F 53 20 : A SOROS >1865 56 4F 4E 41 4C 4F 4E 21 : VONALON! >186D 0D 0F 00 : ... . 1870 A9 04 LDA #$04 ;nyomtatócsatorna zárása . 1872 20 C3 FF JSR $FFC3 ;CLOSE . 1875 4C 67 15 JMP $1567 ;"NYOMJ LE EGY BILLENTYUT!" kiíratása, és visszatérés a főprogramba . 1878 20 CC FF JSR $FFCC ;CLRCH, a kiviteli csatorna visszaállítása képernyőre . 187B 20 49 11 JSR $1149 ;Munkamutató ($D2-$D3) ráállítása az adatok végére . 187E A9 1E LDA #$1E ;"OSZLOPSZAM A LAPON:" szöveg . 1880 A2 7D LDX #$7D . 1882 A0 13 LDY #$13 . 1884 20 7D 11 JSR $117D ;kiküldése a képernyőre . 1887 A9 31 LDA #$31 ;a beviteli mezőbe . 1889 8D 8D 0C STA $0C8D ;előzetesen 160 . 188C A9 36 LDA #$36 ;kerül . 188E 8D 8E 0C STA $0C8E ;a képernyőn . 1891 A9 30 LDA #$30 . 1893 8D 8F 0C STA $0C8F . 1896 A9 03 LDA #$03 ;3 karakterhosszú . 1898 20 1B 13 JSR $131B ;szám bekérése . 189B 90 03 BCC $18A0 ;ha nem volt Esc, tovább . 189D 4C 51 1B JMP $1B51 ;nyitott csatorna zárása, és vissza a főprogramhoz . 18A0 A5 E7 LDA $E7 ;a bevitt szám ellenőrzése, felső byte beolvasása . 18A2 85 D5 STA $D5 ;elmentése $D5-re . 18A4 D0 08 BNE $18AE ;ha a felső bájt nem nulla, tovább . 18A6 A5 E6 LDA $E6 ;ha az alsó bájt . 18A8 C9 0A CMP #$0A ;10-nél kevesebb . 18AA 90 EA BCC $1896 ;vissza új szám bekéréséhez . 18AC A5 04 BCS $18B2 ;ha nem kevesebb, ugrás . 18AE C9 02 CMP #$02 ;ha 2-nél nagyobb a felső byte (azaz az oszlopszám min. 512) . 18B0 B0 E4 BCS $1896 ;vissza új szám bekéréséhez . 18B2 A5 E6 LDA $E6 ;a bevitt oszlopszám . 18B4 85 D4 STA $D4 ;elmentése a $D4-$D5 munkaterületre, hány karakter széles a papír . 18B6 20 E8 14 JSR $14E8 ;"SOR" szöveg . 18B9 A9 1E LDA #$1E ;"SZAM A LAPON:" szöveg . 18BB A2 83 LDX #$83 . 18BD A0 0D LDY #$0D . 18BF 20 84 11 JSR $1184 ;kiküldése a képernyőre közvetlenül a korábbi szöveg után . 18C2 A9 37 LDA #$37 ;a beviteli mezőbe . 18C4 8D DA 0C STA $0CDA ;előzetesen 72 (normál leporello) . 18C7 A9 32 LDA #$32 ;kerül . 18C9 8D DB 0C STA $0CDB ;a képernyőn . 18CC A9 03 LDA #$03 ;3 karakterhosszú . 18CE 20 1B 13 JSR $131B ;szám bekérése . 18D1 B0 CA BCS $189D ;ha Esc volt, vissza a főprogramhoz . 18D3 A5 E7 LDA $E7 ;ha a bevitt szám felső bájtja . 18D5 C9 02 CMP #$02 ;nagyobb 1-nél (azaz a sorszám 512-nél nagyobb) . 18D7 B0 F3 BCS $18CC ;vissza új szám bekéréséhez . 18D9 C9 01 CMP #$01 ;ha a felső bájt nem 1, tehát 0 . 18DB D0 06 BNE $18E3 ;akkor tovább . 18DD A5 E6 LDA $E6 ;ha az alsó bájt értéke . 18DF F0 08 BEQ $18E9 ;0, azaz a bevitt szám 256, akkor tovább . 18E1 D0 E9 BNE $18CC ;egyébként vissza új szám bekéréséhez . 18E3 A5 E6 LDA $E6 ;ha az alsó bájt értéke . 18E5 C9 0F CMP #$0F ;15-nél kevesebb, . 18E7 90 E3 BCC $18CC ;akkor vissza új szám bekéréséhez . 18E9 38 SEC ;kivonáshoz Carry beállítása . 18EA E9 03 SBC #$03 ;3 kivonása, (fejléc, alatta egy vízszintes vonal, egy sor a leporello határugrás miatt) . 18EC 85 D6 STA $D6 ;lapon a sorszám elmentése a $D6-ra . 18EE A9 1E LDA #$1E ;"PELDANY:" szöveg . 18F0 A2 75 LDX #$75 . 18F2 A0 08 LDY #$08 . 18F4 20 7D 11 JSR $117D ;kiküldése a képernyőre új sorba . 18F7 A9 31 LDA #$31 ;a beviteli mezőbe előzetesen 1 . 18F9 8D 22 0D STA $0D22 ;kerül . 18FC A9 03 LDA #$03 ;3 karakterhosszú . 18FE 20 1B 13 JSR $131B ;szám bekérése . 1901 B0 9A BCS $189D ;ha Esc volt, vissza a főprogramhoz . 1903 A5 E7 LDA $E7 ;ha a bevitt szám felső bájtja . 1905 C9 02 CMP #$02 ;nagyobb 1-nél (azaz a sorszám 512-nél nagyobb) . 1907 B0 F3 BCS $18FC ;akkor vissza új szám bekéréséhez . 1909 C9 01 CMP #$01 ;ha a felső bájt nem 1, tehát 0 . 190B D0 06 BNE $1913 ;akkor tovább . 190D A5 E6 LDA $E6 ;ha az alsó bájt értéke . 190F D0 EB BNE $18FC ;nem 0, azaz a pélányszám több, mint 256, akkor vissza új szám bekéréséhez . 1911 F0 04 BEQ $1917 ;ha 0 akkor tovább . 1913 A5 E6 LDA $E6 ;ha az alsó bájt értéke . 1915 F0 E5 BEQ $18FC ;0, tehát a pédányszám 0, akkor vissza új szám bekéréséhez . 1917 85 D9 STA $D9 ;példányszám mentése a $D9-re . 1919 A9 00 LDA #$00 . 191B 85 DA STA $DA ;példányszámláló nullázása, $DA törlése . 191D A5 D2 LDA $D2 ;$D2-$D3-on lévő . 191F 85 E2 STA $E2 ;adatterület végét jelző . 1921 A5 D3 LDA $D3 ;mutató mentése . 1923 85 E3 STA $E3 ;$E2-$E3-ra . 1925 AD 1E 10 LDA $101E ;programnévhossz betöltése . 1928 85 DF STA $DF ;elmentése $DF-re . 192A AD 1F 10 LDA $101F ;azonosítóhossz betöltése . 192D 85 E0 STA $E0 ;elmentése $E0-ra . 192F F0 03 BEQ $1934 ;ha ez 0 volt, ugrás . 1931 A9 01 LDA #$01 ;1, plusz 1 byte kell nyomtatáskor a programnév és az azonosító közé . 1933 2C BIT ;NOP az A törlésének átugrásához . 1934 A9 00 LDA #$00 ;0 . 1936 85 D2 STA $D2 ;mentése a D2-re . 1938 20 35 11 JSR $1135 ;$D2-$D3 munkamutató címének növelése 1 rekordhosszal, $D2-ben a nyomtatáskori rekord mérete korrigálva . 193B A9 01 LDA #$01 ;a papíron, legalább 1 hasáb helyezhető el, ezért . 193D 85 E1 STA $E1 ;1 mentése $E1-re, a papíron elhelyezhető hasábok száma . 193F A5 D5 LDA $D5 ;ha a lapszélesség felső bájtja . 1941 D0 3B BNE $197E ;0-nál nagyobb, ugrás tovább . 1943 A5 D4 LDA $D4 ;ha a lapszélesség alsó bájtja . 1945 C5 D2 CMP $D2 ;nagyobb vagy egyenlő a korrigált rekordmérettel . 1947 B0 35 BCS $197E ;akkor legalább 1 teljes hasáb biztosan elfér, ugrás tovább . 1949 4A LSR ;ha kisebb, akkor az érték felezése . 194A E9 00 SBC #$00 ;Carry kivonása, csökkentés még eggyel . 194C 85 D3 STA $D3 ;elmentés $D3-ra . 194E A5 E0 LDA $E0 ;a korábban elmentett azonosítóhossz betöltése . 1950 F0 26 BEQ $1978 ;ha 0, ugrás tovább . 1952 C5 D3 CMP $D3 ;ha nagyobb a felezett értéknél . 1954 B0 0B BCS $1961 ;ugrás tovább . 1956 A5 D4 LDA $D4 ;a papír szélességéből . 1958 38 SEC ;Carry 1-be a kivonáshoz . 1959 E9 01 SBC #$01 ;kivonunk 1-gyet a programnév és az azonosító közötti hely miatt . 195B E5 E0 SBC $E0 ;kivonjuk az azonosító hosszát . 195D 85 DF STA $DF ;$DF-re a korrigált programnévhossz, ami a papírra kerül . 195F D0 1B BNE $197C ;ugrás tovább . 1961 A5 DF LDA $DF ;a programnévhossz betöltése . 1963 C5 D3 CMP $D3 ;ha ez minimum a felezett érték nagysága . 1965 B0 0B BCS $1972 ;akkor ugrás tovább . 1967 A5 D4 LDA $D4 ;a papír szélességéből . 1969 38 SEC ;Carry beállítása kivonáshoz . 196A E9 01 SBC #$01 ;1-et kivonva és . 196C E5 E0 SBC $E0 ;az azonosítóhosszt kivonva . 196E 85 DF STA $DF ;az érték mentése a nyomtatáskori programnévhosszhoz . 1970 D0 0A BNE $197C ;ugrás tovább . 1972 A5 D3 LDA $D3 ;a felezett érték . 1974 85 E0 STA $E0 ;mentése a nyomtatáskori azonosítóhosszhoz . 1976 D0 EF BNE $1967 ;ugrás tovább . 1978 A5 D4 LDA $D4 ;mivel nincs azonosító, így a teljes papírszélességgel . 197A 85 DF STA $DF ;lesz egyenlő a korrigált progtamnévhossz, mentése a $DF-re . 197C D0 27 BNE $19A5 ;a hasábok számításának átugrása, csak 1 hasáb lesz a papíron . 197E A5 D2 LDA $D2 ;annak kiszámolása, hogy hány adathasáb fér rá a papíra . 1980 85 DB STA $DB ;a korrigált rekordméret betöltése, és elmentése $DB-re . 1982 E6 D2 INC $D2 ;rekordméret növelése 1-gyel (+1 hely a papíron 2 hasáb között) . 1984 A5 DB LDA $DB ;a papíron a tényleges nyomtatási hossz betöltése . 1986 18 CLC ;Carry törlése összeadáshoz . 1987 65 D2 ADC $D2 ;a hosszhoz egy új hasábhossz hozzáadása (rekordhossz+2) . 1989 85 DB STA $DB ;az adat elmentése, a nyomtatási szélesség 1 hasábbal megnövelve . 198B 90 02 BCC $198F ;átvitel esetén . 198D E6 DC INC $DC ;a felső bájt megnövelése 1-gyel . 198F A5 DC LDA $DC ;ha az új nyomtatási szélesség . 1991 C5 D5 CMP $D5 ;kevesebb a papír szélességénél . 1993 90 0C BCC $19A1 ;ugrás a hasábok számának növeléséhez . 1995 F0 02 BEQ $1999 ;ha a felső bájt éppen egyezik, tovább az alsó bájt ellenőrzéséhez . 1997 B0 0C BCS $19A5 ;ha kevesebb, akkor kilépés a hasábok számításának ciklusából . 1999 A5 DB LDA $DB ;ha az alsó bájt értéke . 199B C5 D4 CMP $D4 ;a papír szélességének alsó bájtjával . 199D F0 02 BEQ $19A1 ;megegyezik, akkor éppen ennyi oszlop fér fel rá, ugrás a hasábok számának növeléséhez . 199F B0 04 BCS $19A5 ;ha több, akkor kilépés a hasábok számításának ciklusából, tovább . 19A1 E6 E1 INC $E1 ;a papírra elhelyezhető hasábok számának növelése 1-gyel . 19A3 D0 DF BNE $1984 ;mindig vissza új hasáb vizsgálatához . 19A5 18 CLC ;Carry törlése . 19A6 A5 E0 LDA $E0 ;a nyomtatáskori azonosítóhossz betöltése . 19A8 F0 02 BEQ $19AC ;ha ez 0, akkor ugrás tovább . 19AA 69 01 ADC #$01 ;helyköz hozzáadása . 19AC 65 DF ADC $DF ;a nyomtatáskori korrigált névhossz hozzáadása . 19AE 85 DB STA $DB ;nyomtatáskori korrigált rekordhossz mentése $DB-re és . 19B0 A8 TAY ;átadása Y-ba . 19B1 A9 00 LDA #$00 ;nyomtatáshoz a puffer inicializálása, a végére végjel kerül . 19B3 99 F0 06 STA $06F0,Y ;mentése . 19B6 A9 20 LDA #$20 ;szóköz kódja A-ba . 19B8 88 DEY ;index csökkentése . 19B9 C0 FF CPY #$FF ;ha a ciklus még tart . 19BB D0 F6 BNE $19B3 ;vissza a puffer inicializálásához az eggyel korábbi helyre mentés . 19BD C8 INY ;Y törlése . 19BE B9 E8 13 LDA $13E8,Y ;a pufferben a fejléc összeállítása ("PROGRAMNEV") . 19C1 99 F0 06 STA $06F0,Y ;programnev karaktereinek mentése . 19C4 C8 INY ;index növelése . 19C5 C0 0A CPY #$0A ;ha a teljes szöveget beírta, . 19C7 F0 0A BEQ $19D3 ;ugrás az azonosító beírásához . 19C9 C4 DF CPY $DF ;ha még nem érte el a korrigált névhosszot . 19CB D0 F1 BNE $19BE ;ugrás vissza a következő karakter betöltéséhez . 19CD 88 DEY ;Y csökkentése 1-gyel . 19CE A9 2E LDA #$2E ;ebben az esetben rövidítés miatt . 19D0 99 F0 06 STA $06F0,Y ;pont kerül a név utolsó karakterére . 19D3 A5 E0 LDA $E0 ;azonosító szövege a fejlécpufferbe, a korrigált azonosítóhossz olvasása . 19D5 F0 1B BEQ $19F2 ;ha ez 0, akkor nincs azonosító, ugrás tovább . 19D7 A4 DF LDY $DF ;indexbe a korrigált névhossz . 19D9 C8 INY ;Y növelése 1-gyel, hely kihagyása miatt . 19DA A2 00 LDX #$00 ;X törlése, index az azonosító olvasásához . 19DC BD F6 13 LDA $13F6,X ;azonosító karaktereinek olvasása . 19DF 99 F0 06 STA $06F0,Y ;mentése a pufferbe . 19E2 E8 INX ;indexek növelése . 19E3 C8 INY ;tovább a következő karakterre . 19E4 E0 06 CPX #$06 ;ha a teljes azonosító beírásra került, . 19E6 F0 0A BEQ $19F2 ;ugrás tovább . 19E8 E4 E0 CPX $E0 ;ha az X még nem érte el a korrigált azonosítóhosszt . 19EA D0 F0 BNE $19DC ;ugrás vissza a következő karakter betöltéséhez . 19EC 88 DEY ;Y csökkentése 1-gyel . 19ED A9 2E LDA #$2E ;ebben az esetben rövidítés miatt . 19EF 99 F0 06 STA $06F0,Y ;pont kerül az azonosító utolsó karakterére . 19F2 A9 12 LDA #$12 ;"NYOMTATAS" szöveg . 19F4 A2 A7 LDX #$A7 . 19F6 A0 09 LDY #$09 . 19F8 20 7D 11 JSR $117D ;kiküldése képernyőre új sorba . 19FB 20 4F FF JSR $FF4F >19FE 2E 2E 2E 00 : .... . 1A02 A2 04 LDX #$04 ;a kimeneti csatorna nyomtatóra váltása . 1A04 20 C9 FF JSR $FFC9 ;CHOUT . 1A07 A0 00 LDY #$00 ;ciklus: egy példány nyomtatása, Y törlése . 1A09 B9 C0 1E LDA $1EC0,Y ;ciklus: a lista fejlécének nyomtatása, fejlécadatok olvasása a program végéről . 1A0C F0 06 BEQ $1A14 ;ha a felolvasott karakter végjel, akkor kilépés a ciklusból . 1A0E 20 D2 FF JSR $FFD2 ;karakter kiküldése a nyomtatóra . 1A11 C8 INY ;index a következő karakterre . 1A12 D0 F5 BNE $1A09 ;a fejléc hossza maximum 256 karakter lehet, így mindig ugrás vissza a következő fejlécadat olvasásához . 1A14 A6 D7 LDX $D7 ;rekordok számának nyomtatása a papírra a fejléc után . 1A16 A5 D8 LDA $D8 ;rekordok számának beolvasása . 1A18 20 5F A4 JSR $A45F ;a szám karakterekké alakítása és, a szám kiküldése a nyomtatóra . 1A1B A0 00 LDY #$00 ;Y törlése . 1A1D B9 90 1E LDA $1E90,Y ;ciklus: a kiírt szám után "DB PROGRAM" és a dátum nyomtatása . 1A20 F0 06 BEQ $1A28 ;ha a felolvasott karakter végjel volt, akkor kilépés a ciklusból . 1A22 20 D2 FF JSR $FFD2 ;karakter kiküldése a nyomtatóra . 1A25 C8 INY ;index a következő karakterre . 1A26 D0 F5 BNE $1A1D ;ez a rész mindig kevesebb 256 karakternél, így mindig ugrás vissza a következő karakter olvasásához . 1A28 20 2C 11 JSR $112C ;rekordok nyomtatása, az adatterület elejének inicializálása . 1A2B A9 0B LDA #$0B ;a korábban kinyomtatott fejléc 11 sort tartalmazott, ezért ez kerül . 1A2D 85 DE STA $DE ;az aktuális sorszámlálóba, $DE-be mentve . 1A2F D0 1D BNE $1A4E ;mindig ugrás tovább . 1A31 20 A7 13 JSR $13A7 ;ciklus: egy új listaoldal nyomtatása, küldése a nyomtatóra, nyomtatófej a következő sor elejére . 1A34 20 A4 13 JSR $13A4 ; küldése a nyomtatóra a maradék papíron lapdobás . 1A37 A9 00 LDA #$00 ;A törlése . 1A39 85 DE STA $DE ;sorszámláló nullázása . 1A3B A4 E1 LDY $E1 ;hasábok számának betöltése . 1A3D 88 DEY ;Y csökkentése . 1A3E B9 F0 05 LDA $05F0,Y ;ciklus: az utolsó hasáb adat mutatójának keresése, ez lesz az első hasáb mutatója az új lapon . 1A41 D0 04 BNE $1A47 ;rekordmutató felső bájtjának betöltése, ha nem végjel, akkor tovább . 1A43 88 DEY ;index az eggyel megelőző hasábra . 1A44 18 CLC ;Carry törlése . 1A45 90 F7 BCC $1A3E ;mindig ugrás vissza . 1A47 85 D3 STA $D3 ;mentés $D3-ra . 1A49 B9 33 03 LDA $0333,Y ;a mutató alsó bájtjának betöltése . 1A4C 85 D2 STA $D2 ;mentése $D2-re . 1A4E A0 00 LDY #$00 ;lista fejléc inicializálása . 1A50 98 TYA ;A-ba végjel kerül . 1A51 99 33 03 STA $0333,Y ;ciklus: puffer törlése . 1A54 99 F0 05 STA $05F0,Y ;puffer törlése . 1A57 C8 INY ;index növelése . 1A58 D0 F7 BNE $1A51 ;ugrás vissza, teljes pufferlapok nullázása . 1A5A A5 D6 LDA $D6 ;lapon a sorok számának beolvasása . 1A5C 38 SEC ;kivonáshoz Carry beállítása . 1A5D E5 DE SBC $DE ;kivonva belőle a korábban már kinyomtatott fejléc sorainak a száma . 1A5F 85 DB STA $DB ;elmentése $DB-re . 1A61 A5 D2 LDA $D2 ;ciklus: az oldalon nyomtatáshoz a hasábok kezdőcímeinek keresése . 1A63 99 33 03 STA $0333,Y ;rekordmutató alsó bájtjának olvasása és mentése . 1A66 A5 D3 LDA $D3 ;rekordmutató felső bájtjának olvasása . 1A68 99 F0 05 STA $05F0,Y ;rekordmutató felső bájtjának mentése . 1A6B A2 00 LDX #$00 ;X törlése . 1A6D 20 35 11 JSR $1135 ;ciklus: rekordmutató növelése a következő rekord elejére . 1A70 84 02 STY $02 ;Y mentése . 1A72 A0 00 LDY #$00 ;Y törlése . 1A74 20 66 11 JSR $1166 ;első bájt felolvasása a rekordból . 1A77 F0 0C BEQ $1A85 ;ha végjel, akkor kilépés a címkereső rutinból . 1A79 A4 02 LDY $02 ;Y visszatöltése . 1A7B E8 INX ;következő nyomtatási sor jön . 1A7C E4 DB CPX $DB ;ha X nem érte el az utolsó sort a lapon, . 1A7E D0 ED BNE $1A6D ;vissza a rekordmutató növeléséhez . 1A80 C8 INY ;következő hasáb címének kereséséhez Y növelése . 1A81 C4 E1 CPY $E1 ;ha nem érte el X még a hasábok számát . 1A83 D0 DC BNE $1A61 ;akkor vissza a rekordmutató növeléséhez . 1A85 A9 00 LDA #$00 ;A törlése . 1A87 85 DB STA $DB ;munkamutató nullázása . 1A89 85 DC STA $DC ; . 1A8B AA TAX ;a lista fejlécének kiküldése a papírra, hasábszámláló, X törlése . 1A8C A0 00 LDY #$00 ;ciklus: Y törlése . 1A8E B9 F0 06 LDA $06F0,Y ;ciklus: nyomtatási lista fejlécének olvasása . 1A91 F0 06 BEQ $1A99 ;ha végjel, akkor kilépés a ciklusból . 1A93 20 D2 FF JSR $FFD2 ;karakter kiküldése a nyomtatóra . 1A96 C8 INY ;tovább a következő karakterre . 1A97 D0 F5 BNE $1A8E ;vissza a ciklus elejére . 1A99 E8 INX ;következő hasábhoz az X növelése . 1A9A E4 E1 CPX $E1 ;ha X elérte a hasábok számát . 1A9C F0 05 BEQ $1AA3 ;kilépés a ciklusból . 1A9E 20 B2 13 JSR $13AA ;szóköz nyomtatása a papírra . 1AA1 90 E9 BCC $1A8C ;vissza a következő hasábhoz tartozó fejléc nyomtatásához . 1AA3 20 A7 13 JSR $13A7 ;Az összes hasáb fejlécének nyomtatása után, küldése a nyomtatóra, új sor jön . 1AA6 A9 C0 LDA #$C0 ;vízszintes vonal kódjának . 1AA8 20 D2 FF JSR $FFD2 ;ciklus: kiküldése a nyomtatóra . 1AAB E6 DB INC $DB ;oszlopszámláló növelése . 1AAD D0 02 BNE $1AB1 ;átvitel esetén . 1AAF E6 DC INC $DC ;a felső bájt növelése . 1AB1 A4 DC LDY $DC ;a számláló felső bájtja . 1AB3 C4 D5 CPY $D5 ;ha kevesebb a lapszélesség felső bájtjánál . 1AB5 90 F1 BCC $1AA8 ;vissza újabb karakter kiküldésére . 1AB7 A4 DB LDY $DB ;a számláló alsó bájtja . 1AB9 C4 D4 CPY $D4 ;ha kevesebb a lapszélesség alsó bájtjánál . 1ABB 90 EB BCC $1AA8 ;vissza újabb karakter kiküldésére . 1ABD 20 A7 13 JSR $13A7 ;Az összes hasáb fejlécének aláhúzása után, küldése a nyomtatóra, új sor jön . 1AC0 A2 00 LDX #$00 ;ciklus: adatsor nyomtatása, X törlése . 1AC2 BD F0 05 LDA $05F0,X ;ciklus: adatnyomtatás, a hasábhoz tartozó rekord mutató felső bájtjának betöltése . 1AC5 F0 4F BEQ $1B16 ;ha ez végjel volt, akkor ez a hasáb már üres a papíron, tovább a címek növeléséhez . 1AC7 85 D3 STA $D3 ;a betöltött mutató mentése $D3-ra . 1AC9 BD 33 03 LDA $0333,X ;a hasábhoz tartozó rekord mutató alsó bájtjának betöltése . 1ACC 85 D2 STA $D2 ;mentése $D2-re . 1ACE A5 D3 LDA $D3 ;ha a mutató felső bájtja . 1AD0 C5 E3 CMP $E3 ;még nem érte el az adatterület végét . 1AD2 90 0A BCC $1ADE ;akkor tovább . 1AD4 F0 02 BEQ $1AD8 ;ha éppen megegyezik vele, tovább az alsó bájt ellenőrzéséhez . 1AD6 B0 04 BCS $1ADC ;ha több tovább . 1AD8 A5 D2 LDA $D2 ;ha a mutató alsó bájtja . 1ADA C5 E2 CMP $E2 ;elérte az adatterület végét . 1ADC B0 38 BCS $1B16 ;akkor tovább . 1ADE 8A TXA ;X mentése . 1ADF 48 PHA . 1AE0 A5 D3 LDA $D3 ;rekordmutató betöltése . 1AE2 A6 D2 LDX $D2 . 1AE4 A4 DF LDY $DF ;Y-ba a korrigált névhossz . 1AE6 20 84 11 JSR $1184 ;programnév kiküldése a nyomtatóra . 1AE9 20 3B 11 JSR $113B ;rekordmutató növelése a név hosszával . 1AEC A4 E0 LDY $E0 ;ha a korrigált azonosítóhossz . 1AEE F0 10 BEQ $1B00 ;0, akkor nincs azonosító nyomtatása, tovább . 1AF0 20 AA 13 JSR $13AA ;szóköz nyomtatása a papírra . 1AF3 A5 D3 LDA $D3 ;rekordmutató betöltése, . 1AF5 A6 D2 LDX $D2 ;ami már az azonosító adatra mutat . 1AF7 20 84 11 JSR $1184 ;azonosító kiküldése a nyomtatóra . 1AFA AD 1F 10 LDA $101F ;azonosítóhossz betöltése . 1AFD 20 3E 11 JSR $113E ;rekordmutató megnövelése, a rekordmutató a következő rekord elejére mutat . 1B00 68 PLA ;X visszatöltése . 1B01 AA TAX . 1B02 A5 D2 LDA $D2 ;az aktuális hasábhoz tartozó . 1B04 9D 33 03 STA $0333,X ;az aktualizált rekordmutató elmentése . 1B07 A5 D3 LDA $D3 . 1B09 9D F0 05 STA $05F0,X . 1B0C E8 INX ;tovább a következő hasábra . 1B0D E4 E1 CPX $E1 ;ha a számláló . 1B0F F0 05 BEQ $1B16 ;elérte az utolsó hasábot, akkor tovább új sor nyomtatásához . 1B11 20 AA 13 JSR $13AA ;szóköz nyomtatása a papírra, következő hasáb jön . 1B14 90 AC BCC $1AC2 ;ha rendben volt, vissza az adatnyomtatáshoz . 1B16 20 A7 13 JSR $13A7 ; küldése a nyomtatóra, új sor jön . 1B19 E6 DE INC $DE ;sorszámláló növelése . 1B1B A5 DE LDA $DE ;ha a sorszámláló . 1B1D C5 D6 CMP $D6 ;nem érte el a lapon az utolsó sort . 1B1F D0 9F BNE $1AC0 ;akkor vissza új adatsor nyomtatásához . 1B21 A2 00 LDX #$00 ;X törlése . 1B23 BD F0 05 LDA $05F0,X ;ciklus: a rekordmutató ellenőrzése, hogy elérte-e az adatterület végét, . 1B26 C5 E3 CMP $E3 ;ha a hasáb rekordmutatójának felső bájtja . 1B28 90 0B BCC $1B35 ;még nem érte el az adatterület végét, akkor tovább a következő hasáb mutatójára . 1B2A F0 02 BEQ $1B2E ;ha megyegyezik, akkor tovább az alsó bájt ellenőrzéséhez . 1B2C B0 0F BCS $1B3D ;ha nagyobb, akkor kilépés, a példány nyomtatásának befejezése . 1B2E BD 33 03 LDA $0333,X ;ha a mutató alsó bájtja . 1B31 C5 E2 CMP $E2 ;elérte az adatterület végét, . 1B33 B0 08 BCS $1B3D ;akkor kilépés, a példány nyomtatásának befejezése . 1B35 E8 INX ;X növelése, tovább a következő hasáb mutatójához . 1B36 E4 E1 CPX $E1 ;ha a hasábszámláló még nem ért el az utolsóhoz . 1B38 D0 E9 BNE $1B23 ;vissza a mutatók elenőrzésére . 1B3A 4C 31 1A JMP $1A31 ;vissza a nyomtató rutin elejére, következő oldal nyomtatására . 1B3D 20 A7 13 JSR $13A7 ; küldése a nyomtatóra, új sor jön . 1B40 20 A4 13 JSR $13A4 ; küldése a nyomtatóra a maradék papíron lapdobás . 1B43 E6 DA INC $DA ;a nyomtatott példány számlálójának növelése . 1B45 A5 DA LDA $DA ;ha a számláló . 1B47 C5 D9 CMP $D9 ;elérte a korábban megadott példányszámot . 1B49 F0 03 BEQ $1B4E ;kilépés és a nyomtatás befejezése . 1B4B 4C 07 1A JMP $1A07 ;egyébként vissza új példány nyomtatásához . 1B4E 20 CC FF JSR $FFCC ;CLRCH, a kiviteli csatorna visszaállítása képernyőre . 1B51 A9 04 LDA #$04 ;a nyitott printercsatorna lezárása . 1B53 20 C3 FF JSR $FFC3 ;CLOSE . 1B56 4C EC 11 JMP $11EC ;vissza a főprogramba Alprogram: A program kimentése a korábban bevitt adatokkal együtt kazettára vagy lemezre . 1B59 20 49 11 JSR $1149 ;rekordok összeszámolása, $D2-$D3 mutató az adatterület végére mutat . 1B5C A5 D2 LDA $D2 ;$D2 bekérése . 1B5E 29 F8 AND #$F8 ;alsó 3 bit törlése . 1B60 18 CLC ;Carry törlése összeadáshoz . 1B61 69 08 ADC #$08 ;8 hozzáadása (a mentés mindig egy monitor listasorig történik) . 1B63 85 D2 STA $D2 ;a korrigált érték visszamentése $D2-re . 1B65 90 02 BCC $1B69 ;ha nem volt laphatár, ugrás . 1B67 E6 D3 INC $D3 ;laphatár esetén $D3 növelése 1-gyel . 1B69 A9 00 LDA #$00 ;a mentés előkészítése, mutatók feltöltése . 1B6B 85 9B STA $9B ;BASIC terület kezdete ($1000) kerül . 1B6D A9 10 LDA #$10 . 1B6F 85 9C STA $9C ;a mentés elejét tartalmazó $9B-$9C-be . 1B71 A5 D2 LDA $D2 ;$D2-$D3 a teljes adatterület végét mutató érték . 1B73 85 2D STA $2D ;kerül a program végét jelölő helyekre . 1B75 85 2F STA $2F ;$2D-$2E, $2F-$30, $31-$32 . 1B77 85 31 STA $31 ;biztonsági okból, . 1B79 A5 D3 LDA $D3 ;hogy a BASIC értelmező nehogy . 1B7B 85 2E STA $2E ;OUT OF MEMORY ERROR-ral leálljon . 1B7D 85 30 STA $30 . 1B7F 85 32 STA $32 . 1B81 A9 12 LDA #$12 ;A mentés almenüjének összeállítása . 1B83 A2 72 LDX #$72 ;"A PROGRAM KIMENTESE" szöveg . 1B85 A0 11 LDY #$11 ; . 1B87 20 6B 11 JSR $116B ;kiíratása a képernyőre, képernyőtörlés után . 1B8A 20 D8 14 JSR $14D8 ;"1. " szöveg kiíratása két sorral lejjebb . 1B8D 20 4F FF JSR $FF4F ;1. menüpont: TAPE >1B90 54 41 50 45 00 : TAPE. . 1B95 20 E0 14 JSR $14E0 ;"2. " szöveg kiíratása két sorral lejjebb . 1B98 20 4F FF JSR $FF4F 2. menüpont: DISK >1B9B 44 49 53 4B 0D 1D 1B 54 : DISK...T ;a második menüpont után ablak készítése, az esetleges rendszerüzenetek miatt >1BA3 00 : . . 1BA4 A9 80 LDA #$80 ;rendszerüzenetek engedélyezése . 1BA6 85 9A STA $9A . 1BA8 20 20 10 JSR $1020 ;billentyűleütés olvasása . 1BAB B0 2A BCS $1BD7 ;ha ESC volt, akkor visszatérés a főprogramba . 1BAD C9 31 CMP #$31 ;ha "1" volt . 1BAF F0 29 BEQ $1BDA ;akkor mentés kazettára, urás tovább . 1BB1 C9 32 CMP #$32 ;ha nem "2" volt . 1BB3 D0 F3 BNE $1BA8 ;akkor vissza, új billentyűre várva Alprogram: program kimentése lemezre . 1BB5 20 92 14 JSR $1492 ;a program nevében a szám növelése, hogy a lemezen ne legyen felülírási hiba . 1BB8 A9 01 LDA #$01 ;Mentéshez előkészítése . 1BBA A2 08 LDX #$08 ;save-hez csatorna beállítása (1 file, 8-as egységre, . 1BBC A0 00 LDY #$00 ;tartomány jelzése: 0, normál BASIC memória terület mentése a $2D-$2E-ig . 1BBE 84 79 STY $79 ;$DS, Disk státusz törlése . 1BC0 20 BA FF JSR $FFBA ;SETLFS . 1BC3 A9 10 LDA #$10 ;program nevének megadása a save-hez . 1BC5 A2 AC LDX #$AC ;a név helye $1DAC-n, és 16 karakter hosszú . 1BC7 A0 1D LDY #$1D . 1BC9 20 BD FF JSR $FFBD ;SETNAM . 1BCC A9 2B LDA #$2B ;lemezre mentés kezdete a BASIC terület kezdete . 1BCE A6 2D LDA $2D ;a mentés vége a korábban kiszámolt programvég . 1BD0 A4 2E LDY $2E ;az adatterület végén . 1BD2 20 D8 FF JSR $FFD8 ;SAVE, program kimentése . 1BD5 90 3E BCS $1C15 ;Ha nem volt hiba, ugrás . 1BD7 4C EC 11 JMP $11EC ;visszatérés a főprogramba Alprogram: program kimentése kazettára . 1BDA 20 92 14 JSR $1492 ;a program nevében a szám megnövelése, így a kazettán egymás után növekvő szorszámúak . 1BDD A9 52 LDA #$52 ;a program mentése HER-Turbóval történik . 1BDF 8D 30 03 STA $0330 ;save cím átírása, a $0331-$0331-re . 1BE2 A9 1C LDA #$1C ;a turbó program kezdete: $1C52 . 1BE4 8D 31 03 STA $0331 . 1BE7 A9 01 LDA #$01 ;save-hez csatorna nyitása (1 file kazettára) . 1BE9 AA TAX ;eszköz:1, adatirány:1 (írás), tartomány:1 (külön megadva) . 1BEA A8 TAY ;1: megadott terület mentése . 1BEB 20 BA FF JSR $FFBA ;SETLFS . 1BEE A9 9B LDA #$9B ;mentési memóriatartomány beállítása . 1BF0 A6 D2 LDX $D2 ;$B2-$B3-ra $9B-$9C-ben a kezdő cím ($1000), . 1BF2 A4 D3 LDY $D3 ;$9D-$9E-re a mentés végének címe $D2-$D3 . 1BF4 20 D8 FF JSR $FFD8 ;SAVESP; ugrás a HER-Turbóra: ($0330)->$1C52, program mentése turbóval . 1BF7 B0 DE BCC $1BD7 ;visszatérés a főprogramba . 1BF9 AA TAX ;hibakód X-be . 1BFA CA DEX ;csökkentés 1-gyel . 1BFB 8A TXA ;tényleges hibakód A-ba . 1BFC 20 53 86 JSR $8653 ;hibaszöveg megkeresése . 1BFF 20 A7 13 JSR $13A7 ; kiküldése képernyőre . 1C02 A0 00 LDY #$00 . 1C04 B1 24 LDA ($24),Y ;ciklus: hibaszöveg olvasása . 1C06 48 PHA ;beolvasott karakter mentése . 1C07 29 7F AND #$7F ;szöveg végét jelző felső bit törlése . 1C09 20 D2 FF JSR $FFD2 ;kiküldése képernyőre . 1C0C C8 INY ;index növelése . 1C0D 68 PLA ;karakter vissza A-ba . 1C0E 10 F4 BPL $1C04 ;ha még nem ért a szöveg végére vissza új karakter olvasásához . 1C10 20 A7 13 JSR $13A7 ; kiküldése képernyőre . 1C13 D0 3A BNE $1C4F ;ugrás tovább a "NYOMJ LE EGY BILLENTYUT!" kiírására . 1C15 A2 08 LDX #$08 ;disk státusz lekérdezése, meghajtó azonosítója . 1C17 A9 00 LDA #$00 ;olvasás jelzése . 1C19 A0 6F LDY #$6F ;státusz 15-ös csatorna . 1C1B 20 BA FF JSR $FFBA ;SETLFS . 1C1E 20 BD FF JSR $FFBD ;SETNAM . 1C21 20 C0 FF JSR $FFC0 ;OPEN . 1C24 A2 00 LDX #$00 . 1C26 20 C6 FF JSR $FFC6 ;CHKIN . 1C29 B0 CE BCS $1BF9 ;hiba esetén ugrás . 1C2B A0 00 LDY #$00 . 1C2D 20 CF FF JSR $FFCF ;ciklus: státus lehívása a meghajtóból, CHRIN . 1C30 99 00 06 STA $0600,Y ;szöveg mentése $0600-ra . 1C33 C9 0D CMP #$0D ;amennyiben a beolvasott kód volt . 1C35 F0 03 BEQ $1BFF ;ugrás . 1C37 C8 INY . 1C38 D0 F3 BNE $1BF2 ;ugrás a következő karakter olvasásához . 1C3A C8 INY ;Y növelése . 1C3B A9 00 LDA #$00 ;a karakterlánc végére végjel mentése . 1C3D 99 00 06 STA $0600,Y . 1C40 20 CC FF JSR $FFCC ;CLRCH . 1C43 A9 06 LDA #$06 ;kezdőcím $0600 . 1C45 A2 00 LDX #$00 ;Y-ban a szöveg hossza . 1C47 20 7D 11 JSR $117D ;státusz szöveg kiküldése képernyőre . 1C4A 8A TXA ;A-ba $00 . 1C4B 38 SEC . 1C4C 20 C3 FF JSR $FFC3 ;CLOSE . 1C4F 4C 67 15 JMP $1567 ;"NYOMJ LE EGY BILLENTYUT!" kiíratása, és visszatérés a főprogramba Alprogram: HER-Turbó rutin a kazettára mentéshez . 1C52 A0 32 LDY #$32 ;50 adat átmásolása . 1C54 B9 78 1D LDA $1D78,Y ;ciklus: $1D35-$1D66 rutin lemásolása . 1C57 99 FF 06 STA $06FF,Y ;$0700-$0731-re (gyakorlatilag a BASIC verem elejére) . 1C5A 88 DEY . 1C5B D0 F7 BNE $1C54 . 1C5D 20 19 E3 JSR $E319 ;"PRESS PLAY & RECORD ON TAPE" kiírása . 1C60 A9 48 LDA #$48 ;CHROUT vektor a $0348-ra mutat . 1C62 8D 24 03 STA $0324 . 1C65 A9 03 LDA #$03 . 1C67 8D 25 03 STA $0325 . 1C6A A9 A4 LDA #$A4 ;SAVE vektor újra a $F1A4-re mutat . 1C6C 8D 30 03 STA $0330 . 1C6F A9 F1 LDA #$F1 . 1C71 8D 31 03 STA $0331 . 1C74 A9 01 LDA #$01 ;mentéshez open csatorna előkészítése: 1,1,1 . 1C76 AA TAX . 1C77 A8 TAY . 1C78 20 BA FF JSR $FFBA ;SETLFS . 1C7B A9 BC LDA #$BC ;program nevének megadása a save-hez . 1C7D A2 AC LDX #$AC ;$1DAC-nál kezdődik, . 1C7F A0 1D LDY #$1D ;amelyben benne van utána a gyorstöltő rutin is . 1C81 20 BD FF JSR $FFBD ;SETNAM . 1C84 A9 00 LDA #$00 ;$9A-ba 0, üzenetek letiltása . 1C86 85 9A STA $9A . 1C88 A9 24 LDA #$24 ;$22-$23-ra $0324 a mentési tartomány kezdete . 1C8A 85 22 STA $22 . 1C8C A9 03 LDA #$03 . 1C8E 85 23 STA $23 . 1C90 A9 22 LDA #$22 ;a mentési tartomány: $0324-$0325 . 1C92 A0 03 LDY #$03 ;ekkor a CHROUT vektor $0348-ra mutat . 1C94 A2 26 LDX #$26 ;a névvel csak a CHROUT vektort menti a program az elején normál sebességgel . 1C96 20 D8 FF JSR $FFD8 ;SAVESP, ugrás $F1A4 normál save-re, filenévben a töltő rutin kiküldése szalagra . 1C99 A9 4B LDA #$4B ;$0324-$0325-en a CHROUT vektor visszaállítása . 1C9B 8D 24 03 STA $0324 ;$0324-$0325 vektor ismét a standard CHROUT $EC4B-re mutat . 1C9E A9 EC LDA #$EC . 1CA0 8D 25 03 STA $0325 . 1CA3 A9 00 LDA #$00 ;A,X,Y törlése . 1CA5 AA TAX ; . 1CA6 A8 TAY . 1CA7 85 B2 STA $B2 ;$B2-$B3-ra $0700 . 1CA9 A9 07 LDA #$07 . 1CAB 85 B3 STA $B3 . 1CAD 85 9E STA $9E ;$9D-$9E-re $0733 . 1CAF A9 33 LDA #$33 . 1CB1 85 9D STA $9D . 1CB3 20 CC 1C JSR $1CCC ;mentés turbóval . 1CB6 A9 80 LDA #$80 . 1CB8 85 9A STA $9A ;üzenetek bekapcsolása . 1CBA A2 00 LDX #$00 . 1CBC A0 00 LDY #$00 . 1CBE 84 B2 STY $B2 ;a teljes program mentési területe, kezdőcím $B2-$B3-ra ($1000) . 1CC0 A9 10 LDA #$10 . 1CC2 85 B3 STA $B3 . 1CC4 A5 2D LDA $2D ;végcím $2D-$2E-ről $9D-$9E-re . 1CC6 85 9D STA $9D . 1CC8 A5 2E LDA $2E . 1CCA 85 9E STA $9E . 1CCC 20 13 1D JSR $1D13 ;terület mentése turbóval, turbó inicializálás . 1CCF A5 B2 LDA $B2 ;kezdőcím alsó bájt . 1CD1 20 41 1D JSR $1D41 ;kiküldése kazettára . 1CD4 A5 B3 LDA $B3 ;kezdőcím felső bájt . 1CD6 20 41 1D JSR $1D41 ;kiküldése kazettára . 1CD9 A5 9D LDA $9D ;program végcímének alsó bájtja . 1CDB 20 41 1D JSR $1D41 ;kiküldése kazettára . 1CDE A5 9E LDA $9E ;program végcímének felső bájtja . 1CE0 20 41 1D JSR $1D41 ;kiküldése kazettára . 1CE3 84 B4 STY $B4 ;ellenőrzőkód, $B4 törlése . 1CE5 A4 B2 LDY $B2 ;mutató alsó bájtja Y-ba . 1CE7 A9 00 LDA #$00 ;$B2-re 0, lapok mentéséhez . 1CE9 85 B2 STA $B2 . 1CEB B1 B2 LDA ($B2),Y ;ciklus: tár mentése, bájt olvasása a RAM-ból . 1CED 20 41 1D JSR $1D41 ;bájt kiküldése kazettára . 1CF0 C8 INY ;tovább a következő bájtra . 1CF1 D0 02 BNE $1CF5 ;ha még nem érte a lap végét, ugrás tovább a következőre . 1CF3 E6 B3 INC $B3 ;mutató felső bájtjának növelése . 1CF5 C4 9D CPY $9D ;összehaasonlítás a végcím alsó bájtjával . 1CF7 A5 B3 LDA $B3 ;mutató felső bájtjából . 1CF9 E5 9E SBC $9E ;a végcím felső bájtjának kivonása . 1CFB 90 EE BCC $1CEB ;ha még nem végzett a teljes program kimentésével, vissza a következőre . 1CFD A5 B4 LDA $B4 ;ellenőrzőkód betöltése . 1CFF 20 41 1D JSR $1D41 ;bájt kiküldése kazettára . 1D02 20 55 1D JSR $1D55 ;plusz 1 bit kiküldése . 1D05 A9 1B LDA #$1B ;képernyő . 1D07 8D 06 FF STA $FF06 ;visszakapcsolása . 1D0A 8D 3E FF STA $FF3E ;váltás ROM-ra . 1D0D A9 08 LDA #$08 ;kazettamotor . 1D0F 85 01 STA $01 ;leállítása . 1D11 58 CLI ;megszakítás engedélyezése . 1D12 60 RTS ;kilépés a turbóból, visszatérés Szubrutin: HER-Turbó mentő rutinja . 1D13 78 SEI ;turbó inic, megszakítás törlése . 1D14 8D 3F FF STA $FF3F ;váltás RAM-ra . 1D17 A9 00 LDA #$00 ;kazetta motor bekapcsolása . 1D19 85 01 STA $01 . 1D1B A9 0B LDA #$0B ;képernyő kikapcsolása . 1D1D 8D 06 FF STA $FF06 . 1D20 CA DEX ;ciklus: késleltetés, X pörgetése . 1D21 D0 FD BNE $1D20 . 1D23 88 DEY ;Y pörgetése . 1D24 D0 FA BNE $1D20 ;ha még nem végzett, vissza a pörgetésre . 1D26 A9 A0 LDA #$A0 ;Timer2 . 1D28 8D 02 FF STA $FF02 . 1D2B A9 00 LDA #$00 . 1D2D 8D 03 FF STA $FF03 ;beállítása . 1D30 A9 10 LDA #$10 ;Timer2 . 1D32 8D 09 FF STA $FF09 ;IRQ törlése . 1D35 A0 40 LDY #$40 ;a bevezető szinkronizációs rész hossza 64 karakter . 1D37 A9 10 LDA #$10 ;szinkronizáló kód értéke A-ba . 1D39 20 41 1D JSR $1D41 ;ciklus: bájt kiküldése kazettára . 1D3C 88 DEY ;számláló csökkentése . 1D3D D0 F8 BNE $1D37 ;ha még nem végzett, vissza a többi kiküldésére . 1D3F A9 5A LDA #$5A ;szinkronizáció utáni ellenőrző kezdő kód . 1D41 85 AB STA $AB ;egy bájt kiküldése kazettára, mentése $AB-ben . 1D43 45 B4 EOR $B4 ;az ellenőrzőkóddal kizáró vagy . 1D45 85 B4 STA $B4 ;és elmentése . 1D47 A9 08 LDA #$08 ;#$08 $AC-be . 1D49 85 AC STA $AC . 1D4B 26 AB ROL $AB ;a küldendő bájt shiftelése . 1D4D 20 55 1D JSR $1D55 ;bit kiküldése . 1D50 C6 AC DEC $AC ;számláló csökkentése . 1D52 D0 F7 BNE $1D4B ;ha még nem végzett mind a 8 shifteléssel, akkor ugrás vissza . 1D54 60 RTS . 1D55 A2 6C LDX #$6C ;egy bit kiküldése, Timer2 értéke: X-be #$6C . 1D57 90 02 BCC $1D5B ;ha a bit 0 volt, ugrás . 1D59 A2 FF LDX #$FF ;X-be #$FF . 1D5B 20 5E 1D JSR $1D5E ;bit kiküldése vonalra . 1D5E A9 10 LDA #$10 ;Timer2 . 1D60 2C 09 FF BIT $FF09 ;IRQ figyelése . 1D63 F0 FB BEQ $1D60 ;ha a számláló még nem futott le, várás . 1D65 48 PHA ;A mentése . 1D66 A9 00 LDA #$00 ;A törlése . 1D68 8E 02 FF STX $FF02 ;Timer2 beállítása: 0 esetén: $006C . 1D6B 8D 03 FF STA $FF03 ;1 esetén: $00FF . 1D6E 68 PLA ;A visszatöltése . 1D6F 8D 09 FF STA $FF09 ;Timer2 újraindítása . 1D72 A5 01 LDA $01 ;kazetta vonal olvasása . 1D74 49 02 EOR #$02 ;a tape write vonal . 1D76 85 01 STA $01 ;jelállapotváltása . 1D78 60 RTS Her-Turbó töltés utáni ellenőrző rutinja a $0700-$0732-re kerül . 1D79 8D 3F FF STA $FF3F ;. 0700 8D 3F FF STA $FF3F ;váltás RAM-ra . 1D7C EE 19 FF INC $FF19 ;. 0703 EE 19 FF INC $FF19 ;keret színének növelése . 1D7F 18 CLC ;. 0706 18 CLC ;Carry törlése . 1D80 20 4F 03 JSR $034F ;. 0707 20 4F 03 JSR $034F ;adatok töltése kazettáról . 1D83 8D 3E FF STA $FF3E ;. 070A 8D 3E FF STA $FF3E ;váltás ROM-ra . 1D86 A9 00 LDA #$00 ;. 070D A9 00 LDA #$00 ;fekete szín . 1D88 8D 3B 05 STA $053B ;. 070F 8D 3B 05 STA $053B ;a karakterek színe . 1D8B 58 CLI ;. 0712 58 CLI ;megszakítás engedélyezése . 1D8C 20 8A FF JSR $FF8A ;. 0713 20 8A FF JSR $FF8A ;RESTORE . 1D8F 20 84 FF JSR $FF84 ;. 0716 20 84 FF JSR $FF84 ;IOINIT, kazettamotor kikapcsolása . 1D92 A5 9E LDA $9E ;. 0719 A5 9E LDA $9E ;ha az ellenőrzőkód . 1D94 C5 9D CMP $9D ;. 071B C5 9D CMP $9D ;megegyezik a $9D-vel . 1D96 F0 05 BEQ $1D9D ;. 071D F0 05 BEQ $0724 ;akkor a betöltés rendben volt, tovább . 1D98 A2 1D LDX #$1D ;. 071F A2 1D LDX #$1D ;?LOAD error . 1D9A 4C 83 86 JMP $8683 ;. 0721 4C 83 86 JMP $8683 ;kiíratása, és visszatérés BASIC-be . 1D9D A9 FF LDA #$FF ;. 0724 A9 FF LDA #$FF ;kurzor . 1D9F 8D 0C FF STA $FF0C ;. 0726 8D 0C FF STA $FF0C ;képernyőn . 1DA2 8D 0D FF STA $FF0D ;. 0729 8D 0D FF STA $FF0D ;kívülre . 1DA5 20 9D 8A JSR $8A9D ;. 072C 20 9D 8A JSR $8A9D ;BASIC CLR, inic . 1DA8 4C 03 87 JMP $8703 ;. 072F 4C 03 87 JMP $8703 ;visszatérés BASIC-be . 1DAB 00 BRK Program neve mentéshez, az utolsó két számjegy minden mentéskor növekszik egyet >1DAC 50 52 4F 47 52 41 4D 20 : PROGRAM >1DB4 4E 59 2E 54 2E 20 30 30 : NY.T. 00 >1DBC 20 : ; üres karakter a programnév és a töltő rutin között Her-turbó gyorstöltő programja . 1DBD AD 19 FF LDA $FF19 ;. 0348 AD 19 FF LDA $FF19 ;turbó belépési pontja, keret színének mentése . 1DC0 85 22 STA $22 ;. 034B 85 22 STA $22 ;első körben a $700-$731 közti rutin betöltése turbóval . 1DC2 38 SEC ;. 034D 38 SEC ;Carry beállítása . 1DC3 78 SEI ;. 034E 78 SEI ;megszakítás tiltása . 1DC4 08 PHP ;. 034F 08 PHP ;státusz mentése . 1DC5 20 93 03 JSR $0393 ;. 0350 20 93 03 JSR $0393 ;inicializálás, szalag szinkronizációs bevezető olvasása . 1DC8 20 B8 03 JSR $03B8 ;. 0353 20 B8 03 JSR $03B8 ;kezdőcím alsó bájtjának betöltése a TAPE vonalról . 1DCB A8 TAY ;. 0356 A8 TAY ;mentése Y-ba . 1DCC A9 00 LDA #$00 ;. 0357 A9 00 LDA #$00 ;A törlése . 1DCE 85 B2 STA $B2 ;. 0359 85 B2 STA $B2 ;$B2-re #$00 . 1DD0 20 B8 03 JSR $03B8 ;. 035B 20 B8 03 JSR $03B8 ;kezdőcím felső bájtjának betöltése . 1DD3 85 B3 STA $B3 ;. 035E 85 B3 STA $B3 ;mentése $B3-ra . 1DD5 20 B8 03 JSR $03B8 ;. 0360 20 B8 03 JSR $03B8 ;végcím alsó bájtjának betöltése . 1DD8 85 2D STA $2D ;. 0363 85 2D STA $2D ;mentés $2D-re, a fájl végének alsó bájtja . 1DDA 20 B8 03 JSR $03B8 ;. 0365 20 B8 03 JSR $03B8 ;végcím felső bájtjának betöltése . 1DDD 85 2E STA $2E ;. 0368 85 2E STA $2E ;mentés $2E-re, a fájl végének felső bájtja . 1DDF 20 B8 03 JSR $03B8 ;. 036A 20 B8 03 JSR $03B8 ;bájt betöltése . 1DE2 91 B2 STA ($B2),Y ;. 036D 91 B2 STA ($B2),Y ;mentés a RAM-ba . 1DE4 45 9E EOR $9E ;. 036F 45 9E EOR $9E ;ellenőrzőkód, a beolvasott bájt kizáró vagy művelete a $9E-vel . 1DE6 85 9E STA $9E ;. 0371 85 9E STA $9E ;és visszamentése . 1DE8 C8 INY ;. 0373 C8 INY ;tovább a következő bájtra . 1DE9 D0 05 BNE $1DF0 ;. 0374 D0 05 BNE $037B ;ha még nem ér a lap végére, ugrás tovább . 1DEB E6 B3 INC $B3 ;. 0376 E6 B3 INC $B3 ;mutató felső bájtjának növelése . 1DED EE 19 FF INC $FF19 ;. 0378 EE 19 FF INC $FF19 ;keret színének váltása . 1DF0 C4 2D CPY $2D ;. 037B C4 2D CPY $2D ;ha a mutató alsó bájtja elérte . 1DF2 A5 B3 LDA $B3 ;. 037D A5 B3 LDA $B3 ;a végcím alsó bájtját, a Carry hozzáadása a felső bájthoz . 1DF4 E5 2E SBC $2E ;. 037F E5 2E SBC $2E ;még nem érte el a végcímet . 1DF6 90 E7 BCC $1DDF ;. 0381 90 E7 BCC $036A ;akkor vissza újabb bájt betöltésére . 1DF8 20 B8 03 JSR $03B8 ;. 0383 20 B8 03 JSR $03B8 ;ellenőrző kód betöltése . 1DFB 85 9D STA $9D ;. 0386 85 9D STA $9D ;mentése $9D-re . 1DFD A9 08 LDA #$08 ;. 0388 A9 08 LDA #$08 ;a Tape motorjának . 1DFF 85 01 STA $01 ;. 038A 85 01 STA $01 ;kikapcsolása . 1E01 28 PLP ;. 038C 28 PLP ;státusz visszatöltése veremből . 1E02 B0 01 BCS $1E05 ;. 038D B0 01 BCS $0390 ;ha betöltötte a HER $700-as részét, ugrás a rutinra . 1E04 60 RTS ;. 038F 60 RTS ;egyébként visszatérés . 1E05 4C 00 07 JMP $0700 ;. 0390 4C 00 07 JMP $0700 ;turbóval történő munka befezezve, ugrás vissza . 1E08 A9 00 LDA #$00 ;. 0393 A9 00 LDA #$00 ;szalag szinkronizációs bevezető olvasása, kazetta motor . 1E0A 85 01 STA $01 ;. 0395 85 01 STA $01 ;bekapcsolása . 1E0C CA DEX ;. 0397 CA DEX ;ciklus: késleltetés, X pörgetése . 1E0D D0 FD BNE $1E0C ;. 0398 D0 FD BNE $0397 ;256-ot leszámolt . 1E0F 88 DEY ;. 039A 88 DEY ;Y pörgetése . 1E10 D0 FA BNE $1E0C ;. 039B D0 FA BNE $0397 ;ha nem végzett, ugrás vissza . 1E12 84 9E STY $9E ;. 039D 84 9E STY $9E ;Ellenőrzőkód törlése, $9E-re #$00 . 1E14 A2 00 LDX #$00 ;. 039F A2 00 LDX #$00 ;X törlése . 1E16 20 C6 03 JSR $03C6 ;. 03A1 20 C6 03 JSR $03C6 ;1 bit beolvasása olvasása a tape read vonalról . 1E19 26 AC ROL $AC ;. 03A4 26 AC ROL $AC ;olvasott bit betolása $AC-be . 1E1B A5 AC LDA $AC ;. 03A6 A5 AC LDA $AC ;$AC betöltése . 1E1D C9 10 CMP #$10 ;. 03A8 C9 10 CMP #$10 ;ha nem #$10 . 1E1F D0 F5 BNE $1E16 ;. 03AA D0 F5 BNE $03A1 ;újabb bit beolvasása . 1E21 20 B8 03 JSR $03B8 ;. 03AC 20 B8 03 JSR $03B8 ;egy byte beolvasása a Tape read vonalról . 1E24 C9 10 CMP #$10 ;. 03AF C9 10 CMP #$10 ;ha ez #$10 . 1E26 F0 F9 BEQ $1E21 ;. 03B1 F0 F9 BEQ $03AC ;akkor vissza újabb bájt olvasására . 1E28 C9 5A CMP #$5A ;. 03B3 C9 5A CMP #$5A ;ha ez nem az ellenőrző kód #$5A . 1E2A D0 EA BNE $1E16 ;. 03B5 D0 EA BNE $03A1 ;akkor vissza, a bájt bitjeinek tovább shifteléséhez . 1E2C 60 RTS ;. 03B7 60 RTS ;vonal szinkronizálása kész, vissza . 1E2D A9 01 LDA #$01 ;. 03B8 A9 01 LDA #$01 ;8 bit olvasása a tape read vonalon . 1E2F 85 AC STA $AC ;. 03BA 85 AC STA $AC ;$AC bit értékének beállítása #$01-re . 1E31 20 C6 03 JSR $03C6 ;. 03BC 20 C6 03 JSR $03C6 ;tape read, egy bit betöltése . 1E34 26 AC ROL $AC ;. 03BF 26 AC ROL $AC ;ha még nem végzett a mind a 8 bit beolvasásával . 1E36 90 F9 BCC $1E31 ;. 03C1 90 F9 BCC $03BC ;vissza a vonal olvasására . 1E38 A5 AC LDA $AC ;. 03C3 A5 AC LDA $AC ;$AC betöltése, beolvasott byte $AC-ben . 1E3A 60 RTS ;. 03C5 60 RTS . 1E3B A9 10 LDA #$10 ;. 03C6 A9 10 LDA #$10 ;tape read vonal figyelése . 1E3D 24 01 BIT $01 ;. 03C8 24 01 BIT $01 ;ha a vonal magas szinten van . 1E3F D0 FC BNE $1E3D ;. 03CA D0 FC BNE $03C8 ;ugrás vissza, várás a vonal 0 szintre ugrására . 1E41 24 01 BIT $01 ;. 03CC 24 01 BIT $01 ;read vonal újbóli figyelése . 1E43 F0 FC BEQ $1E41 ;. 03CE F0 FC BEQ $03CC ;ha nem volt jelváltás, várás, ugrás vissza . 1E45 2D 09 FF AND $FF09 ;. 03D0 2D 09 FF AND $FF09 ;ha a jelváltás időzítésen belül történik meg, akkor 0, ha azon túl, akkor 1 a beolvasott bit értéke . 1E48 48 PHA ;. 03D3 48 PHA ;a beolvasott bit mentése verembe . 1E49 A9 01 LDA #$01 ;. 03D4 A9 01 LDA #$01 ;Timer2 időzítő értékének újbóli beállítása . 1E4B A2 78 LDX #$78 ;. 03D6 A2 78 LDX #$78 ;kb. 0,425 ms időzítés . 1E4D 8E 02 FF STX $FF02 ;. 03D8 8E 02 FF STX $FF02 ;Timer2 időzítésének . 1E50 8D 03 FF STA $FF03 ;. 03DB 8D 03 FF STA $FF03 ;újraindítása . 1E53 A9 10 LDA #$10 ;. 03DE A9 10 LDA #$10 ;Timer2 . 1E55 8D 09 FF STA $FF09 ;. 03E0 8D 09 FF STA $FF09 ;Irq törlése . 1E58 AD 19 FF LDA $FF19 ;. 03E3 AD 19 FF LDA $FF19 ;a keret színének beolvasása . 1E5B 18 CLC ;. 03E6 18 CLC ;Carry törlése összeadáshoz . 1E5C 69 10 ADC #$10 ;. 03E7 69 10 ADC #$10 ;szín árnyalatának váltása eggyel világosabbra . 1E5E 8D 19 FF STA $FF19 ;. 03E9 8D 19 FF STA $FF19 ;új színkód mentése keretre . 1E61 68 PLA ;. 03EC 68 PLA ;akku visszatöltése, a 4. bit hordozza az információt . 1E62 0A ASL ;. 03ED 0A ASL ;a beolvasott bit . 1E63 0A ASL ;. 03EE 0A ASL ;kitolása . 1E64 0A ASL ;. 03EF 0A ASL ; . 1E65 0A ASL ;. 03F0 0A ASL ;a Carrybe . 1E66 60 RTS ;. 03F1 60 RTS Adatterület: Nyomtatáshoz, adatbekéréshez inicializáló szövegek >1E67 53 5A 45 52 49 4E 54 48 : SZERINTH >1E6F 4F 53 53 5A 41 3A 50 45 : OSSZA:PE >1E77 4C 44 41 4E 59 3A 4F 53 : LDANY:OS >1E7F 5A 4C 4F 50 53 5A 41 4D : ZLOPSZAM >1E87 20 41 20 4C 41 50 4F 4E : A LAPON >1E8F 3A : : Adatsor: nyomtatáshoz, adatok mennyisége utáni szöveg, dátum kiíratása (a program ezt kéri be induláskor) >1E90 20 44 42 20 50 52 4F 47 : DB PROG >1E98 52 41 4D 20 20 20 20 20 : RAM >1EA0 20 20 20 0F 44 41 54 55 : .DATU >1EA8 4D 3A 20 32 30 32 30 2E : M: 2020. >1EB0 31 31 2E 31 35 2E 0D 0D : 11.15... >1EB8 1B 4C 1B 0F 00 00 00 00 : .L...... Adatsor: Nyomtatáshoz a papíron lévő fejlécadatok >1EC0 0E 20 20 20 20 20 20 20 : . ;a fejlécadatban lévő vezérlőkódok >1EC8 20 50 52 4F 47 52 41 4D : PROGRAM ;a Citizen 120D típusú nyomtatóhoz >1ED0 4C 49 53 54 41 20 43 3D : LISTA C= ;lettek beállítva >1ED8 50 4C 55 53 2F 34 2D 52 : PLUS/4-R >1EE0 45 1B 46 0F 0D 0D 41 20 : E.F...A >1EE8 50 52 4F 47 52 41 4D 4C : PROGRAML >1EF0 49 53 54 41 20 54 55 4C : ISTA TUL >1EF8 41 4A 44 4F 4E 4F 53 41 : AJDONOSA >1F00 20 3A 0D 0D 1B 47 1B 45 : :...G.E >1F08 54 4F 54 48 20 47 41 42 : TOTH GAB >1F10 4F 52 0D 53 5A 4F 4D 42 : OR.SZOMB >1F18 41 54 48 45 4C 59 0D 56 : ATHELY.V >1F20 41 43 49 20 4D 49 48 41 : ACI MIHA >1F28 4C 59 20 55 54 43 41 20 : LY UTCA >1F30 33 32 2E 20 46 53 5A 2E : 32. FSZ. >1F38 2F 33 2E 0D 20 20 39 37 : /3.. 97 >1F40 30 30 0E 20 20 20 20 20 : 00. >1F48 20 20 20 20 20 20 20 20 : >1F50 20 20 20 20 20 20 20 31 : 1 >1F58 44 20 3D 20 36 36 34 20 : D = 664 >1F60 42 4C 4F 43 4B 0D 0D 0E : BLOCK... >1F68 00 00 00 00 00 00 00 00 : ........ >1F70 00 00 00 00 00 00 00 00 : ........