+4 Programnyilvántartás V2.7 (2018.12.20) 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. Az 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 felvitele - 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 - Listanyomtatás automatikusan több hasábon (a papíron fejlécadatok, minden lista tetején a mezők megnevezése) - Nyomtatásnál a papír paraméterei megadhatók (karakterszélesség, sornagyság, példányszám) - Program mentése a teljes adatbázissal együtt lemezre vagy kazettára turbósan - Teljes adbázis törlésének lehetősége - A program összes beviteli eseményénél lehetőség van az Esc általi azonnali kilépésre 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 4448 (G 1160) >1000 00 1C 10 CB 07 9E 34 34 :...K..44 >1008 34 38 20 1B 4A 20 20 4D :48 .J M >1010 43 47 2D 53 4F 46 54 57 :CG-SOFTW >1018 41 52 45 00 00 00 00 00 :ARE..... 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 68 PLA ;elmentett X,Y regiszterek visszatöltése . 102C AA TAX ;a veremből . 102D 68 PLA . 102E A8 TAY . 102F A5 02 LDA $02 ;beolvasott karakter kódja az akkumulátorban . 1031 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 . 1032 A8 TAY ;a beviteli mező hossza Y-ba . 1033 88 DEY ;a tényleges hossz 1-gyel kevesebb a pozícionálás miatt a képernyőn . 1034 A5 CA LDA $CA ;kurzor aktuális oszlopa a képernyőn . 1036 18 CLC ;a beviteli mező a korábban kiírt szöveg után 1 karakterhely után kezdődik, . 1037 69 01 ADC #$01 ;ezért növelés 1-gyel . 1039 65 C8 ADC $C8 ;a képernyő sorcímének hozzáadása . 103B 85 03 STA $03 ;a beviteli mező kezdőcímének mentése $03-$04-be . 103D 8D 0D FF STA $FF0D ;kurzor ráállítása mező elejére a TED-ben . 1040 A5 C9 LDA $C9 ;képernyősor felső címbájtja . 1042 69 00 ADC #$00 ;átvitel hozzáadása . 1044 85 04 STA $04 ;mentése $04-re . 1046 8D 0C FF STA $FF0C ;kurzor felsőbájtja a TED-ben . 1049 84 05 STY $05 ;beviteli mező hosszának mentése $05-be . 104B A9 20 LDA #$20 ;ciklus: a beviteli mező ideiglenes pufferének törlése szóközökkel . 104D 99 00 06 STA $0600,Y ;az átmeneti tároló helye $600-as címnél van . 1050 88 DEY ;tovább az előző helyre . 1051 C0 FF CPY #$FF ;ha még nem végzett a teljes puffer inicializálásával . 1053 D0 F8 BNE $104D ;akkor vissza az eggyel megelőző hely törlésére . 1055 C8 INY ;Y törlése . 1056 EA NOP . 1057 20 20 10 JSR $1020 ;egy karakter beolvasása . 105A C9 0D CMP #$0D ;ha a leütött billentyű nem RETURN volt . 105C D0 0A BNE $1068 ;ugrás tovább . 105E 18 CLC ;egyébként a Carry törlése, jelzi, hogy érvényes bevitel történt . 105F A9 FF LDA #$FF ;a kurzor . 1061 8D 0C FF STA $FF0C ;képernyőn kívülre helyezése . 1064 8D 0D FF STA $FF0D . 1067 60 RTS ;visszatérés a rutinból . 1068 C9 1B CMP #$1B ;ha nem ESC volt . 106A D0 03 BNE $106F ;ugrás tovább . 106C 38 SEC ;egyébként Carry beállítása 1-be, Esc jelzése . 106D B0 F0 BCS $105F ;kurzor képernyőn kívülre és visszatérés a rutinból . 106F C9 14 CMP #$14 ;ha nem DELETE volt . 1071 D0 28 BNE $109B ;ugrás tovább . 1073 C0 00 CPY #$00 ;ha az aktuális pozíció az első karakteren van . 1075 F0 E0 BEQ $1057 ;nincs törlés, ugrás új karakter beolvasására . 1077 84 02 STY $02 ;aktuális pozíció mentése $02-re . 1079 E6 05 INC $05 ;a hossz ideiglenes megnövelése 1-gyel . 107B B9 00 06 LDA $0600,Y ;ciklus: Delete, szöveg olvasása . 107E 99 FF 05 STA $05FF,Y ;mentés egy pozícióval előre . 1081 B1 03 LDA ($03),Y ;szöveg elhúzása a képernyőn is . 1083 88 DEY ;pozíció a képernyőn eggyel megelőző helyre . 1084 91 03 STA ($03),Y ;mentés a képernyőn eggyel előző helyre . 1086 C8 INY ;ugrás a következő . 1087 C8 INY ;karakterre . 1088 C4 05 CPY $05 ;ha a ciklus nincs még a szöveg végén, . 108A D0 EF BNE $107B ;akkor vissza következő karakter elhúzásához . 108C C6 05 DEC $05 ;a korábbi ideiglenes növelés visszavétele . 108E 88 DEY ;pozíció a beviteli mező végére . 108F A9 20 LDA #$20 ;a mező utolsó helyén a korábban bevitt karakter . 1091 91 03 STA ($03),Y ;törlése a képernyőn . 1093 99 00 06 STA $0600,Y ;és az átmeneti tárolóban is . 1096 A4 02 LDY $02 ;aktuális pozíció visszatöltése . 1098 18 CLC ;Carry törlése . 1099 90 08 BCC $10A3 ;ugrás a kurzor képernyőn állításához . 109B C9 9D CMP #$9D ;ha nem kurzor balra volt . 109D D0 16 BNE $10B5 ;ugrás tovább . 109F C0 00 CPY #$00 ;ha a kurzor a beviteli mező elején van . 10A1 F0 B4 BEQ $1057 ;vissza új karakter beolvasásához . 10A3 88 DEY ;pozíció csökkentése eggyel . 10A4 98 TYA ;Y A-ba . 10A5 18 CLC ;Carry törlése összeadáshoz . 10A6 65 03 ADC $03 ;hozzáadás a beviteli mező kezdőcíméhez . 10A8 8D 0D FF STA $FF0D ;a kurzor helyének módosítása a TED-ben . 10AB A5 04 LDA $04 ;laphatár esetén . 10AD 69 00 ADC #$00 ;carry hozzáadása a felső címbájthoz . 10AF 8D 0C FF STA $FF0C ;kurzor helyének korrigálása . 10B2 18 CLC ;Carry törlése . 10B3 90 A2 BCC $1057 ;ugrás vissza új karakter beolvasásához . 10B5 C9 94 CMP #$94 ;ha nem INSERT volt . 10B7 D0 25 BNE $10DE ;ugrás tovább . 10B9 C4 05 CPY $05 ;ha a kurzor a beviteli mező végén . 10BB F0 9A BEQ $1057 ;vissza új karakter beolvasásához . 10BD 88 DEY ;egyébként egy hely beszúrása . 10BE 84 02 STY $02 ;pozíció mentése . 10C0 A4 05 LDY $05 ;indexbe az utolsó hely . 10C2 88 DEY ;eggyel korábbi pozíció . 10C3 B9 FF 05 LDA $05FF,Y ;ciklus: a karakterek eltolása a következő helyre . 10C6 99 00 06 STA $0600,Y ;az átmeneti tárolóban . 10C9 B1 03 LDA ($03),Y ;szöveg eltolása a képernyőn is . 10CB C8 INY ;a következő helyre . 10CC 91 03 STA ($03),Y ;mentve a karakter . 10CE 88 DEY ;eggyel korábbi . 10CF 88 DEY ;pozicióra . 10D0 C4 02 CPY $02 ;ha még nincs a ciklus a beviteli mező végén . 10D2 D0 EF BNE $10C3 ;vissza az eggyel korábbi karakterre . 10D4 C8 INY ;a beszúrás helyére . 10D5 A9 20 LDA #$20 ;szóköz kerül . 10D7 91 03 STA ($03),Y ;a képernyőn . 10D9 99 00 06 STA $0600,Y ;és a szövegpufferben is . 10DC D0 D4 BNE $10B2 ;vissza új karakter beolvasásához . 10DE C9 1D CMP #$1D ;ha nem kurzor jobbra volt . 10E0 D0 07 BNE $10E9 ;urgás tovább . 10E2 C4 05 CPY $05 ;ha a kurzor a beviteli mező végén áll . 10E4 F0 CC BEQ $10B2 ;vissza új karakter beolvasásához . 10E6 C8 INY ;pozíció növelése . 10E7 D0 BB BNE $10A4 ;kurzor helyének módosítása a TED-ben, vissza tovább . 10E9 C9 11 CMP #$11 ;ha nem kurzor le volt . 10EB D0 0F BNE $10FC ;ugrás tovább . 10ED 98 TYA ;pozíció A-ba . 10EE 18 CLC ;Carry törlése összeadáshoz . 10EF 69 28 ADC #$28 ;pozíció növelése egy képernyősorral . 10F1 B0 BF BCS $10B2 ;ha az index növelésénél átvitel történne, ugrás vissza . 10F3 C5 05 CMP $05 ;ha éppen a beviteli mező végére ugrana, . 10F5 F0 0F BEQ $1106 ;akkor tovább, Y A-ba, kurzor módosítása képernyőn . 10F7 B0 B9 BCS $10B2 ;ha a beviteli mező rövidebb 40 karakternél, akkor ugrás vissza . 10F9 A8 TAY ;a növelt pozíció vissza Y-ba . 10FA 90 A8 BCC $10A4 ;kurzor módosítása a képernyőn, ugrás vissza új karakter beolvasásához . 10FC C9 91 CMP #$91 ;ha nem kurzor fel volt . 10FE D0 09 BNE $1109 ;ugrás tovább . 1100 98 TYA ;pozíció A-ba . 1101 38 SEC ;Carry beállítása kivonáshoz . 1102 E9 28 SBC #$28 ;csökkentés egy sorral . 1104 90 AC BCC $10B2 ;ha átvitel történne, vissza új karakter beolvasásához . 1106 A8 TAY ;csökkentett pozíció Y-ba . 1107 B0 9B BCS $10A4 ;kurzor módosítása a képernyőn, ugrás vissza új karakter beolvasásához . 1109 C9 20 CMP #$20 ;ha 32 kód alatti egyéb vezérlőkarakter volt . 110B 90 A5 BCC $10B2 ;ugrás vissza új karakter beolvasásához . 110D C9 60 CMP #$60 ;ha 96 kód feletti egyéb vezérlő vagy grafikus karakter volt . 110F B0 A1 BCS $10B2 ;szintén ugrás vissza új karakter beolvasásához . 1111 99 00 06 STA $0600,Y ;a beolvasott karakter mentése az átmeneti tárolóba . 1114 C9 40 CMP #$40 ;ha a karakter kódja $40 alatti . 1116 90 02 BCC $111A ;közvetlen kiíratás képernyőre . 1118 29 1F AND #$1F ;egyébként a kód korrekciója, és . 111A 91 03 STA ($03),Y ;a karakter a képernyőre . 111C 18 CLC ;Carry törlése . 111D 90 C3 BCC $10E2 ;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) . 111F A9 00 LDA #$00 ;az adatok helye . 1121 85 D2 STA $D2 ;a program után a $2000-es címtől . 1123 A9 20 LDA #$20 ;aktuális rekord . 1125 85 D3 STA $D3 ;mutatója a $D2-$D3 címen . 1127 60 RTS Szubrutin: $D2-$D3 munkamutató címének növelése egy rekordhosszal . 1128 AD 5F 11 LDA $115F ;az azonosítómező hosszának beolvasása . 112B 20 31 11 JSR $1131 ;a beolvasott értékkel a $D2-$D3 cím növelése . 112E AD 5E 11 LDA $115E ;a névmező hosszának beolvasása . 1131 18 CLC ;Carry törlése összeadáshoz . 1132 65 D2 ADC $D2 ;$D2-$D3 cím növelése, az akkuban található értékkel . 1134 85 D2 STA $D2 ;az új érték mentése $D2-re . 1136 90 03 BCC $113B ;laphatár ugrásakor a . 1138 E6 D3 INC $D3 ;$D3 növelése . 113A 18 CLC ;a Carry törlése jelzi, hogy az összeadás rendben volt . 113B 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 . 113C A2 0C LDX #$0C ;a munkaterületen az adatok törlése . 113E A9 00 LDA #$00 ;A törlése . 1140 95 D0 STA $D0,X ;ciklus: $D0 nulláslap nullázása $D0-$DC között . 1142 CA DEX ;ha a ciklus még tart . 1143 10 FB BPL $1140 ;akkor vissza a következő cellára . 1145 A8 TAY ;Y-ba #$00 . 1146 20 1F 11 JSR $111F ;$D2-D3-ra az adatterület kezdete . 1149 20 59 11 JSR $1159 ;ciklus: adatterület végének keresése, a rekord első karakterének beolvasása . 114C F0 ED BEQ $113B ;Ha nincs adat (A-ban #$00), kilépés a rutinból . 114E E6 D7 INC $D7 ;$D7 növelése, egy rekord megtalálva . 1150 D0 02 BNE $1154 ;Lapváltás esetén . 1152 E6 D8 INC $D8 ;$D8 növelése, $D7-D8 rekordszámláló . 1154 20 28 11 JSR $1128 ;$D2-$D3 munkamutató címének növelése a következő rekord elejére . 1157 90 F0 BCC $1149 ;Vissza a rekord első karakterének olvasásához Szubrutin: egy karakter beolvasása a RAM memóriából . 1159 A9 D2 LDA #$D2 ;Olvasási cím $D2-$D3 . 115B 4C 94 04 JMP $0494 ;Karakter olvasása a memóriából, és visszatérés Egy rekordban a filenév- és az azonosítómező hossza (itt 19 és 6 karakter) >115E 13 06 : .. ;amennyiben filenév hossza ($115E) 0, akkor nincs adatbázis a program után Start: Program kezdete . 1160 A9 06 LDA #$06 ;alapszín sötétkék . 1162 8D 15 FF STA $FF15 . 1165 A9 26 LDA #$26 ;háttér világosabb kék . 1167 8D 19 FF STA $FF19 . 116A A9 71 LDA #$71 ;a karakterek színe . 116C 8D 3B 05 STA $053B ;fehér a képernyőn . 116F 20 4F FF JSR $FF4F ;következő szöveg képernyőre vitele >1172 13 13 93 1B 4C 11 1D 44 : ....L..D ;képernyőablak törlése, képernyő törlése,kurzor →↓,"DATUM:" >117A 41 54 55 4D 3A 00 : ATUM:. . 1180 A0 0A LDY #$0A ;korábban a programban mentett dátum kiíratása . 1182 B9 DB 1E LDA $1EDB,Y ;ciklus: dátum a programban az $1EDB címnél . 1185 99 30 0C STA $0C30,Y ;a képernyőre . 1188 88 DEY ;pozíció tovább a következő karakterre . 1189 10 F7 BPL $1182 ;ha még nem végzett a ciklus, vissza . 118B A9 0B LDA #$0B ;a dátum beviteli mezője 11 karakter hosszú (ÉÉÉÉ.HH.NN.) . 118D 20 32 10 JSR $1032 ;Dátum bevitele . 1190 B0 0A BCS $119C ;ESC esetén nincs dátum módosítás . 1192 A0 0A LDY #$0A ;a bevitt érték visszamentése . 1194 B1 03 LDA ($03),Y ;ciklus: a dátum olvasása a képernyőről . 1196 99 DB 1E STA $1EDB,Y ;mentése a programban az $1EDB címnél . 1199 88 DEY ;tovább a következő karakterre . 119A 10 F8 BPL $1194 ;ha még nem végzett, akkor vissza . 119C A0 00 LDY #$00 ;Főmenü visszatérési címe . 119E 84 9A STY $9A ;kernel I/O üzenetek tiltása . 11A0 AD 5E 11 LDA $115E ;programnevek hossza . 11A3 D0 06 BNE $11AB ;ha nem nulla, ugrás tovább . 11A5 20 1F 11 JSR $111F ;adatterület kezdete $D2-$D3-ra . 11A8 98 TYA ;$00 akkuba . 11A9 91 D2 STA ($D2),Y ;adatterület inicializálása, nulla kiírása az adatterület elejére . 11AB 20 4F FF JSR $FF4F ;Főmenü kiíratása Adatterület a főmenü részére >11AE 13 13 93 11 20 20 20 20 : .... >11B6 20 20 20 20 20 20 50 52 : PR >11BE 4F 47 52 41 4D 4E 59 49 : OGRAMNYI >11C6 4C 56 41 4E 54 41 52 54 : LVANTART >11CE 41 53 0D 11 20 20 20 20 : AS.. >11D6 20 20 20 20 20 42 59 20 : BY >11DE 4D 43 47 20 28 43 29 20 : MCG (C) >11E6 31 39 39 37 2E 20 56 32 : 1997. V2 >11EE 2E 37 2E 0D 11 11 1D 31 : .7.....1 >11F6 2E 20 41 20 50 52 4F 47 : . A PROG >11FE 52 41 4D 4E 45 56 45 4B : RAMNEVEK >1206 20 42 45 49 52 41 53 41 : BEIRASA >120E 0D 11 1D 32 2E 20 52 45 : ...2. RE >1216 4E 44 45 5A 45 53 0D 11 : NDEZES.. >121E 1D 33 2E 20 4B 45 52 45 : .3. KERE >1226 53 45 53 0D 11 1D 34 2E : SES...4. >122E 20 4C 49 53 54 41 5A 41 : LISTAZA >1236 53 20 41 20 4B 45 50 45 : S A KEPE >123E 52 4E 59 4F 52 45 0D 11 : RNYORE.. >1246 1D 35 2E 20 50 52 4F 47 : .5. PROG >124E 52 41 4D 4C 49 53 54 41 : RAMLISTA >1256 20 4E 59 4F 4D 54 41 54 : NYOMTAT >125E 41 53 41 20 20 20 20 20 : ASA >1266 20 20 20 20 0D 11 1D 36 : ...6 >126E 2E 20 41 20 50 52 4F 47 : . A PROG >1276 52 41 4D 20 4B 49 4D 45 : RAM KIME >127E 4E 54 45 53 45 0D 11 1D : NTESE... >1286 39 2E 20 41 44 41 54 4F : 9. ADATO >128E 4B 20 54 4F 52 4C 45 53 : K TORLES >1296 45 8E 08 00 : E... A főmenü billentyűzet figyelő rutinja . 129A 20 20 10 JSR $1020 ;Várás billentyű leütésére . 129D C9 31 CMP #$31 ;Ha a leütött karakter kódja '1'-nél kisebb . 129F 90 F9 BCC $129A ;Vissza a billentyűzet olvasásához . 12A1 C9 39 CMP #$39 ;Ha a leütött karakter a 9-es . 12A3 F0 04 BEQ $12A9 ;akkor ugrás tovább . 12A5 C9 37 CMP #$37 ;Ha a leütött karakter 7 vagy 8 volt . 12A7 B0 F1 BCS $129A ;Vissza a beolvasáshoz . 12A9 29 0F AND #$0F ;karakterkódról a felső 4 bit törlése . 12AB A8 TAY ;index Y-ba . 12AC B9 B8 12 LDA $12B8,Y ;ugrócím alsó byte-jának olvasása a vektortáblázatból . 12AF 85 D0 STA $D0 ;mentés $D0-ra . 12B1 B9 C1 12 LDA $12C1,Y ;ugrócím felső byte-jának olvasása a vektortáblázatból . 12B4 85 D1 STA $D1 ;mentés $D1-re . 12B6 6C D0 00 JMP ($00D0) ;Ugrás a kiválasztott alprogramhoz Vektortáblázat a menüpontok ugrócímeihez 1. $1400 2. $152D 3. $1726 4. $170E 5. $188C 6. $1BB3 7-8. Nem használt 9. $13A4 >12B9 00 2D 26 0E 8C B3 00 00 : .-&..3.. >12C1 A4 : $ >12C2 14 15 17 17 18 1B 00 00 : ........ >12CA 13 : . Szubrutin: Szám bekérése előjelek nélkül (legfeljebb 5 jegyű szám bekéréséhez) . 12CB 85 E5 STA $E5 ;beviteli mező hosszának mentése . 12CD A5 E5 LDA $E5 ;hossz visszatöltése . 12CF 20 32 10 JSR $1032 ;beviteli mező aktiválása, bevitel . 12D2 90 01 BCC $12D5 ;ha nem volt ESC lenyomva, tovább . 12D4 60 RTS ;egyébként kilépés . 12D5 A4 E5 LDY $E5 ;Y-ba a beviteli mező hossza . 12D7 B1 03 LDA ($03),Y ;az utolsó karakter beolvasása . 12D9 C9 20 CMP #$20 ;ha szóköz volt, . 12DB F0 08 BEQ $12E5 ;akkor tovább . 12DD C9 30 CMP #$30 ;ha a karakter ASCII kódja kisebb '0'-nál, . 12DF 90 EC BCC $12CD ;vissza, a szám újrabekérése . 12E1 C9 3A CMP #$3A ;ha a karakter ASCII kódja a '9' felett van, . 12E3 B0 E8 BCS $12CD ;vissza, a szám újrabekérése . 12E5 88 DEY ;eggyel nagyobb helyiérték . 12E6 10 EF BPL $12D7 ;ha van még, a helyiérték ellenőrzése, hogy szám szerepel-e ott . 12E8 A9 00 LDA #$00 ;$E6-$E7 nullázása . 12EA 85 E6 STA $E6 ;a szám számításához . 12EC 85 E7 STA $E7 . 12EE A4 E5 LDY $E5 ;bevitt számok karakterhossza . 12F0 A2 04 LDX #$04 ;utolsó helyiérték (egyesek) . 12F2 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 . 12F4 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 . 12F6 F0 1F BEQ $1317 ;ugrás, az előző helyen lévő karakterre . 12F8 29 0F AND #$0F ;a felső bitek nullázása . 12FA F0 1A BEQ $1316 ;ha nulla volt, azt nem kell hozzáadni, ugrás tovább . 12FC 85 E5 STA $E5 ;érték mentése . 12FE A5 E6 LDA $E6 ;ciklus: helyiérték kiszámolása, az alsó byte betöltése . 1300 18 CLC ;Carry törlése összeadáshoz . 1301 7D 1C 13 ADC $131C,X ;helyiértékhez tartozó hatvány hozzáadása (1, 10, 100, 1000, 10000) . 1304 85 E6 STA $E6 ;és az érték mentése . 1306 90 02 BCC $130A ;ha nem volt átvitel, ugrás tovább . 1308 E6 E7 INC $E7 ;átvitel hozzáadása $E7-hez . 130A A5 E7 LDA $E7 ;és a helyiérték felső bytejának hozzáadása . 130C 18 CLC ;összeadás előtt az esetleges korábbi átvitel törlése . 130D 7D 21 13 ADC $1321,X ;helyiérték hatvány felső byte-jának hozzáadása . 1310 85 E7 STA $E7 ;és mentése . 1312 C6 E5 DEC $E5 ;a helyiérték felszorzása a számmal $E6-$E7-en . 1314 D0 E8 BNE $12FE ;vissza újraösszeadásra . 1316 CA DEX ;előző (nagyobb helyiérték) . 1317 88 DEY ;pozíció csökkentése a képernyőn . 1318 10 D8 BPL $12F2 ;a szám olvasása mindaddig, amíg a beviteli mezővel nem végzett . 131A 18 CLC ;carry törlése, a bevitel sikeres volt . 131B 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) >131C 10 E8 64 0A 01 : .hd.. >1321 27 03 00 00 00 : '.... Szubrutin: Alprogramokhoz használt képernyő inicializáló rutin, képernyő törlése, szöveg kiíratása . 1326 20 4F FF JSR $FF4F ;Szöveg kiíratása, pozícionálás: CLR,↓→ >1329 93 11 1D 00 : .... . 132D 20 3F 13 JSR $133F ;korábban a regiszterekben megadott paraméterek alapján szöveg kiíratása out eszközre . 1330 20 4F FF JSR $FF4F ;Szöveg kiíratása, "..." (három pont kerül a korábban kiírt szöveg után) >1333 2E 2E 2E 00 : .... . 1337 60 RTS Szubrutin: adott szöveg kiíratása, előtte kurzor pozícionálása: RETURN,↓→ . 1338 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 >133B 0D 11 1D 00 : .... ;"↓→" . 133F 86 03 STX $03 ;X és A regiszterben a kezdőcím . 1341 85 04 STA $04 . 1343 84 05 STY $05 ;Y-ban a kiírandó szöveg hossza . 1345 A0 00 LDY #$00 . 1347 A9 03 LDA #$03 ;ciklus:szöveg kiküdése, az olvasó rutinhoz a cím megadása ($03),Y . 1349 20 5B 11 JSR $115B ;karakter olvasása a $03-$04 címről . 134C 20 D2 FF JSR $FFD2 ;CHROUT, karakter kiküldése Output eszközre . 134F C8 INY ;ugrás következő karakterre . 1350 C4 05 CPY $05 ;ha még nem végzett a teljes szöveg kiírásával, . 1352 D0 F3 BNE $1347 ;vissza a következő karakter kiíratásához . 1354 18 CLC ;Carry törlése, a feladat rendben volt . 1355 60 RTS Szubrutin: keresésnél a bevitt keresési szöveg ürességének ellenőrzése . 1356 A4 05 LDY $05 ;szöveghossz beolvasása . 1358 B9 00 06 LDA $0600,Y ;ciklus: ha a beolvasott karakter az átmeneti tárolóban . 135B C9 20 CMP #$20 ;szóköz volt . 135D F0 07 BEQ $1366 ;akkor ugrás . 135F C8 INY ;ha nem, akkor . 1360 A9 00 LDA #$00 ;végjel rakása a . 1362 99 00 06 STA $0600,Y ;karakterlánc végére, Y-ban hány bevitt karakter van a teljes szövegből . 1365 60 RTS ;visszatérés az ellenőrzésből . 1366 88 DEY ;ugrás eggyel korábbi karakterre . 1367 10 EF BPL $1358 ;ha még nem vagyunk a szöveglánc elején, akkor vissza az eggyel korábbi karakter vizsgálatára . 1369 30 F4 BMI $135F ;ha az összes szóköz volt, akkor végjel az első karakterre Szubrutin: keresésnél a megadott keresendő szöveg ellenőrzése a rekordban . 136B 85 E5 STA $E5 ;adathossz mentése . 136D A0 00 LDY #$00 ;Y törlése, rekord adatindex . 136F A2 00 LDX #$00 ;X törlése, keresendő szöveg, a szövegminta indexe . 1371 BD 00 06 LDA $0600,X ;egy karakter betöltése a szövegpufferből . 1374 F0 1C BEQ $1392 ;ha szövegvégjel volt, ugrás nem volt egyezés . 1376 20 59 11 JSR $1159 ;adatolvasás a $D2-D3-on található címről . 1379 DD 00 06 CMP $0600,X ;ha a beolvasott karakter megegyezik, . 137C F0 09 BEQ $1387 ;akkor ugrás mindkét index növeléséhez . 137E E0 00 CPX #$00 ;ha nem és X értéke 0, . 1380 F0 04 BEQ $1386 ;akkor ugrás a következő bájtra csak a rekordban, szövegminta ellenőrzése újraindul . 1382 88 DEY ;ciklus: ha X nagyobb volt, akkor Y visszacsökkentése . 1383 CA DEX ;a korábbi egyezőségi hosszal . 1384 D0 FC BNE $1382 ;mindaddíg, amíg X nagyobb nullánál . 1386 24 BIT ;NOP az X növelésének átugrásához . 1387 E8 INX ;ugrás a következő bájtra a keresendő szövegben . 1388 C8 INY ;ugrás a következő bájtra a rekordban . 1389 C4 E5 CPY $E5 ;ha Y még nem érte el az adathossz végét . 138B D0 E4 BNE $1371 ;vissza a következő karakter ellenőrzésére . 138D 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 . 1390 D0 02 BNE $1394 ;és van még a szövegmintából, kilépés a rutinból, nincs egyezés . 1392 18 CLC ;Carry törlése, egyezés jelzése . 1393 24 BIT ;NOP a SEC utasítás átugrásához, . 1394 38 SEC ;Carry 1-be, nincs egyezés . 1395 60 RTS Szubrutin: Különböző kódok kiküldése az aktuális out eszközre . 1396 A9 0C LDA #$0C ;Lapdobás kódja . 1398 2C ;NOP utasítás az elrejtéshez . 1399 A9 0D LDA #$0D ;RETURN kódja . 139B 2C ;NOP utasítás az elrejtéshez . 139C A9 20 LDA #$20 ;szóköz kódja . 139E 2C ;NOP utasítás az elrejtéshez . 139F A9 3A LDA #$3A ;kettőspont kódja . 13A1 4C D2 FF JMP $FFD2 ;CHROUT, karakter kiküldése, visszatérés a rutinból Alprogram: Adatok törlése . 13A4 A9 00 LDA #$00 . 13A6 8D 5E 11 STA $115E ;Nulla mentése a név hosszát tartalmazó helyre . 13A9 4C 9C 11 JMP $119C ;Visszatérés a főprogramba Adatterület: Nyomtatáshoz, adatbekéréshez inicializáló szövegek >13AC 00 00 00 00 00 00 00 00 : ........ >13B4 00 00 00 00 00 00 00 00 : ........ >13BC 00 00 00 00 00 00 00 00 : ........ >13C4 00 00 00 00 00 00 00 00 : ........ >13CC 00 00 00 00 00 00 00 00 : ........ >13D4 00 00 50 45 4C 44 41 4E : ..PELDAN >13DC 59 3A 4F 53 5A 4C 4F 50 : Y:OSZLOP >13E4 53 5A 41 4D 20 41 20 4C : SZAM A L >13EC 41 50 4F 4E 3A 53 5A 45 : APON:SZE >13F4 52 49 4E 54 48 4F 53 53 : RINTHOSS >13FC 5A 41 3A 23 : ZA:# Alprogram: Adatok bevitele . 1400 20 3C 11 JSR $113C ;Munkamutató ($D2-$D3) ráállítása az adatok végére . 1403 A9 11 LDA #$11 ;"PROGRAMNEVEK BEIRASA" szöveg a $11FA-nál kezdődik a Főmenüben . 1405 A2 FA LDX #$FA . 1407 A0 14 LDY #$14 ;kiírandó szöveg hossza . 1409 20 26 13 JSR $1326 ;képernyő törlése és a szöveg kiíratása képernyőre . 140C AD 5E 11 LDA $115E ;a programnév mező hossza . 140F D0 41 BNE $1452 ;ha nem 0, tovább . 1411 A9 16 LDA #$16 ;"PROGRAMNEV " szöveg . 1413 A2 64 LDX #$64 . 1415 A0 0B LDY #$0B . 1417 20 38 13 JSR $1338 ;kiíratása, két sorral lejjebb, új sorba . 141A A9 13 LDA #$13 ;"HOSSZA:" szöveg . 141C A2 F8 LDX #$F8 . 141E A0 07 LDY #$07 . 1420 20 3F 13 JSR $133F ;kiíratása az előző szöveg után . 1423 A9 02 LDA #$02 ;programnevek hossza legfeljebb 99 karakter hosszú lehet . 1425 20 CB 12 JSR $12CB ;a programnevek hosszának bekérése . 1428 B0 7C BCS $14A6 ;Ha ESC volt lenyomva, kilépés a programból, vissza a főmenühöz . 142A A5 E6 LDA $E6 ;Ha a bevitt hossz 0 volt, . 142C F0 F5 BEQ $1423 ;akkor vissza, a hossz újrabekérése . 142E 8D 5E 11 STA $115E ;programnevek hosszának mentése . 1431 A9 16 LDA #$16 ;"ID BL. " szöveg . 1433 A2 72 LDX #$72 . 1435 A0 07 LDY #$07 . 1437 20 38 13 JSR $1338 ;kiíratása, két sorral lejjebb lévő sorba . 143A A9 13 LDA #$13 ;"HOSSZA:" szöveg . 143C A2 F8 LDX #$F8 . 143E A0 07 LDY #$07 . 1440 20 3F 13 JSR $133F ;kiíratása az előző szöveg után közvetlenül . 1443 A9 02 LDA #$02 ;az azonosító ("ID BL.") mező legfeljebb 99 karakter hosszú lehet . 1445 20 CB 12 JSR $12CB ;hossz bekérése . 1448 B0 05 BCS $144F ;ESC esetén nincs módosítás . 144A A5 E6 LDA $E6 ;hossz betöltése . 144C 8D 5F 11 STA $115F ;hossz elmentése . 144F 20 1F 11 JSR $111F ;adatterület inicializálása . 1452 A6 D2 LDX $D2 ;$D2 mentése X-be . 1454 A4 D3 LDY $D3 ;$D3 mentése Y-ba . 1456 20 28 11 JSR $1128 ;a $D2-$D3 munkamutató növelése egy rekordhosszal . 1459 A5 D2 LDA $D2 ;$D2 értéke A-ba . 145B 86 D2 STX $D2 ;az eredeti érték visszamentése $D2-re . 145D A6 D3 LDX $D3 ;$D3 X-be . 145F 84 D3 STY $D3 ;az eredeti érték visszamentése $D3-ra . 1461 E4 38 CPX $38 ;ha a következő rekord tárolása még a teljes tárterület határa alatt van, . 1463 90 08 BCC $146D ;akkor urgás tovább a rekord felvételéhez . 1465 F0 02 BEQ $1469 ;ha a felső cím a határon, akkor megnézni az alsó címet is . 1467 B0 06 BCS $146F ;ha felette, akkor a tár megtelt, ugrás a figyelmeztetésre . 1469 C5 37 CMP $37 ;ha az alsó címbyte éppen nulla . 146B F0 41 BEQ $14AE ;ugrás tovább bevitelre, egy rekord még éppen elfér . 146D 90 3A BCC $14A9 ;egyébként ugrás a bevitelre . 146F 20 4F FF JSR $FF4F ;"A TAR MEGTELT!" figyelmeztető szöveg kiírása >1472 0D 11 1D 41 20 54 41 52 : ...A TAR >147A 20 4D 45 47 54 45 4C 54 : MEGTELT >1482 21 0D 00 : !.. . 1485 20 4F FF JSR $FF4F ;"NYOMJ LE EGY BILLENTYUT!" szöveg kiírása a korábbi szöveg alá >1488 11 1D 4E 59 4F 4D 4A 20 : ..NYOMJ >1490 4C 45 20 45 47 59 20 42 : LE EGY B >1498 49 4C 4C 45 4E 54 59 55 : ILLENTYU >14A0 54 21 00 : T!. . 14A3 20 20 10 JSR $1020 ;várás egy billentyű lenyomására . 14A6 4C 9C 11 JMP $119C ;visszatérés a Főmenübe . 14A9 A0 00 LDY #$00 ;egy rekord felvétele, index törlése . 14AB 98 TYA ;a végjel #$00 . 14AC 91 D2 STA ($D2),Y ;kiírása az utolsó rekord után . 14AE A9 16 LDA #$16 ;"PROGRAMNEV" szöveg . 14B0 A2 64 LDX #$64 . 14B2 A0 0A LDY #$0A . 14B4 20 38 13 JSR $1338 ;kiírása két sorral lejjebb új sorba . 14B7 20 9F 13 JSR $139F ;":" kiírása az előző szöveg után . 14BA AD 5E 11 LDA $115E ;programnevek hosszának betöltése . 14BD 20 32 10 JSR $1032 ;adatszöveg bekérése . 14C0 B0 E4 BCS $14A6 ;ha ESC volt, kilépés és vissza a Főmenübe . 14C2 A0 00 LDY #$00 ;a bevitt szöveg ürességének ellenőrzése . 14C4 98 TYA ;A törlése . 14C5 19 00 06 ORA $0600,Y ;ciklus: a beviteli tárban minden karakterének VAGY-olása A-hoz . 14C8 C8 INY ;tovább a következő karakterre . 14C9 CC 5E 11 CPY $115E ;ha még nincs a beviteli mező végén . 14CC D0 F7 BNE $14C5 ;akkor vissza a következő karakterre . 14CE C9 20 CMP #$20 ;ha a teljes beviteli mező csak szóközt tartalmazott . 14D0 F0 D4 BEQ $14A6 ;akkor nem történt újabb adatfelvétel, kilépés és vissza a Főmenübe . 14D2 A0 00 LDY #$00 ;az előzőleg bevitt adat ideiglenes mentése . 14D4 B9 00 06 LDA $0600,Y ;ciklus: a beolvasott szöveg . 14D7 99 00 07 STA $0700,Y ;mentése a $0700 cím alá . 14DA C8 INY ;tovább a következő karakterre . 14DB CC 5E 11 CPY $115E ;ha még nincs a beviteli mező végén . 14DE D0 F4 BNE $14D4 ;akkor vissza a következő karakterre . 14E0 AD 5F 11 LDA $115F ;azonosító hosszának bekérése . 14E3 F0 1D BEQ $1502 ;ha nulla, akkor nincs bekérés, ugrás tovább . 14E5 20 4F FF JSR $FF4F ;azonosító szövegéhez pozícionálás a képernyőn >14E8 0D 11 11 11 1D 00 : ...... . 14EE A9 16 LDA #$16 ;"ID BL. " szöveg . 14F0 A2 72 LDX #$72 . 14F2 A0 06 LDY #$06 . 14F4 20 3F 13 JSR $133F ;kiíratása a képernyőre . 14F7 20 9F 13 JSR $139F ;kettőspont kiírása az előzőleg kivitt szöveg után . 14FA AD 5F 11 LDA $115F ;azonosító hosszának bekérése . 14FD 20 32 10 JSR $1032 ;azonosító bevitele . 1500 B0 A4 BCS $14A6 ;ha ESC volt kilépés és visszatérés a Főmenübe . 1502 A0 00 LDY #$00 ;a bevitt adatok mentése az adatbázisba . 1504 B9 00 07 LDA $0700,Y ;ciklus: először a bevitt filenév elmentése . 1507 91 D2 STA ($D2),Y ;az adatbázis végére . 1509 C8 INY ;tovább a következő karakterre . 150A CC 5E 11 CPY $115E ;ha még nem végzett a teljes filenév átvitelével . 150D D0 F5 BNE $1504 ;akkor vissza a másoló ciklushoz . 150F 20 2E 11 JSR $112E ;$D2-$D3 munkamutató megnövelése a filenév hosszával . 1512 AD 5F 11 LDA $115F ;azonosító hosszának bekérése . 1515 F0 11 BEQ $1528 ;ha 0 volt, akkor nics mit menteni az adatbázisba, mentés kihagyása . 1517 A0 00 LDY #$00 ;azonosító elmentése . 1519 B9 00 06 LDA $0600,Y ;ciklus: azonosító mentése . 151C 91 D2 STA ($D2),Y ;a programnév után az adatbázisba . 151E C8 INY ;tovább a következő karakterre . 151F CC 5F 11 CPY $115F ;ha még nem végzett a teljes azonosító mentésével . 1522 D0 F5 BNE $1519 ;akkor vissza a másoló ciklushoz . 1524 98 TYA ;azonosító hossza A-ba . 1525 20 31 11 JSR $1131 ;$D2-$D3 növelése . 1528 4C 03 14 JMP $1403 ;visszatérés új adatsor beviteléhez . 152B 00 BRK . 152C 00 BRK Alprogram: Rendezés (növekvő ABC sorrendbe) . 152D AD 5E 11 LDA $115E ;filenév hosszának ellenőrzése . 1530 D0 03 BNE $1535 ;ha nem nulla, ugrás tovább a rendezéshez . 1532 4C 9A 12 JMP $129A ;visszatérés a Főmenühöz, új billentyű bekéréséhez . 1535 A9 12 LDA #$12 ;"RENDEZES" szöveg a főmenüből . 1537 A2 14 LDX #$14 . 1539 A0 08 LDY #$08 . 153B 20 26 13 JSR $1326 ;kiíratása a képernyőre előzőleg képernyőtörléssel . 153E A9 13 LDA #$13 ;"#" kiíratása a képernyőre . 1540 A2 FF LDX #$FF . 1542 A0 01 LDY #$01 . 1544 20 38 13 JSR $1338 ;2 sorral lejjebb új sorba . 1547 20 3C 11 JSR $113C ;mutatók területének inicializálása, munkamutató adatbázis végére, adatok számlálása . 154A A6 D7 LDX $D7 ;adatok számának bekérése . 154C A5 D8 LDA $D8 . 154E 20 5F A4 JSR $A45F ;szám kiíratása képernyőre . 1551 78 SEI ;megszakítás tiltása . 1552 8D 3F FF STA $FF3F ;CPU olvasás RAM-ra kapcsolása . 1555 18 CLC ;összeadáshoz Carry jelzőbit törlése . 1556 AD 5E 11 LDA $115E ;filenevek hossza Akkuba . 1559 6D 5F 11 ADC $115F ;azonosító hosszának hozzáadása . 155C 85 D4 STA $D4 ;a kapott rekord hossz elmentése $D4-re . 155E A5 D2 LDA $D2 ;az adatbázis végének címe . 1560 85 D0 STA $D0 ;a $D0-$D1-re kerül . 1562 A5 D3 LDA $D3 . 1564 85 D1 STA $D1 . 1566 20 1F 11 JSR $111F ;$D2-$D3-ra az adatbázis kezdetének címe . 1569 A5 D2 LDA $D2 ;$D2-$D3 mentése $D5-$D6-ra . 156B 85 D5 STA $D5 . 156D A5 D3 LDA $D3 . 156F 85 D6 STA $D6 . 1571 20 28 11 JSR $1128 ;$D2-$D3 címe a következő rekordra mutat . 1574 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 . 1576 BD 79 0C LDA $0C79,X ;képernyőn az X-beli helyiértéken a szám helyének olvasása . 1579 C9 20 CMP #$20 ;ha szóköz, . 157B F0 09 BEQ $1586 ;akkor tovább . 157D C9 30 CMP #$30 ;ha nem nulla . 157F D0 0A BNE $158B ;akkor, ugrás tovább . 1581 A9 39 LDA #$39 ;akkuba "9" . 1583 9D 79 0C STA $0C79,X ;kimentés a képernyőre . 1586 CA DEX ;következő (ezt megelőző helyiérték) számhelyre . 1587 D0 ED BNE $1576 ;ugrás a képernyőről való olvasáshoz . 1589 F0 03 BEQ $158E ;ugrás, a következő utasítás kihagyása . 158B DE 79 0C DEC $0C79,X ;az X indexű helyiértéken a szám csökkentése . 158E AD 7A 0C LDA $0C7A ;a "#" melletti szám olvasása . 1591 C9 30 CMP #$30 ;ha nem nulla . 1593 D0 0B BNE $15A0 ;ugrás tovább . 1595 BD 7A 0C LDA $0C7A,X ;ciklus: számok balra húzása . 1598 9D 79 0C STA $0C79,X ;a vezető nulla törlése . 159B E8 INX ;tovább a következő helyiértékre . 159C E0 06 CPX #$06 ;ha a pozíció a még nincs a végén, . 159E D0 F5 BNE $1595 ;akkor vissza a számjegyek mozgatásához . 15A0 A5 D2 LDA $D2 ;$D2-$D3 mutatóból . 15A2 38 SEC ;Carry beállítása kivonáshoz . 15A3 E5 D4 SBC $D4 ;kivonunk egy rekordhossznyit . 15A5 85 D9 STA $D9 ;az eredmény $D9-$DA-ra kerül . 15A7 A5 D3 LDA $D3 . 15A9 E9 00 SBC #$00 ;a kivonás korrigálása az átvitellel a nagyobbik byte-on . 15AB 85 DA STA $DA . 15AD A0 00 LDY #$00 ;$D2-$D3 címen kezdődő rekord mentése . 15AF B1 D2 LDA ($D2),Y ;ciklus: rekord olvasása . 15B1 99 00 06 STA $0600,Y ;mentése ideiglenesen a $0600 alá . 15B4 C8 INY ;tovább a következő karakterre . 15B5 C4 D4 CPY $D4 ;ha még nem végzett a teljes rekord átmentésével . 15B7 D0 F6 BNE $15AF ;akkor vissza a másoló ciklusra . 15B9 A5 DA LDA $DA ;$D9-$DA cím összehasonlítása az adatbázis kezdetének címével . 15BB C5 D6 CMP $D6 ;ha $DA $D6-hoz képest . 15BD 90 43 BCC $1602 ;kevesebb, ugrás . 15BF F0 02 BEQ $15C3 ;megegyezik, urgás az alsó bájt ellenőrzésére . 15C1 B0 06 BCS $15C9 ;ha több, ugrás . 15C3 A5 D9 LDA $D9 ;ha $DA=$D6 és . 15C5 C5 D5 CMP $D5 ;ha $D9 $D5-höz képest . 15C7 90 39 BCC $1602 ;kevesebb, ugrás tovább . 15C9 A0 00 LDY #$00 ;az ideiglenesen $0600-on lévő rekord összehasonlítása . 15CB B1 D9 LDA ($D9),Y ;ciklus: a $D9-$DA címnél lévő rekorddal . 15CD D9 00 06 CMP $0600,Y ;ha a karakterek éppen megegyeznek, . 15D0 F0 04 BEQ $15D6 ;ugrás a következő karakterek vizsgálatára . 15D2 B0 09 BCS $15DD ;ha több, ugrás, a rekordok hátra húzása mindaddig, míg kisebb nem lesz . 15D4 90 2C BCC $1602 ;ha kevesebb, ugrás, a kimentett rekord betétele az adatbázisba . 15D6 C8 INY ;ugrás a rekord következő karakterére . 15D7 C4 D4 CPY $D4 ;ha még nem végzett a teljes rekord összehasonlításával . 15D9 D0 F0 BNE $15CB ;akkor vissza a rekord következő karaktereinek vizsgálatára . 15DB F0 25 BEQ $1602 ;a ciklus végén a kimentett rekord visszakerül a helyére, mutatók léptetése eggyel előre . 15DD A5 D9 LDA $D9 ;rekordok tolása hátrafelé, közben a mutató egyre kisebb helyre mutat . 15DF 18 CLC ;Carry törlése összeadáshoz . 15E0 65 D4 ADC $D4 ;$D9-$DA növelése egy rekordhosszal . 15E2 85 DB STA $DB ;az eredmény $DB-$DC-re kerül . 15E4 A5 DA LDA $DA . 15E6 69 00 ADC #$00 . 15E8 85 DC STA $DC . 15EA A0 00 LDY #$00 . 15EC B1 D9 LDA ($D9),Y ;ciklus: rekord másolása $D9-$DA alól . 15EE 91 DB STA ($DB),Y ;a következő helyre kerül . 15F0 C8 INY ;tovább a következő karakterre . 15F1 C4 D4 CPY $D4 ;ha még nem végzett a teljes rekord másolásával, . 15F3 D0 F7 BNE $15EC ;akkor vissza a ciklusba . 15F5 A5 D9 LDA $D9 ;$D9-$DA mutató . 15F7 38 SEC ;Carry beállítása kivonáshoz . 15F8 E5 D4 SBC $D4 ;egy rekorddal megelőző helyre mutat . 15FA 85 D9 STA $D9 ;érték mentése $D9-re . 15FC B0 BB BCS $15B9 ;átvitel esetén . 15FE C6 DA DEC $DA ;a felső bájt csökkentése . 1600 D0 B7 BNE $15B9 ;mindig ugrás vissza az összehasonlításhoz, mert $DA sosem kerül nullába . 1602 A5 D9 LDA $D9 ;ha a $D9-$DA mutató kisebb volt az adatbázis kezdetének címénél . 1604 18 CLC ;$D9-$DA visszakorrigálása . 1605 65 D4 ADC $D4 . 1607 85 DB STA $DB ;az eredmény $DB-$DC-re kerül (e.g. az adatbázis kezdőcíme) . 1609 A5 DA LDA $DA . 160B 69 00 ADC #$00 . 160D 85 DC STA $DC . 160F A0 00 LDY #$00 . 1611 B9 00 06 LDA $0600,Y ;ciklus: az ideiglenesen kimentett rekord . 1614 91 DB STA ($DB),Y ;a $DB-$DC mutató általi rekordhelyre kerül . 1616 C8 INY ;tovább a következő karakterre . 1617 C4 D4 CPY $D4 ;ha még nem végzett a mentéssel, . 1619 D0 F6 BNE $1611 ;akkor vissza a ciklusba . 161B 20 28 11 JSR $1128 ;$D2-$D3 mutató következő rekordra . 161E A0 00 LDY #$00 ;pozíció a rekord első karakterére . 1620 B1 D2 LDA ($D2),Y ;ha elérte a végjelet . 1622 F0 03 BEQ $1627 ;kilépés a rendező algoritmusból . 1624 4C 74 15 JMP $1574 ;vissza a következő rekord rendezéséhez . 1627 8D 3E FF STA $FF3E ;CPU olvasása ROM-ra . 162A 58 CLI ;megszakítás engedélyezése . 162B 4C 9C 11 JMP $119C ;visszatérés a Főmenübe 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) . 162E 20 4F FF JSR $FF4F ;képernyőre a fejléc kiírása >1631 93 20 3C 45 53 43 3E 20 : . >1639 4B 49 4C 45 50 45 53 20 : KILEPES >1641 20 45 47 59 45 42 20 42 : EGYEB B >1649 49 4C 4C 2E 20 53 54 4F : ILL. STO >1651 50 2F 53 43 52 4F 4C 4C : P/SCROLL >1659 20 53 4F 52 53 5A 41 4D : SORSZAM >1661 20 20 20 50 52 4F 47 52 : PROGR >1669 41 4D 4E 45 56 20 20 20 : AMNEV >1671 20 49 44 20 42 4C 2E 20 : ID BL. >1679 20 20 20 0D 00 : .. . 167E A0 28 LDY #$28 ;egy képernyősornyi . 1680 A9 60 LDA #$60 ;grafikus karakter, vízszintes vonal . 1682 20 D2 FF JSR $FFD2 ;ciklus: a fejléc alá vonal húzása, CHROUT . 1685 88 DEY ;tovább a következő karakterre . 1686 D0 FA BNE $1682 ;ha még nem végzett a vonal húzásával, akkor vissza . 1688 20 4F FF JSR $FF4F ;képernyőn ablak készítése (ESC+T) a fejléc alatt >168B 0D 1B 54 00 : ..T. . 168F 20 3C 11 JSR $113C ;adatok megszámlálása, $D7-$D8-ba . 1692 4C 1F 11 JMP $111F ;$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) . 1695 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 . 1697 98 TYA ;ugyanez szóköz kódjaként A-ba . 1698 99 00 07 STA $0700,Y ;ciklus: az átmeneti tároló törlése . 169B 88 DEY ;egy rekord összeálllításához . 169C 10 FA BPL $1698 ;ha még nem végzett, vissza a következő hely törlésére . 169E A9 0D LDA #$0D ;a listarekord végére kerül . 16A0 8D 21 07 STA $0721 ;így a puffer 34 karakter hosszú . 16A3 AC 5E 11 LDY $115E ;a programnév hosszának betöltése . 16A6 C0 11 CPY #$11 ;ha ez maximum 16 karakter . 16A8 90 02 BCC $16AC ;akkor tovább . 16AA A0 10 LDY #$10 ;egyébként ennek maximalizálása 16-ban . 16AC 88 DEY ;hossz korrigálása adatolvasáshoz . 16AD 20 59 11 JSR $1159 ;adatolvasás RAM-ból . 16B0 D0 02 BNE $16B4 ;ha érvényes bejegyzés volt, tovább . 16B2 38 SEC ;egyébként Carry 1-be, jelezvén a listázás végét . 16B3 60 RTS ;kilépés a rutinból . 16B4 99 00 07 STA $0700,Y ;karakter mentése a listapufferbe . 16B7 88 DEY ;ha még nem végzett a ciklus, . 16B8 10 F3 BPL $16AD ;tovább a következő karakter olvasásához . 16BA 20 2E 11 JSR $112E ;$D2-$D3 mutató megnövelése a programnév hosszával . 16BD AC 5F 11 LDY $115F ;azonosító hosszának betöltése . 16C0 F0 16 BEQ $16D8 ;ha nincs, akkor tovább . 16C2 C0 11 CPY #$11 ;ha ez maximum 16 karakter hosszú . 16C4 90 02 BCC $16C8 ;akkor tovább . 16C6 A0 10 LDY #$10 ;egyébként a hossz redukálása 16-ra . 16C8 88 DEY ;hossz korrigálása adatolvasáshoz . 16C9 20 59 11 JSR $1159 ;adatolvasás RAM-ból . 16CC 99 11 07 STA $0711,Y ;adatmentés a rekordpufferben a 17. helytől . 16CF 88 DEY ;ha még nem végzett a ciklus, . 16D0 10 F7 BPL $16C9 ;tovább a következő karakter olvasásához . 16D2 AD 5F 11 LDA $115F ;azonosítóhossz újratöltése . 16D5 20 31 11 JSR $1131 ;$D2-$D3 mutató megnövelése az azonosító hosszával . 16D8 E6 D0 INC $D0 ;rekord számának növelése . 16DA D0 02 BNE $16DE ;az alső byte átfordulásakor . 16DC E6 D1 INC $D1 ;a felső byte növelése . 16DE A6 D0 LDX $D0 ;sorszám kiíratásához a címek betöltése . 16E0 A5 D1 LDA $D1 ;A-ba és X-be . 16E2 20 5F A4 JSR $A45F ;sorszám kiíratása . 16E5 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 >16E8 2E 1B 4A 1D 1D 1D 1D 1D : ..J..... >16F0 1D 1D 00 : ... . 16F3 A9 07 LDA #$07 ;szöveg helye a $0700-as címnél . 16F5 A2 00 LDX #$00 ;és összesen . 16F7 A0 22 LDY #$22 ;34 karakternyi . 16F9 4C 3F 13 JMP $133F ;szöveg kiküldése a képernyőre Szubrutin: listázás közben scrollozás illetve a kilépés vizsgálata . 16FC 20 D9 EB JSR $EBD9 ;billentyűzetpuffer olvasása, input eszköz billentyűzet . 16FF D0 01 BNE $1702 ;ha volt billentyű leütve, tovább . 1701 60 RTS ;egyébként visszatérés . 1702 C9 1B CMP #$1B ;ha nem a kilépéshez lévő kód (ESC) volt leütve . 1704 D0 05 BNE $170B ;akkor ugrás tovább . 1706 68 PLA ;JSR visszatérési cím törlése a veremből . 1707 68 PLA . 1708 4C 9C 11 JMP $119C ;visszatérés a főprogramhoz . 170B 4C 20 10 JMP $1020 ;várás új billentyű leütésére, és visszatérés a listázáshoz Alprogram: Listázás képernyőre . 170E AD 5E 11 LDA $115E ;ha vannak adatok . 1711 D0 03 BNE $1716 ;akkor tovább . 1713 4C 9A 12 JMP $129A ;egyébként visszatérés a főprogramba a billentyűzet figyeléséhez . 1716 20 2E 16 JSR $162E ;a listázáshoz a képernyőn a listaablak elkészítése . 1719 20 95 16 JSR $1695 ;egy rekord listázása . 171C 90 03 BCC $1721 ;ha a listázás nem ért véget, tovább . 171E 4C 85 14 JMP $1485 ;ha végetért, "NYOMJ LE EGY BILLENTYUT!" és visszatérés a főprogramba . 1721 20 FC 16 JSR $16FC ;Scroll illetve kilépés vizsgálata . 1724 90 F3 BCC $1719 ;vissza új adat listázásához Alprogram: Keresés . 1726 AD 5E 11 LDA $115E ;ha a név hossza 0, azaz nincsenek adatok . 1729 F0 E8 BEQ $1713 ;akkor vissza a főprogramba . 172B 20 1F 11 JSR $111F ;adatok kezdetének inicializálása . 172E A0 00 LDY #$00 ;Y-törlése . 1730 20 59 11 JSR $1159 ;ha nincs adat . 1733 F0 F4 BEQ $1729 ;akkor visszatérés a főprogramba . 1735 A9 12 LDA #$12 ;képernyőtörlés és "KERESES..." szöveg kiíratása . 1737 A2 22 LDX #$22 ;címének beállítása kiíratáshoz . 1739 A0 07 LDY #$07 ;szöveg hossza . 173B 20 26 13 JSR $1326 ;szöveg kiküldése képernyőre, továbbiakban a keresés almenüjének összeállítása . 173E A9 11 LDA #$11 ;"1. " szöveg . 1740 A2 F5 LDX #$F5 . 1742 A0 03 LDY #$03 . 1744 20 38 13 JSR $1338 ;kiküldése a képernyőre . 1747 A9 16 LDA #$16 ;"PROGRAMNEV " szöveg . 1749 A2 64 LDX #$64 ;a főmenüből . 174B A0 0B LDY #$0B ;11 karakterhosszon . 174D 20 3F 13 JSR $133F ;kiküldése a képernyőre . 1750 A9 13 LDA #$13 ;"SZERINT" szöveg . 1752 A2 F1 LDX #$F1 . 1754 A0 07 LDY #$07 ;7 karakterhosszon . 1756 20 3F 13 JSR $133F ;kiküldése a képernyőre . 1759 A9 12 LDA #$12 ;"2. " szöveg . 175B A2 11 LDX #$11 . 175D A0 03 LDY #$03 . 175F 20 38 13 JSR $1338 ;kiküldése a képernyőre . 1762 A9 16 LDA #$16 ;"ID BL. " szöveg . 1764 A2 72 LDX #$72 . 1766 A0 07 LDY #$07 . 1768 20 3F 13 JSR $133F ;kiküldése a képernyőre . 176B A9 13 LDA #$13 ;"SZERINT" szöveg . 176D A2 F1 LDX #$F1 . 176F A0 07 LDY #$07 ;7 karakterhosszon . 1771 20 3F 13 JSR $133F ;kiküldése a képernyőre . 1774 A9 12 LDA #$12 ;"3. " szöveg . 1776 A2 1F LDX #$1F . 1778 A0 03 LDY #$03 . 177A 20 38 13 JSR $1338 ;kiküldése a képernyőre . 177D A9 16 LDA #$16 ;"SORSZAM " szöveg . 177F A2 5A LDX #$5A . 1781 A0 08 LDY #$08 . 1783 20 3F 13 JSR $133F ;kiküldése a képernyőre . 1786 A9 13 LDA #$13 ;"SZERINT" szöveg . 1788 A2 F1 LDX #$F1 . 178A A0 07 LDY #$07 . 178C 20 3F 13 JSR $133F ;kiküldése a képernyőre . 178F 20 20 10 JSR $1020 ;billentyűzet olvasása . 1792 C9 31 CMP #$31 ;ha 1 volt kiválasztva . 1794 F0 69 BEQ $17FF ;akkor tovább a programnév szerinti kereséshez . 1796 C9 32 CMP #$32 ;ha nem 2 volt kiválasztva . 1798 D0 08 BNE $17A2 ;akkor tovább a következő menüpont ellenőrzéséhez . 179A AD 5F 11 LDA $115F ;egyébként azonosító hosszának ellenőrzése . 179D F0 F0 BEQ $178F ;ha nulla, akkor vissza új billentyűre várva . 179F 4C 3D 18 JMP $183D ;egyébként ugrás az azonosító szerinti kereséshez . 17A2 C9 33 CMP #$33 ;ha nem 3 volt kiválasztva . 17A4 D0 E9 BNE $178F ;akkor ugrás vissza új billentyűre várva . 17A6 A9 16 LDA #$16 ;"SORSZAM" szöveg . 17A8 A2 5A LDX #$5A . 17AA A0 07 LDY #$07 . 17AC 20 38 13 JSR $1338 ;kiíratása a képernyőre új sorban . 17AF 20 9F 13 JSR $139F ;kettőspont kiküldése a szöveg után . 17B2 20 3C 11 JSR $113C ;munkaterület inicializálása, rekordok számának megállapítása . 17B5 A9 05 LDA #$05 ;szám bekérése . 17B7 20 CB 12 JSR $12CB ;5 karakterhosszon, mert a rekordok száma a RAM-ban biztosan kisebb 100000-nél . 17BA A5 E7 LDA $E7 ;a bevitt szám felső bájtja . 17BC C5 D8 CMP $D8 ;ha kisebb a rekordok számának felső bájtjánál . 17BE 90 0C BCC $17CC ;akkor tovább . 17C0 F0 02 BEQ $17C4 ;ha egyenlő, akkor tovább az alsó bájt vizsgálatára . 17C2 B0 F1 BCS $17B5 ;ha több, új szám bekérése . 17C4 A5 E6 LDA $E6 ;a bevitt szám alsó bájtja . 17C6 C5 D7 CMP $D7 ;ha éppen megegyezik a rekordszáméval . 17C8 F0 02 BEQ $17CC ;tovább a sorszám megkereséséhez . 17CA B0 E9 BCS $17B5 ;ha több, vissza új szám bekéréséhez . 17CC 20 2E 16 JSR $162E ;listaablak készítése képernyőn . 17CF A5 E6 LDA $E6 ;ha a sorszám . 17D1 05 E7 ORA $E7 ;0 volt . 17D3 F0 0A BEQ $17DF ;tovább normál a listázáshoz . 17D5 C6 E6 DEC $E6 ;a bevitt sorszám csökkentése 1-gyel . 17D7 A5 E6 LDA $E6 ;ha a sorszám . 17D9 C9 FF CMP #$FF ;még nem fordult alá . 17DB D0 02 BNE $17DF ;tovább . 17DD C6 E7 DEC $E7 ;a a bevitt sorszám felső bájtjának csökkentése 1-gyel . 17DF A5 E6 LDA $E6 ;$E6-$E7 mentése . 17E1 85 D0 STA $D0 ;$D0-$D1-re . 17E3 A5 E7 LDA $E7 . 17E5 85 D1 STA $D1 . 17E7 C6 E6 DEC $E6 ;a megadott sorszámú rekord listázásához a $D2-$D3 rekordmutató számítása . 17E9 A5 E6 LDA $E6 ;$E6-$E7 csökkentése 1-gyel . 17EB C9 FF CMP #$FF ;ha az alsó bájt még nem fordult át . 17ED D0 08 BNE $17F7 ;akkor tovább . 17EF C6 E7 DEC $E7 ;a felső bájt csökkentése 1-gyel . 17F1 A5 E7 LDA $E7 . 17F3 C9 FF CMP #$FF ;ha a sorszám már 0 alá csökkent . 17F5 F0 05 BEQ $17FC ;nincs további rekordmutató cím növelése, és ugrás a rekordok listázására . 17F7 20 28 11 JSR $1128 ;$D2-$D3 rekordmutató növelése a következő rekordhoz . 17FA D0 EB BNE $17E7 ;vissza a rekordmutató növeléséhez . 17FC 4C 19 17 JMP $1719 ;ugrás a rekordok listázásához . 17FF A9 16 LDA #$16 ;"PROGRAMNEV" szerinti kereséshez . 1801 A2 64 LDX #$64 . 1803 A0 0A LDY #$0A . 1805 20 38 13 JSR $1338 ;szöveg kiíratása a képernyőre . 1808 20 9F 13 JSR $139F ;kettőspont kiküldése a szöveg után . 180B AD 5E 11 LDA $115E ;programnevek hosszának betöltése . 180E 20 32 10 JSR $1032 ;kereséshez a keresendő szöveg bekérése . 1811 20 56 13 JSR $1356 ;a bevitt szöveg ellenőrzése . 1814 20 2E 16 JSR $162E ;listaablak képernyőre . 1817 20 FC 16 JSR $16FC ;billentyűfigyelés . 181A A0 00 LDY #$00 ;Y-törlése . 181C 20 59 11 JSR $1159 ;adatolvasás $D2-$D3-on . 181F D0 03 BNE $1824 ;ha van adat, tovább . 1821 4C 85 14 JMP $1485 ;egyébként "NYOMJ LE EGY BILLENTYUT!" kiíratása, és visszatérés a főprogramba . 1824 AD 5E 11 LDA $115E ;programnevek hosszának betöltése . 1827 20 6B 13 JSR $136B ;rekordban a keresési szöveg ellenőrzése . 182A B0 06 BCS $1832 ;ha nincs egyezés, tovább a következő rekordra . 182C 20 95 16 JSR $1695 ;egyezés esetén a rekord kiírása a képernyőre . 182F 18 CLC ;ugrás vissza . 1830 90 E5 BCC $1817 ;a következő rekord ellenőrzéséhez . 1832 E6 D0 INC $D0 ;rekord sorszámának növelése . 1834 D0 02 BNE $1838 . 1836 E6 D1 INC $D1 . 1838 20 28 11 JSR $1128 ;$D2-$D3 mutató ráállítása a következő rekordra . 183B 90 DA BCC $1817 ;ugrás vissza a következő rekord ellenőrzéséhez . 183D A9 16 LDA #$16 ;Azonosító szerinti keresés . 183F A2 72 LDX #$72 ;"ID BL." szöveg . 1841 A0 06 LDY #$06 . 1843 20 38 13 JSR $1338 ;kiíratása a képernyőre . 1846 20 9F 13 JSR $139F ;kettőspont kiküldése a szöveg után . 1849 AD 5F 11 LDA $115F ;azonosító hosszának betöltése, korábban ellenőrízve volt, hogy nagyobb 0-nál . 184C 20 32 10 JSR $1032 ;keresési minta bekérése . 184F 20 56 13 JSR $1356 ;a bevitt szöveg ellenőrzése . 1852 20 2E 16 JSR $162E ;listaablak képernyőre . 1855 20 FC 16 JSR $16FC ;billentyűfigyelés . 1858 A0 00 LDY #$00 ;Y törlése . 185A 20 59 11 JSR $1159 ;adatolvasás . 185D D0 03 BNE $1862 ;ha volt adat, ugrás tovább . 185F 4C 85 14 JMP $1485 ;egyébként "NYOMJ LE EGY BILLENTYUT!" kiíratása, és visszatérés a főprogramba . 1862 20 2E 11 JSR $112E ;$D2-$D3 rekordmutató megnövelése a programnév hosszával . 1865 AD 5F 11 LDA $115F ;azonosítóhossz betöltése . 1868 20 6B 13 JSR $136B ;rekordban a keresési szöveg ellenőrzése . 186B 08 PHP ;státuszregiszter mentése . 186C A5 D2 LDA $D2 ;$D2-$D3 rekordmutatóból . 186E 38 SEC ;Carry beállítása kivonáshoz . 186F ED 5E 11 SBC $115E ;a programnév hosszának kivonása . 1872 85 D2 STA $D2 ;hogy a mutató ismét a rekord elejére mutasson . 1874 B0 02 BCS $1878 . 1876 C6 D3 DEC $D3 . 1878 28 PLP ;státuszregiszter visszatöltése . 1879 B0 06 BCS $1881 ;ha nincs egyezés, tovább a következő rekordra . 187B 20 95 16 JSR $1695 ;egyezés esetén a rekord kiírása a képernyőre . 187E 18 CLC ;ugrás vissza . 187F 90 D4 BCC $1855 ;a következő rekord ellenőrzéséhez . 1881 E6 D0 INC $D0 ;rekord sorszámának növelése . 1883 D0 02 BNE $1887 . 1885 E6 D1 INC $D1 . 1887 20 28 11 JSR $1128 ;$D2-$D3 mutató ráállítása a következő rekordra . 188A 90 C9 BCC $1855 ;ugrás vissza a következő rekord ellenőrzéséhez Alprogram: Programlista nyomtatása . 188C AD 5E 11 LDA $115E ;programnév hosszának betöltése . 188F D0 03 BNE $1894 ;ha van adat, ugrás tovább . 1891 4C 9A 12 JMP $129A ;egyébként vissza a főprogram billentyűzet figyeléséhez . 1894 A9 12 LDA #$12 ;"PROGRAMLISTA NYOMTATASA" szöveg . 1896 A2 4A LDX #$4A . 1898 A0 17 LDY #$17 . 189A 20 26 13 JSR $1326 ;kiíratása a képernyőre előzetes képernyőtörlés után . 189D A9 04 LDA #$04 ;nyomtató csatorna nyitásához . 189F AA TAX ;a paraméterek beállítása . 18A0 A0 00 LDY #$00 . 18A2 20 BA FF JSR $FFBA ;SETLFS . 18A5 A9 00 LDA #$00 ;nincs filenév . 18A7 20 BD FF JSR $FFBD ;SETNAM . 18AA 20 C0 FF JSR $FFC0 ;OPEN . 18AD A2 04 LDX #$04 ;nyomtatócsatornára váltás . 18AF 20 C9 FF JSR $FFC9 ;CHOUT . 18B2 90 26 BCC $18DA ;ha a nyomtató elérése rendben volt, ugrás tovább . 18B4 20 4F FF JSR $FF4F ;egyébként hibaüzenet a képernyőre >18B7 0D 11 1D 48 49 42 41 20 : ...HIBA >18BF 41 20 53 4F 52 4F 53 20 : A SOROS >18C7 56 4F 4E 41 4C 4F 4E 21 : VONALON! >18CF 0D 0F 00 : ... . 18D2 A9 04 LDA #$04 ;nyomtatócsatorna zárása . 18D4 20 C3 FF JSR $FFC3 ;CLOSE . 18D7 4C 85 14 JMP $1485 ;"NYOMJ LE EGY BILLENTYUT!" kiíratása, és visszatérés a főprogramba . 18DA 20 CC FF JSR $FFCC ;CLRCH, a kiviteli csatorna visszaállítása képernyőre . 18DD 20 3C 11 JSR $113C ;Munkamutató ($D2-$D3) ráállítása az adatok végére . 18E0 A9 13 LDA #$13 ;"OSZLOPSZAM A LAPON:" szöveg . 18E2 A2 DE LDX #$DE . 18E4 A0 13 LDY #$13 . 18E6 20 38 13 JSR $1338 ;kiküldése a képernyőre . 18E9 A9 31 LDA #$31 ;a beviteli mezőbe . 18EB 8D 8D 0C STA $0C8D ;előzetesen 160 . 18EE A9 36 LDA #$36 ;kerül . 18F0 8D 8E 0C STA $0C8E ;a képernyőn . 18F3 A9 30 LDA #$30 . 18F5 8D 8F 0C STA $0C8F . 18F8 A9 03 LDA #$03 ;3 karakterhosszú . 18FA 20 CB 12 JSR $12CB ;szám bekérése . 18FD 90 03 BCC $1902 ;ha nem volt Esc, tovább . 18FF 4C AB 1B JMP $1BAB ;nyitott csatorna zárása, és vissza a főprogramhoz . 1902 A5 E7 LDA $E7 ;a bevitt szám ellenőrzése . 1904 D0 08 BNE $190E ;ha a felső bájt nem nulla, tovább . 1906 A5 E6 LDA $E6 ;ha az alsó bájt . 1908 C9 0A CMP #$0A ;10-nél kevesebb . 190A 90 EC BCC $18F8 ;vissza új szám bekéréséhez . 190C A5 E7 LDA $E7 ;ha a felső bájt . 190E C9 02 CMP #$02 ;2-nél nagyobb (azaz az oszlopszám 512-nél nagyobb) . 1910 B0 E6 BCS $18F8 ;vissza új szám bekéréséhez . 1912 A5 E6 LDA $E6 ;a bevitt oszlopszám . 1914 85 D4 STA $D4 ;elmentése a $D4-$D5 munkaterületre, hány karakter széles a papír . 1916 A5 E7 LDA $E7 . 1918 85 D5 STA $D5 . 191A A9 16 LDA #$16 ;"SOR" szöveg . 191C A2 5A LDX #$5A . 191E A0 03 LDY #$03 . 1920 20 38 13 JSR $1338 ;kiküldése a képernyőre . 1923 A9 13 LDA #$13 ;"SZAM A LAPON:" szöveg . 1925 A2 E4 LDX #$E4 . 1927 A0 0D LDY #$0D . 1929 20 3F 13 JSR $133F ;kiküldése a képernyőre közvetlenül a korábbi szöveg után . 192C A9 37 LDA #$37 ;a beviteli mezőbe . 192E 8D DA 0C STA $0CDA ;előzetesen 72 (normál leporello) . 1931 A9 32 LDA #$32 ;kerül . 1933 8D DB 0C STA $0CDB ;a képernyőn . 1936 A9 03 LDA #$03 ;3 karakterhosszú . 1938 20 CB 12 JSR $12CB ;szám bekérése . 193B B0 C2 BCS $18FF ;ha Esc volt, vissza a főprogramhoz . 193D A5 E7 LDA $E7 ;ha a bevitt szám felső bájtja . 193F C9 02 CMP #$02 ;nagyobb 1-nél (azaz a sorszám 512-nél nagyobb) . 1941 B0 F3 BCS $1936 ;vissza új szám bekéréséhez . 1943 C9 01 CMP #$01 ;ha a felső bájt nem 1, tehát 0 . 1945 D0 06 BNE $194D ;akkor tovább . 1947 A5 E6 LDA $E6 ;ha az alsó bájt értéke . 1949 F0 08 BEQ $1953 ;0, azaz a bevitt szám 256, akkor tovább . 194B D0 E9 BNE $1936 ;egyébként vissza új szám bekéréséhez . 194D A5 E6 LDA $E6 ;ha az alsó bájt értéke . 194F C9 0F CMP #$0F ;15-nél kevesebb, . 1951 90 E3 BCC $1936 ;akkor vissza új szám bekéréséhez . 1953 38 SEC ;kivonáshoz Carry beállítása . 1954 E9 03 SBC #$03 ;3 kivonása, (fejléc, alatta egy vízszintes vonal, egy sor a leporello határugrás miatt) . 1956 85 D6 STA $D6 ;lapon a sorszám elmentése a $D6-ra . 1958 A9 13 LDA #$13 ;"PELDANY:" szöveg . 195A A2 D6 LDX #$D6 . 195C A0 08 LDY #$08 . 195E 20 38 13 JSR $1338 ;kiküldése a képernyőre új sorba . 1961 A9 31 LDA #$31 ;a beviteli mezőbe előzetesen 1 . 1963 8D 22 0D STA $0D22 ;kerül . 1966 A9 03 LDA #$03 ;3 karakterhosszú . 1968 20 CB 12 JSR $12CB ;szám bekérése . 196B B0 92 BCS $18FF ;ha Esc volt, vissza a főprogramhoz . 196D A5 E7 LDA $E7 ;ha a bevitt szám felső bájtja . 196F C9 02 CMP #$02 ;nagyobb 1-nél (azaz a sorszám 512-nél nagyobb) . 1971 B0 F3 BCS $1966 ;akkor vissza új szám bekéréséhez . 1973 C9 01 CMP #$01 ;ha a felső bájt nem 1, tehát 0 . 1975 D0 06 BNE $197D ;akkor tovább . 1977 A5 E6 LDA $E6 ;ha az alsó bájt értéke . 1979 D0 EB BNE $1966 ;nem 0, azaz a pélányszám több, mint 256, akkor vissza új szám bekéréséhez . 197B F0 04 BEQ $1981 ;ha 0 akkor tovább . 197D A5 E6 LDA $E6 ;ha az alsó bájt értéke . 197F F0 E5 BEQ $1966 ;0, tehát a pédányszám 0, akkor vissza új szám bekéréséhez . 1981 85 D9 STA $D9 ;példányszám mentése a $D9-re . 1983 A9 00 LDA #$00 . 1985 85 DA STA $DA ;példányszámláló nullázása, $DA törlése . 1987 A2 04 LDX #$04 ;a kimeneti csatorna nyomtatóra váltása . 1989 20 C9 FF JSR $FFC9 ;CHOUT . 198C A5 D2 LDA $D2 ;$D2-$D3-on lévő . 198E 85 E2 STA $E2 ;adatterület végét jelző . 1990 A5 D3 LDA $D3 ;mutató mentése . 1992 85 E3 STA $E3 ;$E2-$E3-ra . 1994 AD 5E 11 LDA $115E ;programnévhossz betöltése . 1997 85 DF STA $DF ;elmentése $DF-re . 1999 AD 5F 11 LDA $115F ;azonosítóhossz betöltése . 199C 85 E0 STA $E0 ;elmentése $E0-ra . 199E F0 03 BEQ $19A3 ;ha ez 0 volt, ugrás . 19A0 A9 01 LDA #$01 ;1, plusz 1 byte kell nyomtatáskor a programnév és az azonosító közé . 19A2 2C BIT ;NOP az A törlésének átugrásához . 19A3 A9 00 LDA #$00 ;0 . 19A5 85 D2 STA $D2 ;mentése a D2-re . 19A7 20 28 11 JSR $1128 ;$D2-$D3 munkamutató címének növelése 1 rekordhosszal, $D2-ben a nyomtatáskori rekord mérete korrigálva . 19AA A9 01 LDA #$01 ;a papíron, legalább 1 hasáb helyezhető el, ezért . 19AC 85 E1 STA $E1 ;1 mentése $E1-re, a papíron elhelyezhető hasábok száma . 19AE A5 D5 LDA $D5 ;ha a lapszélesség felső bájtja . 19B0 D0 3B BNE $19ED ;0-nál nagyobb, ugrás tovább . 19B2 A5 D4 LDA $D4 ;ha a lapszélesség alsó bájtja . 19B4 C5 D2 CMP $D2 ;nagyobb vagy egyenlő a korrigált rekordmérettel . 19B6 B0 35 BCS $19ED ;akkor legalább 1 teljes hasáb biztosan elfér, ugrás tovább . 19B8 4A LSR ;ha kisebb, akkor az érték felezése . 19B9 E9 00 SBC #$00 ;Carry kivonása, csökkentés még eggyel . 19BB 85 D3 STA $D3 ;elmentés $D3-ra . 19BD A5 E0 LDA $E0 ;a korábban elmentett azonosítóhossz betöltése . 19BF F0 26 BEQ $19E7 ;ha 0, ugrás tovább . 19C1 C5 D3 CMP $D3 ;ha nagyobb a felezett értéknél . 19C3 B0 0B BCS $19D0 ;ugrás tovább . 19C5 A5 D4 LDA $D4 ;a papír szélességéből . 19C7 38 SEC ;Carry 1-be a kivonáshoz . 19C8 E9 01 SBC #$01 ;kivonunk 1-gyet a programnév és az azonosító közötti hely miatt . 19CA E5 E0 SBC $E0 ;kivonjuk az azonosító hosszát . 19CC 85 DF STA $DF ;$DF-re a korrigált programnévhossz, ami a papírra kerül . 19CE D0 1B BNE $19EB ;ugrás tovább . 19D0 A5 DF LDA $DF ;a programnévhossz betöltése . 19D2 C5 D3 CMP $D3 ;ha ez minimum a felezett érték nagysága . 19D4 B0 0B BCS $19E1 ;akkor ugrás tovább . 19D6 A5 D4 LDA $D4 ;a papír szélességéből . 19D8 38 SEC ;Carry beállítása kivonáshoz . 19D9 E9 01 SBC #$01 ;1-et kivonva és . 19DB E5 E0 SBC $E0 ;az azonosítóhosszt kivonva . 19DD 85 DF STA $DF ;az érték mentése a nyomtatáskori programnévhosszhoz . 19DF D0 0A BNE $19EB ;ugrás tovább . 19E1 A5 D3 LDA $D3 ;a felezett érték . 19E3 85 E0 STA $E0 ;mentése a nyomtatáskori azonosítóhosszhoz . 19E5 D0 EF BNE $19D6 ;ugrás tovább . 19E7 A5 D4 LDA $D4 ;mivel nincs azonosító, így a teljes papírszélességgel . 19E9 85 DF STA $DF ;lesz egyenlő a korrigált progtamnévhossz, mentése a $DF-re . 19EB D0 27 BNE $1A14 ;a hasábok számításának átugrása, csak 1 hasáb lesz a papíron . 19ED A5 D2 LDA $D2 ;annak kiszámolása, hogy hány adathasáb fér rá a papíra . 19EF 85 DB STA $DB ;a korrigált rekordméret betöltése, és elmentése $DB-re . 19F1 E6 D2 INC $D2 ;rekordméret növelése 1-gyel (+1 hely a papíron 2 hasáb között) . 19F3 A5 DB LDA $DB ;a papíron a tényleges nyomtatási hossz betöltése . 19F5 18 CLC ;Carry törlése összeadáshoz . 19F6 65 D2 ADC $D2 ;a hosszhoz egy új hasábhossz hozzáadása (rekordhossz+2) . 19F8 85 DB STA $DB ;az adat elmentése, a nyomtatási szélesség 1 hasábbal megnövelve . 19FA 90 02 BCC $19FE ;átvitel esetén . 19FC E6 DC INC $DC ;a felső bájt megnövelése 1-gyel . 19FE A5 DC LDA $DC ;ha az új nyomtatási szélesség . 1A00 C5 D5 CMP $D5 ;kevesebb a papír szélességénél . 1A02 90 0C BCC $1A10 ;ugrás a hasábok számának növeléséhez . 1A04 F0 02 BEQ $1A08 ;ha a felső bájt éppen egyezik, tovább az alsó bájt ellenőrzéséhez . 1A06 B0 0C BCS $1A14 ;ha kevesebb, akkor kilépés a hasábok számításának ciklusából . 1A08 A5 DB LDA $DB ;ha az alsó bájt értéke . 1A0A C5 D4 CMP $D4 ;a papír szélességének alsó bájtjával . 1A0C F0 02 BEQ $1A10 ;megegyezik, akkor éppen ennyi oszlop fér fel rá, ugrás a hasábok számának növeléséhez . 1A0E B0 04 BCS $1A14 ;ha több, akkor kilépés a hasábok számításának ciklusából, tovább . 1A10 E6 E1 INC $E1 ;a papírra elhelyezhető hasábok számának növelése 1-gyel . 1A12 D0 DF BNE $19F3 ;mindig vissza új hasáb vizsgálatához . 1A14 18 CLC ;Carry törlése . 1A15 A5 E0 LDA $E0 ;a nyomtatáskori azonosítóhossz betöltése . 1A17 F0 02 BEQ $1A1B ;ha ez 0, akkor ugrás tovább . 1A19 69 01 ADC #$01 ;helyköz hozzáadása . 1A1B 65 DF ADC $DF ;a nyomtatáskori korrigált névhossz hozzáadása . 1A1D 85 DB STA $DB ;nyomtatáskori korrigált rekordhossz mentése $DB-re és . 1A1F A8 TAY ;átadása Y-ba . 1A20 A9 00 LDA #$00 ;nyomtatáshoz a pufferben inicializálása, a végére végjel kerül . 1A22 99 F0 06 STA $06F0,Y ;mentése . 1A25 A9 20 LDA #$20 ;szóköz kódja A-ba . 1A27 88 DEY ;index csökkentése . 1A28 C0 FF CPY #$FF ;ha a ciklus még tart . 1A2A D0 F6 BNE $1A22 ;vissza a puffer inicializálásához az eggyel korábbi helyre mentés . 1A2C C8 INY ;Y törlése . 1A2D B9 64 16 LDA $1664,Y ;a pufferben a fejléc összeállítása ("PROGRAMNEV") . 1A30 99 F0 06 STA $06F0,Y ;programnev karaktereinek mentése . 1A33 C8 INY ;index növelése . 1A34 C0 0A CPY #$0A ;ha a teljes szöveget beírta, . 1A36 F0 0A BEQ $1A42 ;ugrás az azonosító beírásához . 1A38 C4 DF CPY $DF ;ha még nem érte el a korrigált névhosszot . 1A3A D0 F1 BNE $1A2D ;ugrás vissza a következő karakter betöltéséhez . 1A3C 88 DEY ;Y csökkentése 1-gyel . 1A3D A9 2E LDA #$2E ;ebben az esetben rövidítés miatt . 1A3F 99 F0 06 STA $06F0,Y ;pont kerül a név utolsó karakterére . 1A42 A5 E0 LDA $E0 ;azonosító szövege a fejlécpufferbe, a korrigált azonosítóhossz olvasása . 1A44 F0 1B BEQ $1A61 ;ha ez 0, akkor nincs azonosító, ugrás tovább . 1A46 A4 DF LDY $DF ;indexbe a korrigált névhossz . 1A48 C8 INY ;Y növelése 1-gyel, hely kihagyása miatt . 1A49 A2 00 LDX #$00 ;X törlése, index az azonosító olvasásához . 1A4B BD 72 16 LDA $1672,X ;azonosító karaktereinek olvasása . 1A4E 99 F0 06 STA $06F0,Y ;mentése a pufferbe . 1A51 E8 INX ;indexek növelése . 1A52 C8 INY ;tovább a következő karakterre . 1A53 E0 06 CPX #$06 ;ha a teljes azonosító beírásra került, . 1A55 F0 0A BEQ $1A61 ;ugrás tovább . 1A57 E4 E0 CPX $E0 ;ha az X még nem érte el a korrigált azonosítóhosszt . 1A59 D0 F0 BNE $1A4B ;ugrás vissza a következő karakter betöltéséhez . 1A5B 88 DEY ;Y csökkentése 1-gyel . 1A5C A9 2E LDA #$2E ;ebben az esetben rövidítés miatt . 1A5E 99 F0 06 STA $06F0,Y ;pont kerül az azonosító utolsó karakterére . 1A61 A0 00 LDY #$00 ;itt kezdődik a tényleges nyomtatás a papírra, Y törlése . 1A63 B9 00 1F LDA $1F00,Y ;ciklus: a lista fejlécének nyomtatása, fejlécadatok olvasása a program végéről . 1A66 F0 06 BEQ $1A6E ;ha a felolvasott karakter végjel, akkor kilépés a ciklusból . 1A68 20 D2 FF JSR $FFD2 ;karakter kiküldése a nyomtatóra . 1A6B C8 INY ;index a következő karakterre . 1A6C D0 F5 BNE $1A63 ;a fejléc hossza maximum 256 karakter lehet, így mindig ugrás vissza a következő fejlécadat olvasásához . 1A6E A6 D7 LDX $D7 ;rekordok számának nyomtatása a papírra a fejléc után . 1A70 A5 D8 LDA $D8 ;rekordok számának beolvasása . 1A72 20 5F A4 JSR $A45F ;a szám karakterekké alakítása és, a szám kiküldése a nyomtatóra . 1A75 A0 00 LDY #$00 ;Y törlése . 1A77 B9 C0 1E LDA $1EC0,Y ;a kiírt szám után "DB PROGRAM" és a dátum nyomtatása . 1A7A F0 06 BEQ $1A82 ;ha a felolvasott karakter végjel volt, akkor kilépés a ciklusból . 1A7C 20 D2 FF JSR $FFD2 ;karakter kiküldése a nyomtatóra . 1A7F C8 INY ;index a következő karakterre . 1A80 D0 F5 BNE $1A77 ;ez a rész mindig kevesebb 256 karakternél, így mindig ugrás vissza a következő karakter olvasásához . 1A82 20 1F 11 JSR $111F ;rekordok nyomtatása, az adatterület elejének inicializálása . 1A85 A9 0B LDA #$0B ;a korábban kinyomtatott fejléc 11 sort tartalmazott, ezért ez kerül . 1A87 85 DE STA $DE ;az aktuális sorszámlálóba, $DE-be mentve . 1A89 D0 1D BNE $1AA8 ;mindig ugrás tovább . 1A8B 20 99 13 JSR $1399 ;ciklus: egy új listaoldal nyomtatása, küldése a nyomtatóra, nyomtatófej a következő sor elejére . 1A8E 20 96 13 JSR $1396 ; küldése a nyomtatóra a maradék papíron lapdobás . 1A91 A9 00 LDA #$00 ;A törlése . 1A93 85 DE STA $DE ;sorszámláló nullázása . 1A95 A4 E1 LDY $E1 ;hasábok számának betöltése . 1A97 88 DEY ;Y csökkentése . 1A98 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 . 1A9B D0 04 BNE $1AA1 ;rekordmutató felső bájtjának betöltése, ha nem végjel, akkor tovább . 1A9D 88 DEY ;index az eggyel megelőző hasábra . 1A9E 18 CLC ;Carry törlése . 1A9F 90 F7 BCC $1A98 ;mindig ugrás vissza . 1AA1 85 D3 STA $D3 ;mentés $D3-ra . 1AA3 B9 33 03 LDA $0333,Y ;a mutató alsó bájtjának betöltése . 1AA6 85 D2 STA $D2 ;mentése $D2-re . 1AA8 A0 00 LDY #$00 ;lista fejléc inicializálása . 1AAA 98 TYA ;A-ba végjel kerül . 1AAB 99 33 03 STA $0333,Y ;puffer törlése . 1AAE 99 F0 05 STA $05F0,Y ;puffer törlése . 1AB1 C8 INY ;index növelése . 1AB2 D0 F7 BNE $1AAB ;ugrás vissza, teljes pufferlapok nullázása . 1AB4 A5 D6 LDA $D6 ;lapon a sorok számának beolvasása . 1AB6 38 SEC ;kivonáshoz Carry beállítása . 1AB7 E5 DE SBC $DE ;kivonva belőle a korábban már kinyomtatott fejléc sorainak a száma . 1AB9 85 DB STA $DB ;elmentése $DB-re . 1ABB A5 D2 LDA $D2 ;ciklus: az oldalon nyomtatáshoz a hasábok kezdőcímeinek keresése . 1ABD 99 33 03 STA $0333,Y ;rekordmutató alsó bájtjának olvasása és mentése . 1AC0 A5 D3 LDA $D3 ;rekordmutató felső bájtjának olvasása . 1AC2 99 F0 05 STA $05F0,Y ;rekordmutató felső bájtjának mentése . 1AC5 A2 00 LDX #$00 ;X törlése . 1AC7 20 28 11 JSR $1128 ;rekordmutató növelése a következő rekord elejére . 1ACA 84 02 STY $02 ;Y mentése . 1ACC A0 00 LDY #$00 ;Y törlése . 1ACE 20 59 11 JSR $1159 ;első bájt felolvasása a rekordból . 1AD1 F0 0C BEQ $1ADF ;ha végjel, akkor kilépés a címkereső rutinból . 1AD3 A4 02 LDY $02 ;Y visszatöltése . 1AD5 E8 INX ;következő nyomtatási sor jön . 1AD6 E4 DB CPX $DB ;ha X nem érte el az utolsó sort a lapon, . 1AD8 D0 ED BNE $1AC7 ;vissza a rekordmutató növeléséhez . 1ADA C8 INY ;következő hasáb címének kereséséhez Y növelése . 1ADB C4 E1 CPY $E1 ;ha nem érte el X még a hasábok számát . 1ADD D0 DC BNE $1ABB ;akkor vissza a rekordmutató növeléséhez . 1ADF A9 00 LDA #$00 ;A törlése . 1AE1 85 DB STA $DB ;munkamutató nullázása . 1AE3 85 DC STA $DC ; . 1AE5 AA TAX ;ciklus: a lista fejlécének kiküldése a papírra, hasábszámláló, X törlése . 1AE6 A0 00 LDY #$00 ;Y törlése . 1AE8 B9 F0 06 LDA $06F0,Y ;nyomtatási lista fejlécének olvasása . 1AEB F0 06 BEQ $1AF3 ;ha végjel, akkor kilépés a ciklusból . 1AED 20 D2 FF JSR $FFD2 ;karakter kiküldése a nyomtatóra . 1AF0 C8 INY ;tovább a következő karakterre . 1AF1 D0 F5 BNE $1AE8 ;vissza a ciklus elejére . 1AF3 E8 INX ;következő hasábhoz az X növelése . 1AF4 E4 E1 CPX $E1 ;ha X elérte a hasábok számát . 1AF6 F0 05 BEQ $1AFD ;kilépés a ciklusból . 1AF8 20 9C 13 JSR $139C ;szóköz nyomtatása a papírra . 1AFB 90 E9 BCC $1AE6 ;vissza a következő hasábhoz tartozó fejléc nyomtatásához . 1AFD 20 99 13 JSR $1399 ;Az összes hasáb fejlécének nyomtatása után, küldése a nyomtatóra, új sor jön . 1B00 A9 C0 LDA #$C0 ;vízszintes vonal kódjának . 1B02 20 D2 FF JSR $FFD2 ;ciklus: kiküldése a nyomtatóra . 1B05 E6 DB INC $DB ;oszlopszámláló növelése . 1B07 D0 02 BNE $1B0B ;átvitel esetén . 1B09 E6 DC INC $DC ;a felső bájt növelése . 1B0B A4 DC LDY $DC ;a számláló felső bájtja . 1B0D C4 D5 CPY $D5 ;ha kevesebb a lapszélesség felső bájtjánál . 1B0F 90 F1 BCC $1B02 ;vissza újabb karakter kiküldésére . 1B11 A4 DB LDY $DB ;a számláló alsó bájtja . 1B13 C4 D4 CPY $D4 ;ha kevesebb a lapszélesség alsó bájtjánál . 1B15 90 EB BCC $1B02 ;vissza újabb karakter kiküldésére . 1B17 20 99 13 JSR $1399 ;Az összes hasáb fejlécének aláhúzása után, küldése a nyomtatóra, új sor jön . 1B1A A2 00 LDX #$00 ;X törlése . 1B1C BD F0 05 LDA $05F0,X ;ciklus: adatnyomtatás, a hasábhoz tartozó rekord mutató felső bájtjának betöltése . 1B1F F0 4F BEQ $1B70 ;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 . 1B21 85 D3 STA $D3 ;a betöltött mutató mentése $D3-ra . 1B23 BD 33 03 LDA $0333,X ;a hasábhoz tartozó rekord mutató alsó bájtjának betöltése . 1B26 85 D2 STA $D2 ;mentése $D2-re . 1B28 A5 D3 LDA $D3 ;ha a mutató felső bájtja . 1B2A C5 E3 CMP $E3 ;még nem érte el az adatterület végét . 1B2C 90 0A BCC $1B38 ;akkor tovább . 1B2E F0 02 BEQ $1B32 ;ha éppen megegyezik vele, tovább az alsó bájt ellenőrzéséhez . 1B30 B0 04 BCS $1B36 ;ha több tovább . 1B32 A5 D2 LDA $D2 ;ha a mutató alsó bájtja . 1B34 C5 E2 CMP $E2 ;elérte az adatterület végét . 1B36 B0 38 BCS $1B70 ;akkor tovább . 1B38 8A TXA ;X mentése . 1B39 48 PHA . 1B3A A5 D3 LDA $D3 ;rekordmutató betöltése . 1B3C A6 D2 LDX $D2 . 1B3E A4 DF LDY $DF ;Y-ba a korrigált névhossz . 1B40 20 3F 13 JSR $133F ;programnév kiküldése a nyomtatóra . 1B43 20 2E 11 JSR $112E ;rekordmutató növelése a név hosszával . 1B46 A4 E0 LDY $E0 ;ha a korrigált azonosítóhossz . 1B48 F0 10 BEQ $1B5A ;0, akkor nincs azonosító nyomtatása, tovább . 1B4A 20 9C 13 JSR $139C ;szóköz nyomtatása a papírra . 1B4D A5 D3 LDA $D3 ;rekordmutató betöltése, . 1B4F A6 D2 LDX $D2 ;ami már az azonosító adatra mutat . 1B51 20 3F 13 JSR $133F ;azonosító kiküldése a nyomtatóra . 1B54 AD 5F 11 LDA $115F ;azonosítóhossz betöltése . 1B57 20 31 11 JSR $1131 ;rekordmutató megnövelése, a rekordmutató a következő rekord elejére mutat . 1B5A 68 PLA ;X visszatöltése . 1B5B AA TAX . 1B5C A5 D2 LDA $D2 ;az aktuális hasábhoz tartozó . 1B5E 9D 33 03 STA $0333,X ;az aktualizált rekordmutató elmentése . 1B61 A5 D3 LDA $D3 . 1B63 9D F0 05 STA $05F0,X . 1B66 E8 INX ;tovább a következő hasábra . 1B67 E4 E1 CPX $E1 ;ha a számláló . 1B69 F0 05 BEQ $1B70 ;elérte az utolsó hasábot, akkor tovább új sor nyomtatásához . 1B6B 20 9C 13 JSR $139C ;szóköz nyomtatása a papírra, következő hasáb jön . 1B6E 90 AC BCC $1B1C ;ha rendben volt, vissza az adatnyomtatáshoz . 1B70 20 99 13 JSR $1399 ; küldése a nyomtatóra, új sor jön . 1B73 E6 DE INC $DE ;sorszámláló növelése . 1B75 A5 DE LDA $DE ;ha a sorszámláló . 1B77 C5 D6 CMP $D6 ;nem érte el a lapon az utolsó sort . 1B79 D0 9F BNE $1B1A ;akkor vissza új adatsor nyomtatásához . 1B7B A2 00 LDX #$00 ;X törlése . 1B7D BD F0 05 LDA $05F0,X ;ciklus: a rekordmutató ellenőrzése, hogy elérte-e az adatterület végét, . 1B80 C5 E3 CMP $E3 ;ha a hasáb rekordmutatójának felső bájtja . 1B82 90 0B BCC $1B8F ;még nem érte el az adatterület végét, akkor tovább a következő hasáb mutatójára . 1B84 F0 02 BEQ $1B88 ;ha megyegyezik, akkor tovább az alsó bájt ellenőrzéséhez . 1B86 B0 0F BCS $1B97 ;ha nagyobb, akkor kilépés, a példány nyomtatásának befejezése . 1B88 BD 33 03 LDA $0333,X ;ha a mutató alsó bájtja . 1B8B C5 E2 CMP $E2 ;elérte az adatterület végét, . 1B8D B0 08 BCS $1B97 ;akkor kilépés, a példány nyomtatásának befejezése . 1B8F E8 INX ;X növelése, tovább a következő hasáb mutatójához . 1B90 E4 E1 CPX $E1 ;ha a hasábszámláló még nem ért el az utolsóhoz . 1B92 D0 E9 BNE $1B7D ;vissza a mutatók elenőrzésére . 1B94 4C 8B 1A JMP $1A8B ;vissza a nyomtató rutin elejére, következő oldal nyomtatására . 1B97 20 99 13 JSR $1399 ; küldése a nyomtatóra, új sor jön . 1B9A 20 96 13 JSR $1396 ; küldése a nyomtatóra a maradék papíron lapdobás . 1B9D E6 DA INC $DA ;a nyomtatott példány számlálójának növelése . 1B9F A5 DA LDA $DA ;ha a számláló . 1BA1 C5 D9 CMP $D9 ;elérte a korábban megadott példányszámot . 1BA3 F0 03 BEQ $1BA8 ;kilépés és a nyomtatás befejezése . 1BA5 4C 61 1A JMP $1A61 ;egyébként vissza új példány nyomtatásához . 1BA8 20 CC FF JSR $FFCC ;CLRCH, a kiviteli csatorna visszaállítása képernyőre . 1BAB A9 04 LDA #$04 ;a nyitott printercsatorna lezárása . 1BAD 20 C3 FF JSR $FFC3 ;CLOSE . 1BB0 4C 9C 11 JMP $119C ;vissza a főprogramba Alprogram: A program kimentése a korábban bevitt adatokkal együtt kazettára vagy lemezre . 1BB3 20 3C 11 JSR $113C ;rekordok összeszámolása, $D2-$D3 mutató az adatterület végére mutat . 1BB6 A5 D2 LDA $D2 ;$D2 bekérése . 1BB8 29 F8 AND #$F8 ;alsó 3 bit törlése . 1BBA 18 CLC ;Carry törlése összeadáshoz . 1BBB 69 08 ADC #$08 ;8 hozzáadása (a mentés mindig egy monitor listasorig történik) . 1BBD 85 D2 STA $D2 ;a korrigált érték visszamentése $D2-re . 1BBF 90 02 BCC $1BC3 ;ha nem volt laphatár, ugrás . 1BC1 E6 D3 INC $D3 ;laphatár esetén $D3 növelése 1-gyel . 1BC3 A5 D3 LDA $D3 ;$D3 bekérése . 1BC5 C5 38 CMP $38 ;ha nem a teljes BASIC RAM végén áll . 1BC7 90 04 BCC $1BCD ;akkor urgás tovább . 1BC9 A9 00 LDA #$00 ;ha a RAM végén van, a $D2-be 00 kerül (ez a pár sor csak biztonsági okból van itt . 1BCB 85 D2 STA $D2 ;a korábbi korrekció amúgyis ezt adta volna ki) . 1BCD A9 00 LDA #$00 ;a mentés előkészítése, mutatók feltöltése . 1BCF 85 9B STA $9B ;BASIC terület kezdete ($1000) kerül . 1BD1 A9 10 LDA #$10 . 1BD3 85 9C STA $9C ;a mentés elejét tartalmazó $9B-$9C-be . 1BD5 A5 D2 LDA $D2 ;$D2-$D3 a teljes adatterület végét mutató érték . 1BD7 85 2D STA $2D ;kerül a program végét jelölő helyekre . 1BD9 85 2F STA $2F ;$2D-$2E, $2F-$30, $31-$32 . 1BDB 85 31 STA $31 ;biztonsági okból, . 1BDD A5 D3 LDA $D3 ;hogy a BASIC értelmező nehogy . 1BDF 85 2E STA $2E ;OUT OF MEMORY ERROR-ral leálljon . 1BE1 85 30 STA $30 . 1BE3 85 32 STA $32 . 1BE5 A9 12 LDA #$12 ;A mentés almenüjének összeállítása . 1BE7 A2 72 LDX #$72 ;"A PROGRAM KIMENTESE" szöveg . 1BE9 A0 11 LDY #$11 ; . 1BEB 20 26 13 JSR $1326 ;kiíratása a képernyőre, képernyőtörlés után . 1BEE A9 11 LDA #$11 ;"1. " szöveg kiíratása . 1BF0 A2 F5 LDX #$F5 . 1BF2 A0 03 LDY #$03 . 1BF4 20 38 13 JSR $1338 ;a képernyőre 2 sorral lejjebb új sorban . 1BF7 20 4F FF JSR $FF4F ;1. menüpont: TAPE >1BFA 54 41 50 45 00 : TAPE. . 1BFF A9 12 LDA #$12 ;"2. " szöveg kiíratása . 1C01 A2 11 LDX #$11 . 1C03 A0 03 LDY #$03 . 1C05 20 38 13 JSR $1338 ;a képernyőre . 1C08 20 4F FF JSR $FF4F 2. menüpont: DISK >1C0B 44 49 53 4B 0D 1D 1B 54 : DISK...T >1C13 00 : . a második menüpont után ablak készítése, az esetleges rendszerüzenetek miatt . 1C14 20 20 10 JSR $1020 ;billentyűleütés olvasása . 1C17 C9 1B CMP #$1B ;ha nem ESC . 1C19 D0 03 BNE $1C1E ;akkor tovább . 1C1B 4C 9C 11 JMP $119C ;visszatérés a főprogramba . 1C1E C9 31 CMP #$31 ;ha "1" volt . 1C20 F0 25 BEQ $1C47 ;akkor mentés kazettára, urás tovább . 1C22 C9 32 CMP #$32 ;ha nem "2" volt . 1C24 D0 EE BNE $1C14 ;akkor vissza, új billentyűre várva Alprogram: program kimentése lemezre . 1C26 20 70 1C JSR $1C70 ;a program nevében a szám növelése, hogy a lemezen ne legyen felülírási hiba . 1C29 A9 01 LDA #$01 ;Mentéshez előkészítése . 1C2B A2 08 LDX #$08 ;save-hez csatorna beállítása (1 file, 8-as egységre, . 1C2D A0 00 LDY #$00 ;tartomány jelzése: 0, normál BASIC memória terület mentése a $2D-$2E-ig . 1C2F 20 BA FF JSR $FFBA ;SETLFS . 1C32 A9 10 LDA #$10 ;program nevének megadása a save-hez . 1C34 A2 00 LDX #$00 ;a név helye $1E00-on, és 16 karakter hosszú . 1C36 A0 1E LDY #$1E . 1C38 20 BD FF JSR $FFBD ;SETNAM . 1C3B 20 E1 A7 JSR $A7E1 ;SAVE, program kimentése lemezre . 1C3E 4C 9C 11 JMP $119C ;visszatérés a főprogramba >1C41 00 00 00 00 00 00 : ...... Alprogram: program kimentése kazettára . 1C47 20 70 1C JSR $1C70 ;a program nevében a szám megnövelése, így a kazettán egymás után növekvő szorszámúak . 1C4A A9 86 LDA #$86 ;a program mentése HER-Turbóval történik . 1C4C 8D 30 03 STA $0330 ;save cím átírása, a $0331-$0331-re . 1C4F A9 1C LDA #$1C ;a turbó program kezdete: $1C86-nál . 1C51 8D 31 03 STA $0331 . 1C54 A9 01 LDA #$01 ;save-hez csatorna nyitása (1 file kazettára) . 1C56 AA TAX ;eszköz:1, adatirány:1 (írás), tartomány:1 (külön megadva) . 1C57 A8 TAY ;1: megadott terület mentése . 1C58 20 BA FF JSR $FFBA ;SETLFS . 1C5B A9 9B LDA #$9B ;mentési memóriatartomány beállítása . 1C5D A6 D2 LDX $D2 ;$B2-$B3-ra $9B-$9C-ben a kezdő cím ($1000), . 1C5F A4 D3 LDY $D3 ;$9D-$9E-re a mentés végének címe $D2-$D3 . 1C61 20 D8 FF JSR $FFD8 ;SAVESP; ugrás a HER-Turbóra: ($0330)->$1C86, program mentése turbóval . 1C64 A9 0D LDA #$0D ;mentés után, billenytűpufferbe RETURN . 1C66 8D 27 05 STA $0527 ;azért, hogy a mentés végén a dátum bekérésekor automatikus bevitel legyen . 1C69 A9 01 LDA #$01 ;puffer hossza 1, karakter olvasása az IRQ-részére . 1C6B 85 EF STA $EF ;hiba esetén is automatikusan térjen vissza a program . 1C6D 4C 60 11 JMP $1160 ;visszaurgás az egész program kezdetére (mentés esetén a keret más színre válthat) Szubrutin: A mentési névben a sorszám megnövelése 1-gyel ("PROGRAM NY.T. 01") . 1C70 A2 01 LDX #$01 ;két számjegy szerepel a névben . 1C72 FE 0E 1E INC $1E0E,X ;ciklus: számjegy megnövelése . 1C75 BD 0E 1E LDA $1E0E,X ;számjegy bekérése . 1C78 C9 3A CMP #$3A ;ha nagyobb "9" értéknél . 1C7A B0 01 BCS $1C7D ;akkor korrekció, ugrás tovább . 1C7C 60 RTS . 1C7D A9 30 LDA #$30 ;"0" . 1C7F 9D 0E 1E STA $1E0E,X ;mentése a megnövelt számjegy helyére . 1C82 CA DEX ;X csökkentése, mutató az eggyel nagyobb helyiértékű következő számjegyre . 1C83 10 ED BPL $1C72 ;ha X még nem ment át negatívba, akkor visszaugrás a számjegy növelésére . 1C85 60 RTS Alprogram: HER-Turbó rutin a kazettára mentéshez . 1C86 A5 B2 LDA $B2 ;kezdőcím $1EBB-$1EBC-re . 1C88 8D BB 1E STA $1EBB . 1C8B A5 B3 LDA $B3 . 1C8D 8D BC 1E STA $1EBC . 1C90 A5 9D LDA $9D ;végcím $1EBD-$1EBE-re . 1C92 8D BD 1E STA $1EBD . 1C95 A5 9E LDA $9E . 1C97 8D BE 1E STA $1EBE . 1C9A A0 32 LDY #$32 ;50 adat átmásolása . 1C9C B9 C9 1D LDA $1DC9,Y ;ciklus: $1DCA-$1DFC rutin lemásolása . 1C9F 99 FF 06 STA $06FF,Y ;$0700-$0731-re (gyakorlatilag a BASIC verem elejére) . 1CA2 88 DEY . 1CA3 D0 F7 BNE $1C9C . 1CA5 20 19 E3 JSR $E319 ;"PRESS PLAY & RECORD ON TAPE" kiírása . 1CA8 A9 48 LDA #$48 ;BSOUT vektor a $0348-ra mutat . 1CAA 8D 24 03 STA $0324 . 1CAD A9 03 LDA #$03 . 1CAF 8D 25 03 STA $0325 . 1CB2 A9 A4 LDA #$A4 ;SAVE vektor újra a $F1A4-re mutat . 1CB4 8D 30 03 STA $0330 . 1CB7 A9 F1 LDA #$F1 . 1CB9 8D 31 03 STA $0331 . 1CBC A9 01 LDA #$01 ;mentéshez open csatorna előkészítése: 1,1,1 . 1CBE AA TAX . 1CBF A8 TAY . 1CC0 20 BA FF JSR $FFBA ;SETLFS . 1CC3 A9 BC LDA #$BC ;program nevének megadása a save-hez . 1CC5 A2 00 LDX #$00 ;$1e00-nál kezdődik, . 1CC7 A0 1E LDY #$1E ;amelyben benne van utána a gyorstöltő rutin is . 1CC9 20 BD FF JSR $FFBD ;SETNAM . 1CCC A9 00 LDA #$00 ;$9A-ba 0, üzenetek letiltása . 1CCE 85 9A STA $9A . 1CD0 A9 03 LDA #$03 ;$22-$23-ra $0324 a mentési tartomány kezdete . 1CD2 85 23 STA $23 . 1CD4 A9 24 LDA #$24 . 1CD6 85 22 STA $22 . 1CD8 A9 22 LDA #$22 ;a mentési tartomány: $0324-$0325 . 1CDA A0 03 LDY #$03 ;ekkor a BSOUT vektor $0348-ra mutat . 1CDC A2 26 LDX #$26 ;a névvel csak a BSOUT vektort menti a program az elején normál sebességgel . 1CDE 20 D8 FF JSR $FFD8 ;SAVESP, ugrás $F1A4 normál save-re, filenévben a töltő rutin kiküldése szalagra . 1CE1 A9 4B LDA #$4B ;$0324-$0325-en a vektor visszaállítása . 1CE3 8D 24 03 STA $0324 ;standard BSOUT $EC4B-re . 1CE6 A9 EC LDA #$EC . 1CE8 8D 25 03 STA $0325 . 1CEB A9 00 LDA #$00 ;A,X,Y törlése . 1CED AA TAX ; . 1CEE A8 TAY . 1CEF 85 B2 STA $B2 ;$B2-$B3-ra $0700 . 1CF1 A9 07 LDA #$07 . 1CF3 85 B3 STA $B3 . 1CF5 85 9E STA $9E ;$9D-$9E-re $0733 . 1CF7 A9 33 LDA #$33 . 1CF9 85 9D STA $9D . 1CFB 20 1A 1D JSR $1D1A ;mentés turbóval . 1CFE A9 80 LDA #$80 ;$9A-ra #$80 . 1D00 85 9A STA $9A ;üzenetek bekapcsolása . 1D02 A2 00 LDX #$00 . 1D04 A0 00 LDY #$00 . 1D06 AD BB 1E LDA $1EBB ;program mentési területének visszatöltése . 1D09 85 B2 STA $B2 ;$B2-$B3-ra ($1EBB) . 1D0B AD BC 1E LDA $1EBC . 1D0E 85 B3 STA $B3 . 1D10 AD BD 1E LDA $1EBD ;$9D-$9E-re ($1EBD) . 1D13 85 9D STA $9D . 1D15 AD BE 1E LDA $1EBE . 1D18 85 9E STA $9E . 1D1A 20 64 1D JSR $1D64 ;terület mentése turbóval, turbó inicializálás . 1D1D A5 B2 LDA $B2 ;kezdőcím alsó bájt . 1D1F 20 92 1D JSR $1D92 ;kiküldése kazettára . 1D22 A5 B3 LDA $B3 ;kezdőcím felső bájt . 1D24 20 92 1D JSR $1D92 ;kiküldése kazettára . 1D27 A5 9D LDA $9D ;program végcímének alsó bájtja . 1D29 20 92 1D JSR $1D92 ;kiküldése kazettára . 1D2C A5 9E LDA $9E ;program végcímének felső bájtja . 1D2E 20 92 1D JSR $1D92 ;kiküldése kazettára . 1D31 84 B4 STY $B4 ;ellenőrzőkód, $B4 törlése . 1D33 A4 B2 LDY $B2 ;mutató alsó bájtja Y-ba . 1D35 A9 00 LDA #$00 ;$B2-re 0, lapok mentéséhez . 1D37 85 B2 STA $B2 . 1D39 B1 B2 LDA ($B2),Y ;bájt olvasása a RAM-ból . 1D3B 20 92 1D JSR $1D92 ;bájt kiküldése kazettára . 1D3E C8 INY ;tovább a következő bájtra . 1D3F D0 02 BNE $1D43 ;ha még nem érte a lap végét, ugrás vissza a következőre . 1D41 E6 B3 INC $B3 ;mutató felső bájtjának növelése . 1D43 C4 9D CPY $9D ;összehaasonlítás a végcím alsó bájtjával . 1D45 A5 B3 LDA $B3 ;mutató felső bájtjából . 1D47 E5 9E SBC $9E ;a végcím felső bájtjának kivonása . 1D49 90 EE BCC $1D39 ;ha még nem végzett a teljes program kimentésével, vissza a következőre . 1D4B A5 B4 LDA $B4 ;ellenőrzőkód betöltése . 1D4D 20 92 1D JSR $1D92 ;bájt kiküldése kazettára . 1D50 20 A6 1D JSR $1DA6 ;plusz 1 bit kiküldése . 1D53 A9 1B LDA #$1B ;képernyő . 1D55 8D 06 FF STA $FF06 ;visszakapcsolása . 1D58 8D 3E FF STA $FF3E ;váltás ROM-ra . 1D5B A9 08 LDA #$08 ;kazettamotor . 1D5D 85 01 STA $01 ;leállítása . 1D5F 58 CLI ;megszakítás engedélyezése . 1D60 60 RTS ;kilépés a turbóból, visszatérés . 1D61 00 BRK . 1D62 00 BRK . 1D63 00 BRK . 1D64 78 SEI ;turbó inic, megszakítás törlése . 1D65 8D 3F FF STA $FF3F ;váltás RAM-ra . 1D68 A9 00 LDA #$00 ;kazetta motor bekapcsolása . 1D6A 85 01 STA $01 . 1D6C A9 0B LDA #$0B ;képernyő kikapcsolása . 1D6E 8D 06 FF STA $FF06 . 1D71 CA DEX ;ciklus: késleltetés, X pörgetése . 1D72 D0 FD BNE $1D71 . 1D74 88 DEY ;Y pörgetése . 1D75 D0 FA BNE $1D71 ;ha még nem végzett, vissza a pörgetésre . 1D77 A9 A0 LDA #$A0 ;Timer2 . 1D79 8D 02 FF STA $FF02 . 1D7C A9 00 LDA #$00 . 1D7E 8D 03 FF STA $FF03 ;beállítása . 1D81 A9 10 LDA #$10 ;Timer2 . 1D83 8D 09 FF STA $FF09 ;irq törlése . 1D86 A0 40 LDY #$40 ;a bevezető szinkronizációs rész hossza 64 karakter . 1D88 A9 10 LDA #$10 ;szinkronizáló kód értéke A-ba . 1D8A 20 92 1D JSR $1D92 ;bájt kiküldése kazettára . 1D8D 88 DEY ;számláló csökkentése . 1D8E D0 F8 BNE $1D88 ;ha még nem végzett, vissza a többi kiküldésére . 1D90 A9 5A LDA #$5A ;szinkronizáció utáni ellenőrző kezdő kód . 1D92 85 AB STA $AB ;egy bájt kiküldése kazettára, mentése $AB-ben . 1D94 45 B4 EOR $B4 ;az ellenőrzőkóddal kizáró vagy . 1D96 85 B4 STA $B4 ;és elmentése . 1D98 A9 08 LDA #$08 ;#$08 $AC-be . 1D9A 85 AC STA $AC . 1D9C 26 AB ROL $AB ;a küldendő bájt shiftelése . 1D9E 20 A6 1D JSR $1DA6 ;bit kiküldése . 1DA1 C6 AC DEC $AC ;számláló csökkentése . 1DA3 D0 F7 BNE $1D9C ;ha még nem végzett mind a 8 shifteléssel, akkor ugrás vissza . 1DA5 60 RTS . 1DA6 A2 6C LDX #$6C ;egy bit kiküldése, Timer2 értéke: X-be #$6C . 1DA8 90 02 BCC $1DAC ;ha a bit 0 volt, ugrás . 1DAA A2 FF LDX #$FF ;X-be #$FF . 1DAC 20 AF 1D JSR $1DAF ;bit kiküldése vonalra . 1DAF A9 10 LDA #$10 ;Timer2 irq . 1DB1 2C 09 FF BIT $FF09 ;figyelése . 1DB4 F0 FB BEQ $1DB1 ;ha a számláló még nem futott le, ugrás . 1DB6 48 PHA ;A mentése . 1DB7 A9 00 LDA #$00 ;A törlése . 1DB9 8E 02 FF STX $FF02 ;Timer2 beállítása: 0 esetén: $006C . 1DBC 8D 03 FF STA $FF03 ;1 esetén: $00FF . 1DBF 68 PLA ;A visszatöltése . 1DC0 8D 09 FF STA $FF09 ;Timer2 irq törlése . 1DC3 A5 01 LDA $01 ;kazetta vonal olvasása . 1DC5 49 02 EOR #$02 ;a tape write vonal . 1DC7 85 01 STA $01 ;jelállapotváltása . 1DC9 60 RTS Her-Turbó töltés utáni ellenőrző rutinja a $0700-$0732-re kerül . 1DCA 8D 3F FF STA $FF3F ;. 0700 8D 3F FF STA $FF3F ;váltás RAM-ra . 1DCD EE 19 FF INC $FF19 ;. 0703 EE 19 FF INC $FF19 ;keret színének növelése . 1DD0 18 CLC ;. 0706 18 CLC ;Carry törlése . 1DD1 20 4F 03 JSR $034F ;. 0707 20 4F 03 JSR $034F ;adatok töltése kazettáról . 1DD4 8D 3E FF STA $FF3E ;. 070A 8D 3E FF STA $FF3E ;váltás ROM-ra . 1DD7 A9 00 LDA #$00 ;. 070D A9 00 LDA #$00 ;fekete szín . 1DD9 8D 3B 05 STA $053B ;. 070F 8D 3B 05 STA $053B ;a karakterek színe . 1DDC 58 CLI ;. 0712 58 CLI ;megszakítás engedélyezése . 1DDD 20 8A FF JSR $FF8A ;. 0713 20 8A FF JSR $FF8A ;RESTORE . 1DE0 20 84 FF JSR $FF84 ;. 0716 20 84 FF JSR $FF84 ;IOINIT, kazettamotor kikapcsolása . 1DE3 A5 9E LDA $9E ;. 0719 A5 9E LDA $9E ;ha az ellenőrzőkód . 1DE5 C5 9D CMP $9D ;. 071B C5 9D CMP $9D ;megegyezik a $9D-vel . 1DE7 F0 05 BEQ $1DEE ;. 071D F0 05 BEQ $0724 ;akkor a betöltés rendben volt, tovább . 1DE9 A2 1D LDX #$1D ;. 071F A2 1D LDX #$1D ;?LOAD error . 1DEB 4C 83 86 JMP $8683 ;. 0721 4C 83 86 JMP $8683 ;kiíratása, és visszatérés BASIC-be . 1DEE A9 FF LDA #$FF ;. 0724 A9 FF LDA #$FF ;kurzor . 1DF0 8D 0C FF STA $FF0C ;. 0726 8D 0C FF STA $FF0C ;képernyőn . 1DF3 8D 0D FF STA $FF0D ;. 0729 8D 0D FF STA $FF0D ;kívülre . 1DF6 20 9D 8A JSR $8A9D ;. 072C 20 9D 8A JSR $8A9D ;BASIC CLR, inic . 1DF9 4C 03 87 JMP $8703 ;. 072F 4C 03 87 JMP $8703 ;visszatérés BASIC-be . 1DFC 00 BRK ;. 0732 00 BRK . 1DFD 00 BRK . 1DFE 00 BRK . 1DFF 00 BRK Program neve mentéshez, az utolsó két számjegy minden mentéskor növekszik egyet >1E00 50 52 4F 47 52 41 4D 20 : PROGRAM >1E08 4E 59 2E 54 2E 20 30 31 : NY.T. 01 >1E10 20 : Her-turbó gyorstöltő programja . 1E11 AD 19 FF LDA $FF19 ;. 0348 AD 19 FF LDA $FF19 ;turbó belépési pontja, keret színének mentése . 1E14 85 22 STA $22 ;. 034B 85 22 STA $22 ;első körben a $700-$731 közti rutin betöltése turbóval . 1E16 38 SEC ;. 034D 38 SEC ;Carry beállítása . 1E17 78 SEI ;. 034E 78 SEI ;megszakítás tiltása . 1E18 08 PHP ;. 034F 08 PHP ;státusz mentése . 1E19 20 93 03 JSR $0393 ;. 0350 20 93 03 JSR $0393 ;inicializálás, szalag szinkronizációs bevezető olvasása . 1E1C 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 . 1E1F A8 TAY ;. 0356 A8 TAY ;mentése Y-ba . 1E20 A9 00 LDA #$00 ;. 0357 A9 00 LDA #$00 ;A törlése . 1E22 85 B2 STA $B2 ;. 0359 85 B2 STA $B2 ;$B2-re #$00 . 1E24 20 B8 03 JSR $03B8 ;. 035B 20 B8 03 JSR $03B8 ;kezdőcím felső bájtjának betöltése . 1E27 85 B3 STA $B3 ;. 035E 85 B3 STA $B3 ;mentése $B3-ra . 1E29 20 B8 03 JSR $03B8 ;. 0360 20 B8 03 JSR $03B8 ;végcím alsó bájtjának betöltése . 1E2C 85 2D STA $2D ;. 0363 85 2D STA $2D ;mentés $2D-re, a fájl végének alsó bájtja . 1E2E 20 B8 03 JSR $03B8 ;. 0365 20 B8 03 JSR $03B8 ;végcím felső bájtjának betöltése . 1E31 85 2E STA $2E ;. 0368 85 2E STA $2E ;mentés $2E-re, a fájl végének felső bájtja . 1E33 20 B8 03 JSR $03B8 ;. 036A 20 B8 03 JSR $03B8 ;bájt betöltése . 1E36 91 B2 STA ($B2),Y ;. 036D 91 B2 STA ($B2),Y ;mentés a RAM-ba . 1E38 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 . 1E3A 85 9E STA $9E ;. 0371 85 9E STA $9E ;és visszamentése . 1E3C C8 INY ;. 0373 C8 INY ;tovább a következő bájtra . 1E3D D0 05 BNE $1E44 ;. 0374 D0 05 BNE $037B ;ha még nem ér a lap végére, ugrás tovább . 1E3F E6 B3 INC $B3 ;. 0376 E6 B3 INC $B3 ;mutató felső bájtjának növelése . 1E41 EE 19 FF INC $FF19 ;. 0378 EE 19 FF INC $FF19 ;keret színének váltása . 1E44 C4 2D CPY $2D ;. 037B C4 2D CPY $2D ;ha a mutató alsó bájtja elérte . 1E46 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 . 1E48 E5 2E SBC $2E ;. 037F E5 2E SBC $2E ;még nem érte el a végcímet . 1E4A 90 E7 BCC $1E33 ;. 0381 90 E7 BCC $036A ;akkor vissza újabb bájt betöltésére . 1E4C 20 B8 03 JSR $03B8 ;. 0383 20 B8 03 JSR $03B8 ;ellenőrző kód betöltése . 1E4F 85 9D STA $9D ;. 0386 85 9D STA $9D ;mentése $9D-re . 1E51 A9 08 LDA #$08 ;. 0388 A9 08 LDA #$08 ;a Tape motorjának . 1E53 85 01 STA $01 ;. 038A 85 01 STA $01 ;kikapcsolása . 1E55 28 PLP ;. 038C 28 PLP ;státusz visszatöltése veremből . 1E56 B0 01 BCS $1E59 ;. 038D B0 01 BCS $0390 ;ha betöltötte a HER $700-as részét, ugrás a rutinra . 1E58 60 RTS ;. 038F 60 RTS ;egyébként visszatérés . 1E59 4C 00 07 JMP $0700 ;. 0390 4C 00 07 JMP $0700 ;turbóval történő munka befezezve, ugrás vissza . 1E5C A9 00 LDA #$00 ;. 0393 A9 00 LDA #$00 ;kazetta motor . 1E5E 85 01 STA $01 ;. 0395 85 01 STA $01 ;bekapcsolása . 1E60 CA DEX ;. 0397 CA DEX ;ciklus: késleltetés, X pörgetése . 1E61 D0 FD BNE $1E60 ;. 0398 D0 FD BNE $0397 ;256-ot leszámolt . 1E63 88 DEY ;. 039A 88 DEY ;Y pörgetése . 1E64 D0 FA BNE $1E60 ;. 039B D0 FA BNE $0397 ;ha nem végzett, ugrás vissza . 1E66 84 9E STY $9E ;. 039D 84 9E STY $9E ;Ellenőrzőkód törlése, $9E-re #$00 . 1E68 A2 00 LDX #$00 ;. 039F A2 00 LDX #$00 ;X törlése . 1E6A 20 C6 03 JSR $03C6 ;. 03A1 20 C6 03 JSR $03C6 ;1 bit beolvasása olvasása a tape read vonalról . 1E6D 26 AC ROL $AC ;. 03A4 26 AC ROL $AC ;olvasott bit betolása $AC-be . 1E6F A5 AC LDA $AC ;. 03A6 A5 AC LDA $AC ;$AC olvasása . 1E71 C9 10 CMP #$10 ;. 03A8 C9 10 CMP #$10 ;ha nem #$10 . 1E73 D0 F5 BNE $1E6A ;. 03AA D0 F5 BNE $03A1 ;újabb bit beolvasása . 1E75 20 B8 03 JSR $03B8 ;. 03AC 20 B8 03 JSR $03B8 ;egy byte beolvasása a Tape read vonalról . 1E78 C9 10 CMP #$10 ;. 03AF C9 10 CMP #$10 ;ha ez #$10 . 1E7A F0 F9 BEQ $1E75 ;. 03B1 F0 F9 BEQ $03AC ;akkor vissza újabb bájt olvasására . 1E7C C9 5A CMP #$5A ;. 03B3 C9 5A CMP #$5A ;ha ez nem az ellenőrző kód #$5A . 1E7E D0 EA BNE $1E6A ;. 03B5 D0 EA BNE $03A1 ;akkor vissza, a bájt bitjeinek tovább shifteléséhez . 1E80 60 RTS ;. 03B7 60 RTS ;vonal szinkronizálása kész, vissza . 1E81 A9 01 LDA #$01 ;. 03B8 A9 01 LDA #$01 ;8 bit olvasása a tape read vonalon . 1E83 85 AC STA $AC ;. 03BA 85 AC STA $AC ;$AC bit értékének beállítása #$01-re . 1E85 20 C6 03 JSR $03C6 ;. 03BC 20 C6 03 JSR $03C6 ;tape read, egy bit betöltése . 1E88 26 AC ROL $AC ;. 03BF 26 AC ROL $AC ;ha még nem végzett a mind a 8 bit beolvasásával . 1E8A 90 F9 BCC $1E85 ;. 03C1 90 F9 BCC $03BC ;vissza a vonal olvasására . 1E8C A5 AC LDA $AC ;. 03C3 A5 AC LDA $AC ;$AC betöltése, beolvasott byte $AC-ben . 1E8E 60 RTS ;. 03C5 60 RTS . 1E8F A9 10 LDA #$10 ;. 03C6 A9 10 LDA #$10 ;tape read vonal figyelése . 1E91 24 01 BIT $01 ;. 03C8 24 01 BIT $01 ;ha a vonal magas szinten van . 1E93 D0 FC BNE $1E91 ;. 03CA D0 FC BNE $03C8 ;ugrás vissza, várás a vonal 0 szintre ugrására . 1E95 24 01 BIT $01 ;. 03CC 24 01 BIT $01 ;read vonal újbóli figyelése . 1E97 F0 FC BEQ $1E95 ;. 03CE F0 FC BEQ $03CC ;ha nem volt jelváltás, várás, ugrás vissza . 1E99 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 . 1E9C 48 PHA ;. 03D3 48 PHA ;a beolvasott bit mentése verembe . 1E9D A9 01 LDA #$01 ;. 03D4 A9 01 LDA #$01 ;Timer2 időzítő értékének újbóli beállítása . 1E9F A2 78 LDX #$78 ;. 03D6 A2 78 LDX #$78 ;kb. 0,425 ms időzítés . 1EA1 8E 02 FF STX $FF02 ;. 03D8 8E 02 FF STX $FF02 ;Timer2 időzítésének . 1EA4 8D 03 FF STA $FF03 ;. 03DB 8D 03 FF STA $FF03 ;újraindítása . 1EA7 A9 10 LDA #$10 ;. 03DE A9 10 LDA #$10 ;Timer2 . 1EA9 8D 09 FF STA $FF09 ;. 03E0 8D 09 FF STA $FF09 ;Irq törlése . 1EAC AD 19 FF LDA $FF19 ;. 03E3 AD 19 FF LDA $FF19 ;a keret színének beolvasása . 1EAF 18 CLC ;. 03E6 18 CLC ;Carry törlése összeadáshoz . 1EB0 69 10 ADC #$10 ;. 03E7 69 10 ADC #$10 ;szín árnyalatának váltása eggyel világosabbra . 1EB2 8D 19 FF STA $FF19 ;. 03E9 8D 19 FF STA $FF19 ;új színkód mentése keretre . 1EB5 68 PLA ;. 03EC 68 PLA ;akku visszatöltése, a 4. bit hordozza az információt . 1EB6 0A ASL ;. 03ED 0A ASL ;a beolvasott bit . 1EB7 0A ASL ;. 03EE 0A ASL ;kitolása . 1EB8 0A ASL ;. 03EF 0A ASL ; . 1EB9 0A ASL ;. 03F0 0A ASL ;a Carrybe . 1EBA 60 RTS ;. 03F1 60 RTS Adatsor: save területe HER-Turbóhoz $1EBB-$1EBE >1EBB 00 10 20 B5 00 : .. 5. Adatsor: nyomtatáshoz, adatok mennyisége utáni szöveg, dátum kiíratása (a program ezt kéri be induláskor) >1EC0 20 44 42 20 50 52 4F 47 : DB PROG >1EC8 52 41 4D 20 20 20 20 20 : RAM >1ED0 20 20 20 0F 44 41 54 55 : .DATU >1ED8 4D 3A 20 32 30 31 34 2E : M: 2014. >1EE0 30 31 2E 32 32 2E 0D 0D : 01.22... >1EE8 1B 4C 1B 0F 00 00 00 00 : .L...... >1EF0 00 00 00 00 00 00 00 00 : ........ >1EF8 00 00 00 00 00 00 00 00 : ........ Adatsor: Nyomtatáshoz a papíron lévő fejlécadatok >1F00 0E 20 20 20 20 20 20 20 : . ;a fejlécadatban lévő vezérlőkódok >1F08 20 50 52 4F 47 52 41 4D : PROGRAM ;a Citizen 120D típusú nyomtatóhoz >1F10 4C 49 53 54 41 20 43 3D : LISTA C= ;lettek beállítva >1F18 50 4C 55 53 2F 34 2D 52 : PLUS/4-R >1F20 45 1B 46 0F 0D 0D 41 20 : E.F...A >1F28 50 52 4F 47 52 41 4D 4C : PROGRAML >1F30 49 53 54 41 20 54 55 4C : ISTA TUL >1F38 41 4A 44 4F 4E 4F 53 41 : AJDONOSA >1F40 20 3A 0D 0D 1B 47 1B 45 : :...G.E >1F48 54 4F 54 48 20 47 41 42 : TOTH GAB >1F50 4F 52 0D 53 5A 4F 4D 42 : OR.SZOMB >1F58 41 54 48 45 4C 59 0D 56 : ATHELY.V >1F60 41 43 49 20 4D 49 48 41 : ACI MIHA >1F68 4C 59 20 55 54 43 41 20 : LY UTCA >1F70 33 32 2E 20 46 53 5A 2E : 32. FSZ. >1F78 2F 33 2E 0D 20 20 39 37 : /3.. 97 >1F80 30 30 0E 20 20 20 20 20 : 00. >1F88 20 20 20 20 20 20 20 20 : >1F90 20 20 20 20 20 20 20 31 : 1 >1F98 44 20 3D 20 36 36 34 20 : D = 664 >1FA0 42 4C 4F 43 4B 0D 0D 0E : BLOCK... >1FA8 00 00 00 00 00 00 00 00 : ........ >1FB0 00 00 00 00 00 00 00 00 : ........ >1FB8 00 00 00 00 00 00 00 00 : ........ >1FC0 00 00 00 00 00 00 00 00 : ........ >1FC8 00 00 00 00 00 00 00 00 : ........ >1FD0 00 00 00 00 00 00 00 00 : ........ >1FD8 00 00 00 00 00 00 00 00 : ........ >1FE0 00 00 00 00 00 00 00 00 : ........ >1FE8 00 00 00 00 00 00 00 00 : ........ >1FF0 00 00 00 00 00 00 00 00 : ........ >1FF8 00 00 00 00 00 00 00 00 : ........