title Locomotive BASIC Interpreter Version 1.47 name ('BASIC') ; DASMed version of BASIC.COM - PCW MALLARD-BASIC interpreter ; By W. Cirsovius ; *** MODIFIED AGAINST V 1.29 *** .z80 aseg org 0100h TRUE equ 0ffh BDOS equ 0005h .vers equ 12 .resdsk equ 13 .seldsk equ 14 .open equ 15 .close equ 16 .srcfrs equ 17 .srcnxt equ 18 .delete equ 19 .make equ 22 .rename equ 23 .curdsk equ 25 .setdma equ 26 .usrcod equ 32 _drv equ 1 _nam equ 8 _ext equ 3 reclng equ 128 null equ 00h bell equ 07h bs equ 08h tab equ 09h lf equ 0ah cr equ 0dh eof equ 1ah esc equ 1bh rubout equ 7fh _CUL equ 'A'-'@' LOMASK equ 00000111b NoMSB equ 01111111b MSB equ 10000000b @FILE equ 1 @LST equ 2 @CONI equ 2 @CONO equ 3 ; ; File values ; l0030 equ 0030h ; Pointer to disk buffer l00ad equ 00adh ; *** MODIFIED AGAINST V 1.29 *** LSTCOL equ 132 ; Default printer width l0000 equ 00h l0001 equ 01h l0002 equ 02h l0004 equ 04h l0005 equ 05h l0006 equ 06h l0007 equ 07h l0008 equ 08h l0009 equ 09h l000a equ 0ah l000d equ 0dh l000f equ 0fh l001d equ 1dh l0021 equ 21h l0022 equ 22h l0024 equ 24h l0025 equ 25h l0026 equ 26h l0027 equ 27h l0028 equ 28h l002a equ 2ah l002c equ 2ch l002d equ 2dh l002e equ 2eh l002f equ 2fh l0032 equ 32h l003e equ 3eh l004f equ 4fh l0057 equ 57h l0058 equ 58h l005f equ 5fh l0063 equ 63h l0064 equ 64h l0069 equ 69h l007f equ 7fh l0080 equ 80h l0081 equ 81h l0086 equ 86h l0088 equ 88h l008a equ 8ah l008d equ 8dh l0091 equ 91h l0095 equ 95h l0097 equ 97h l0098 equ 98h l00a4 equ 0a4h l00b2 equ 0b2h l00d8 equ 0d8h l00e4 equ 0e4h l00ff equ 0ffh l710c equ 710ch l710d equ 710dh l7111 equ 7111h l7113 equ 7113h l721b equ 721bh l721c equ 721ch l721e equ 721eh l7221 equ 7221h l7223 equ 7223h l7225 equ 7225h l7227 equ 7227h l7228 equ 7228h l722e equ 722eh l72e6 equ 72e6h l72e8 equ 72e8h l72ea equ 72eah l72ec equ 72ech l72ee equ 72eeh l72f0 equ 72f0h l7300 equ 7300h l7314 equ 7314h l7317 equ 7317h l7318 equ 7318h l731a equ 731ah l731c equ 731ch l731e equ 731eh l7320 equ 7320h l7323 equ 7323h l7326 equ 7326h l7329 equ 7329h l732c equ 732ch l732d equ 732dh l732e equ 732eh l7330 equ 7330h l7331 equ 7331h l7332 equ 7332h l7333 equ 7333h l7335 equ 7335h l7451 equ 7451h l7453 equ 7453h l7473 equ 7473h l7475 equ 7475h l7476 equ 7476h l7478 equ 7478h l747a equ 747ah l747b equ 747bh l747d equ 747dh l747f equ 747fh l7481 equ 7481h l7483 equ 7483h l7484 equ 7484h l7486 equ 7486h l7488 equ 7488h l7489 equ 7489h l748b equ 748bh l748c equ 748ch l74ab equ 74abh l74ac equ 74ach l74b3 equ 74b3h l74b4 equ 74b4h l74b5 equ 74b5h l74b7 equ 74b7h l74b9 equ 74b9h l74c2 equ 74c2h l74cb equ 74cbh l74d4 equ 74d4h l74d5 equ 74d5h l74d7 equ 74d7h l74d9 equ 74d9h l74dd equ 74ddh l74e2 equ 74e2h l74e7 equ 74e7h l74e9 equ 74e9h l74eb equ 74ebh l74ec equ 74ech l7521 equ 7521h l752b equ 752bh l752c equ 752ch l7547 equ 7547h l754f equ 754fh l7550 equ 7550h l7552 equ 7552h l7553 equ 7553h l7555 equ 7555h l7557 equ 7557h l7558 equ 7558h l755a equ 755ah l755c equ 755ch l755e equ 755eh l7560 equ 7560h l7562 equ 7562h l7563 equ 7563h l7564 equ 7564h l7565 equ 7565h l7567 equ 7567h l7569 equ 7569h l756a equ 756ah l756c equ 756ch l756d equ 756dh l757e equ 757eh l7581 equ 7581h l758a equ 758ah l7591 equ 7591h l7594 equ 7594h l7595 equ 7595h l7596 equ 7596h l7597 equ 7597h l7598 equ 7598h l7599 equ 7599h l75ad equ 75adh l75af equ 75afh l75b1 equ 75b1h l75b3 equ 75b3h l75b4 equ 75b4h l75b5 equ 75b5h l75b7 equ 75b7h l75b9 equ 75b9h l75bd equ 75bdh l75bf equ 75bfh l75c1 equ 75c1h l75c2 equ 75c2h l75c4 equ 75c4h l75c5 equ 75c5h l75c7 equ 75c7h l75c9 equ 75c9h l75cb equ 75cbh l75cd equ 75cdh l75cf equ 75cfh l75d1 equ 75d1h l75d2 equ 75d2h l75d4 equ 75d4h l75d6 equ 75d6h l75d8 equ 75d8h l75d9 equ 75d9h l75da equ 75dah l75dc equ 75dch l75de equ 75deh l75e0 equ 75e0h l75fe equ 75feh l75ff equ 75ffh l7601 equ 7601h l7602 equ 7602h l7603 equ 7603h l760a equ 760ah l762a equ 762ah l780a equ 780ah l8000 equ 8000h l8965 equ 8965h l8cce equ 8cceh l8ccf equ 8ccfh lff80 equ 0ff80h lffc0 equ 0ffc0h lfffa equ 0fffah lfffe equ 0fffeh lffff equ 0ffffh l0114 equ 0114h l012c equ 012ch l012f equ 012fh jp l02d4 ; dw l6df6 dw l6e92 l0107: db 'Serial number & customer',null l0120: db 0,3,'*',0eh,85h,0dh l0126: db lf,'Mallard-80 BASIC with Jetsam Version 1.47' db lf,'(c) Copyright 1984 Locomotive Software Ltd' db lf,'All rights reserved',lf,lf,null ; ; Restart - Give Ok message ; l0196: ld sp,l7101 ; Reload stack call l02cb ; Init pointers call l053c ; Close line ld hl,l01b9 call l0465 ; Tell Ok call l022b ; Disable AUTO ld a,(l7220) ; Get error number sub 2 ; Test syntax error jr nz,l01b7 ; Nope ld (l7220),a ; Clear it call l0f00 ; Get ERL jr c,l01c2 ; Fall into edit if found l01b7: jr l01d7 ; l01b9: db 'Ok',lf,null ; ; Statement : EDIT line_number ; l01bd: call l13c3 ; Get line number ret nz ; Not found ex de,hl ; ; Do the EDIT statement - Line address in reg DE ; l01c2: ld sp,l7101 ; Reset stack call l138e ; Save line address ex de,hl call l540b ; Find program line call l4d17 call l09d8 call l4905 jr l01fe ; ; ; l01d7: call l4905 ld a,(l6fb9) ; Test AUTO in progress or a jr z,l01fb ; Nope l01e0: call l0269 ld hl,l7115 ; Init line call l4894 ; Get next call l5bbb jr nc,l01fe call l4894 ; Get next or a ; Test end jr nz,l01fe ; Nope call l5413 ; Does line exist ? jr nc,l01e0 ; Nope jr l01fe l01fb: call l09de l01fe: ld hl,l7115 ; Init line call l4894 ; Get next or a jr z,l01d7 ; End call l5bbb jr nc,l021b push de push hl call l6a6a pop hl pop de call l5340 call l02b6 jr l01d7 l021b: call l022b ; Disable AUTO call l4a34 ; Convert line to token dec hl jp l48a7 ; ; Disable AUTO progression and init increment to 10 ; l0225: ld hl,10 ld (l6fbc),hl ; Set default increment ; ; Disable AUTO progression ; l022b: xor a jr l0233 ; ; Enable AUTO prograssion with starting line in reg HL ; l022e: ld (l6fba),hl ; Save starting line number ld a,TRUE l0233: ld (l6fb9),a ; (Re)Set AUTO progress ret ; ; Statement : AUTO [line_number][,increment] ; l0237: ld de,10 ; Set default line number jr z,l023e ; No argument cp ',' ; Test deleimiter l023e: call nz,l13c3 ; Nope, get line number push de ld de,10 ; Set default increment call l4888 ; Test comma jr nc,l0255 ; Nope ex de,hl ld hl,(l6fbc) ; Get current Increment if not ex de,hl call l4884 ; Test end of statement call nc,l13d1 ; Get increment if not l0255: call l487e ; Make sure end of statement ld a,d ; Verify increment <> 0 or e jp z,l0eaa ; Error if so ex de,hl ld (l6fbc),hl ; Save increment pop hl ; Get back line number call l022e ; Enable AUTO pop bc jp l01d7 ; ; ; l0269: ld hl,(l6fba) ; Get current line number ex de,hl push de ; Save call l4cf8 call l022b ; Disable AUTO call l09d8 pop de ld hl,(l6fbc) ; Get increment add hl,de ; Next line number ret c ; Overflow ld a,h ; Test 0xFFFF and l inc a jr nz,l022e ; Nope, re-enable AUTO ret ; ; Statement : NEW ; l0283: ret nz ; Should be end here call l18d1 call l028d jp l0196 ; ; ; l028d: call l495b call l022b ; Disbale AUTO call l02a7 ; ; ; l0296: push bc push hl call l65ce call l3dda call l3e20 call l5601 pop hl pop bc ret ; ; ; l02a7: call l6062 call l02c5 ld hl,0 call l138e ; Clear line address call l52f7 ; ; ; l02b6: call l658c call l4249 call l1004 call l0fd2 jp l46dd ; ; ; l02c5: call l3d4e call l5f62 ; ; Init memory pointers ; l02cb: call l6add call l43a3 jp l03b7 ; Set console I/O ; ; ### Cold entry ### ; l02d4: ld sp,l7101 ; Get stack call l21a2 ; Init environment ld (l75bb),hl ; Save hi memory call l6571 ; Clear pointers xor a ld (l7115),a ; Clear line ld hl,(l0e2a) ; Get console dimensions call l03a8 ; Init character devices call l1753 call l4905 call l1085 ld hl,l0126 call l0465 ; Give ID message call l0333 ; Process options ld hl,(l75bb) ; Get hi memory call l62f4 ; Initialize memory call l0225 ; Disable AUTO call l3dda call l028d call l663e call l5c17 ld hl,l0325 call l0465 ; Tell bytes free ld hl,(l6fbe) ; Test file active ld a,h or l jp nz,l5685 call l108c jp l0196 ; Then start ; l0325: db ' free bytes',lf,lf,null ; ; Process options ; l0333: ld a,3 ld (l6fc0),a ; Set default max file count ld hl,NULL ld (l6fbe),hl ; Set no file given call l21b7 ; Copy command line call l4894 ; Get character or a ret z ; End of line cp '/' ; Test option jr z,l035a ; Yeap dec hl ld (hl),'"' ; Set string ld (l6fbe),hl ; Save file pointer l0350: inc hl ld a,(hl) ; Skip over file name or a ret z cp '/' ; Test option jr nz,l0350 ld (hl),null ; Close file name l035a: inc hl call l4894 ; Get option character call l6f48 ; As upper case push hl ld hl,l0388 call l6f5a ; Find key in table ex (sp),hl ; Save inc hl call l4894 ; Get next cp ':' ; Verify delimiter jr nz,l0385 ; Error if not inc hl call l5b9b ; Get value jr nc,l0385 ; Error ex (sp),hl call l6fb4 ; Execute option pop hl call l4894 ; Get next character cp '/' jr z,l035a or a ret z l0385: jp l0ea6 ; Error ; l0388: db 3 dw l0ea6 db 'S' dw l0394 db 'M' dw l0399 db 'F' dw l039e ; ; Option /S:Record size ; l0394: ex de,hl ld (l722c),hl ; Set record size ret ; ; Option /M:Hi memory address ; l0399: ex de,hl ld (l75bb),hl ; Set hi memory ret ; ; Option /F:File number ; l039e: ld a,d or a jp nz,l0eaa ld a,e ld (l6fc0),a ; Set max files ret ; ; Initialize character I/O environment - Screen setting in HL ; l03a8: call l0533 ; Set console dimensions call l056e ; Same for printer call l0447 ; Clear type ahead character call l03e4 ; Allow console break call l0458 ; Enable tabulator stops ; ; Set console I/O ; l03b7: ld a,3 call l03c4 ; Select console for output ld a,2 call l03ca ; And input jp l0575 ; ; Select output device in Accu - Return current in Accu ; l03c4: push hl ld hl,l7101 ; Set vector jr l03ce ; ; Select input device in Accu - Return current in Accu ; l03ca: push hl ld hl,l7102 ; Set vector l03ce: push bc ld b,(hl) ; Get old one ld (hl),a ; Set new ld a,b ; Get result pop bc pop hl ret ; ; Test output device a file - Zero set says yes ; l03d5: ld a,(l7101) cp @FILE ret ; ; Test input device a file - Zero set says yes ; l03db: ld a,(l7102) cp @FILE ret ; ; Statement : OPTION RUN ; l03e1: xor a jr l03e6 ; ; Statement : OPTION STOP ; l03e4: ld a,TRUE l03e6: ld (l7104),a ; Set flag ret ; ; Get character from device into Accu ; l03ea: ld a,(l7102) ; Get input device dec a jp z,l198c ; File jr l03fa ; ; Get character from device into Accu ; l03f3: ld a,(l7102) ; Get input device dec a jp z,l1996 ; File l03fa: call l0400 ; Get character jr nc,l03fa ret ; ; ; l0400: ld a,(l7103) ; Test type ahead or a scf jr nz,l0447 ; Yeap, clear current ld a,(l7104) ; Test break allowed or a jp z,l2297 ; Nope, get character call l2297 ; Get character call c,l044e ret nc cp 'C'-'@' ; Test break scf ret nz jp l0fb3 ; ; Process break if enabled - Carry set indicates break ; l041c: ld a,(l7104) ; Test break allowed or a ret z ; Nope, exit ; ; Process break - Carry set indicates break ; l0421: call l2297 ; Get character ret nc ; None call l044e ret nc ld (l7103),a ; Set type ahead xor 'C'-'@' ; Test abort ret nz ; Nope ld a,3 call l03c4 ; Set console push af ld a,'^' call l0478 ; Display ^C ld a,'C' call l0478 call l0472 ; Give new line pop af call l03c4 ; Reset device scf ; Indicate break ; ; Clear type ahead character ; l0447: push af xor a ld (l7103),a ; Clear it pop af ret ; ; ; l044e: cp 'S'-'@' ; Test control call z,l2289 ; Get new character if so cp 'S'-'@' ret z scf ret ; ; Statement : OPTION TAB ; l0458: ld a,TRUE jr l0461 ; ; Statement : OPTION NOT TAB ; l045c: call l4862 ; Verify TAB db 0e1h xor a l0461: ld (l7105),a ; (Re)Set TAB flag ret ; ; Give message in ^HL ; l0465: push af push hl l0467: ld a,(hl) ; Get character inc hl or a ; Test end pf message call nz,l0478 ; Print if not jr nz,l0467 pop hl pop af ret ; ; Give new line to device - Preserve Accu ; l0472: push af ; Save Accu call l0482 ; Then give new line pop af ret ; ; Put character in Accu to output device - Preserve character ; l0478: push af ; Save character call l047e ; Then put pop af ret ; ; Put character in Accu to output device ; l047e: cp lf ; Test new line jr nz,l0490 ; Nope ; ; Give new line to device ; l0482: ld a,(l7101) ; Get output device dec a jp z,l1a37 ; Got file dec a jp z,l057a ; Got printer jp l0541 ; ; Put character in reg C to output device - Save regs ; l0490: push af push bc ld c,a call l0499 pop bc pop af ret ; ; Put character in reg C to output device ; l0499: ld a,(l7101) ; Get output device dec a jp z,l1a44 ; Got file call l050a ; Get device column ld b,a ; Save it ld a,c cp tab ; Test tab jr z,l04c5 cp bs ; Test backspace jr z,l04e1 cp cr ; Test carriage return jr z,l04e4 cp ' ' ; Test printable jr c,l04e6 ; Nope call l04f1 call c,l0472 ; Give new line call l050a ; Get device column ld b,a or a jr z,l04e6 inc b jr l04e6 l04c5: ld a,(l7105) ; Test TAB enabled or a jr z,l04e6 ; Nope l04cb: ld a,' ' call l0490 ; Give blank call l050a ; Get device column cp b ret z ld b,a call l04f1 ret c ld a,b dec a and 00000111b jr nz,l04cb ret l04e1: dec b ; Test already column 1 jr nz,l04e6 ; Nope l04e4: ld b,1 ; Init position l04e6: ld a,(l7101) ; Get output device cp @LST ; Test printer jp z,l0588 ; Yeap jp l0563 ; Else put to console ; ; ; l04f1: call l04f7 ret nc cp b ret ; ; ; l04f7: ld a,(l7101) ; Get output device cp @FILE ret z ; Skip file cp @LST ld a,(l710b) ; Get width of printer jr z,l0507 ld a,(l7108) ; Get column l0507: cp -1 ret ; ; Return device column into Accu ; l050a: ld a,(l7101) ; Get output device dec a jp z,l1ade ; Got file dec a ld a,(l710a) ; Get printer position ret z ld a,(l7109) ; Get console position ret ; ; ; l051a: push hl call l0520 pop hl ret ; ; ; l0520: ld h,a call l04f7 ccf ret c ld l,a call l050a ; Get device column dec a scf ret z add a,h ccf ret nc dec a cp l ret ; ; Initialize console columns in HL ; l0533: ld (l7106),hl ; Set max ld h,1 ld (l7108),hl ; Set start ret ; ; ; l053c: ld a,(l7109) ; Get console width dec a ; Test in column 1 ret z ; Yeap l0541: push bc ld a,(l7107) ; Get width of console ld c,a inc a jr z,l0552 ld a,(l7109) ; Get position dec a l054d: sub c jr z,l055c jr nc,l054d l0552: ld c,cr call l0563 ; Give new line on console ld c,lf call l0563 l055c: ld a,1 ld (l7109),a ; Set column 1 pop bc ret ; ; Put character in reg C to console, set column in reg B ; l0563: ld a,b ld (l7109),a ; Save jp l2283 ; Print ; ; Get console dimensions into reg HL ; l056a: ld hl,(l7106) ; Get max columns ret ; ; Initialize printer columns in HL ; l056e: ld hl,256*LSTCOL+1 ld (l710a),hl ; Clear printer position ret ; ; ; l0575: ld a,(l710a) ; Get printer position dec a ; Test already left positioned ret z ; Yeap l057a: push bc ld bc,1*256+cr call l0588 ; Give new line ld c,lf call l0588 pop bc ret ; ; Put reg C to printer, set printer position to reg B ; l0588: ld a,b ld (l710a),a ; Set position jp l227d ; ; Function : LPOS (expr) ; l058f: ld a,(l710a) ; Get position jp l6e8f ; ; Function : POS (expr) ; l0595: ld a,(l7109) ; Get position jp l6e8f ; ; Statement : WIDTH expr [,expr] ; WIDTH LPRINT expr ; l059b: cp 0a6h ; Test LPRINT jr nz,l05a9 ; Nope call l4869 ; Skip spaces call l134e ld (l710b),a ; Set printer width ret l05a9: call l134e push af call l4888 ; Test comma jr nc,l05b8 ; Nope call l134e ld (l7107),a ; Set console width l05b8: pop af ld (l7108),a ; save column cp -1 ret z ld (l7106),a ; Set max ret ; ; Statement : FOR var=expr to expr [STEP expr] ; l05c3: call l3f30 push hl push bc push de call l08ce ld (l7111),hl push de push hl ex de,hl call l06e3 call z,l659a pop hl call l4884 ; Test end of statement ld de,l0000 call nc,l3f03 ; Nope ld b,h ld c,l pop hl ex (sp),hl ld a,d or e call nz,l6f7f ; HL:DE jp nz,l06a2 ex de,hl call l4915 ex (sp),hl call l4911 pop hl pop af ex (sp),hl push de push bc push hl ld bc,256*20+4 ;;l1404 cp c jr z,l060b ld bc,256*16+2 ;;l1002 cp c ld a,13 jp nz,l0eb0 ; Type mismatch l060b: ld a,b call l65af push hl ld hl,(l75cb) ex de,hl call l6f8b ; DE:=HL-DE pop hl ld (hl),e inc hl ld (hl),d inc hl ex (sp),hl call l485e ; Verify '=' call l13f2 ld a,c call l6e45 push hl ld hl,l710d call l6f13 pop hl call l4862 ; Verify 'TO' db 0e3h call l13f2 ex (sp),hl ld a,c call l6e45 call l6f13 ex de,hl ex (sp),hl ex de,hl ld hl,l0001 call l6e92 ex de,hl ld a,(hl) cp 0e0h jr nz,l0653 call l4869 ; Skip spaces call l13f2 l0653: ld a,c call l6e45 ex (sp),hl call l6f13 call l6ce3 ex de,hl ld (hl),a inc hl ex de,hl pop hl call l487e ; Make sure end of statement call l64cf ex de,hl ld (hl),e inc hl ld (hl),d inc hl ex de,hl call l4919 ex de,hl ld (hl),e inc hl ld (hl),d inc hl ex de,hl pop hl call l64cf ex de,hl ld (hl),e inc hl ld (hl),d inc hl ex de,hl ld hl,(l7111) call l64cf ex de,hl ld (hl),e inc hl ld (hl),d inc hl ld (hl),b pop de ld hl,l710d call l6f17 xor a ld (l710c),a pop hl call l4911 ld hl,(l7111) jr l06ab l06a2: call l0eae ; Unexpected NEXT db 1 ; ; Statement : NEXT [list of var] ; l06a6: ld a,TRUE ld (l710c),a l06ab: ex de,hl call l06e3 jr nz,l06a2 ex de,hl call l659a ex de,hl push hl call l0711 jr z,l06ce pop af inc hl ld e,(hl) inc hl ld d,(hl) inc hl ld a,(hl) inc hl ld h,(hl) ld l,a call l490a ld hl,(l75c7) ; Get start of program add hl,de ret l06ce: ld bc,l0005 add hl,bc ld e,(hl) inc hl ld d,(hl) pop hl call l659a ld hl,(l75c7) ; Get start of program add hl,de call l4888 ; Test comma jr c,l06a6 ; Yeap ret l06e3: ex de,hl call l64cf ex de,hl ld hl,(l75d6) l06eb: push hl dec hl ld b,(hl) inc hl ld a,l sub b ld l,a sbc a,a add a,h ld h,a ex (sp),hl ld a,b cp 7 jr c,l070a jr z,l070e push hl dec hl dec hl ld a,(hl) dec hl ld l,(hl) ld h,a call l6f7f ; HL:DE pop hl jr nz,l070e l070a: ex de,hl pop hl ld a,b ret l070e: pop hl jr l06eb l0711: ld e,(hl) inc hl ld d,(hl) inc hl push hl ld hl,(l75cb) add hl,de cp 10h jr z,l0745 ld a,(l710c) or a jr z,l0733 pop de push de ex de,hl ld bc,l0004 add hl,bc ex de,hl ld c,4 call l3389 jr nc,l0741 l0733: pop de push de ld c,4 call l3898 pop hl ld bc,l0008 add hl,bc sub (hl) ret l0741: call l0eae ; Overflow db 6 l0745: pop bc ld e,(hl) inc hl ld d,(hl) ld a,(l710c) or a jr z,l0762 push hl ld hl,l0002 add hl,bc ld a,(hl) inc hl ld h,(hl) ld l,a call l475b jr nc,l0741 ex de,hl pop hl ld (hl),d dec hl ld (hl),e l0762: ld h,b ld l,c ld a,(hl) inc hl ld h,(hl) ld l,a ex de,hl call l480c ld hl,l0004 add hl,bc sub (hl) ret ; ; Statement : IF expr THEN statement(s) [ELSE statement(s)] ; IF expr GOTO line_number [ELSE statement(s)] ; l0772: call l13f2 cp ',' call z,l4869 ; Skip spaces cp 09ch jr z,l0782 call l4862 ; Verify 'THEN' db 0e2h l0782: call l6ce3 call z,l551a ret z call l4884 ; Test end of statement ret c ; Yeap cp 01dh jr z,l0796 cp 01ch jp nz,l48d8 ; ; Token 0x9c : GOTO line ; l0796: call l53d6 ret nz ex de,hl ret ; ; Token 0x9b : GOSUB line ; l079c: call l53d6 ret nz l07a0: push de call l64cf ex de,hl ld a,5 call l65af ld (hl),e inc hl ld (hl),d inc hl ex de,hl call l4919 ex de,hl ld (hl),e inc hl ld (hl),d inc hl ld (hl),5 inc hl call l659a pop hl ret ; ; Statement : RETURN ; l07bf: ret nz call l07d6 call l659a ld e,(hl) inc hl ld d,(hl) inc hl ld a,(hl) inc hl ld h,(hl) ld l,a call l490a ld hl,(l75c7) ; Get start of program add hl,de ret ; ; ; l07d6: ld hl,(l75d6) l07d9: dec hl ld a,(hl) push af ld a,l sub (hl) ld l,a sbc a,a add a,h ld h,a inc hl pop af cp 5 ret z or a jr nz,l07d9 call l0eae ; Unexpected RETURN db 3 ; ; Statement : WHILE expr ; l07ee: push hl call l0922 push hl ex de,hl ld (l7113),hl call l0874 call z,l659a ld a,7 call l65af ex de,hl call l4919 ex de,hl ld (hl),e inc hl ld (hl),d inc hl ex de,hl pop hl call l64cf ex de,hl ld (hl),e inc hl ld (hl),d inc hl ex de,hl ex (sp),hl call l64cf ex de,hl ld (hl),e inc hl ld (hl),d inc hl ld (hl),7 inc hl call l659a ex de,hl pop de jr l0853 ; ; Statement : WEND ; l0829: ret nz ex de,hl call l0874 ld a,30 jp nz,l0eb0 ; Unexpected WEND push hl ld de,l0007 add hl,de call l659a call l4915 ld (l7113),hl pop hl ld e,(hl) inc hl ld d,(hl) inc hl ex de,hl call l490a ex de,hl ld e,(hl) inc hl ld d,(hl) inc hl ld a,(hl) inc hl ld h,(hl) ld l,a l0853: push de ex de,hl ld hl,(l75c7) ; Get start of program add hl,de call l13f2 call l6ce3 pop de ret nz ld hl,(l7113) call l4911 ld a,7 call l659f call l659a ld hl,(l75c7) ; Get start of program add hl,de ret ; ; ; l0874: ex de,hl call l64cf ex de,hl ld hl,(l75d6) l087c: dec hl push hl ld a,l sub (hl) ld l,a sbc a,a add a,h ld h,a inc hl ex (sp),hl ld a,(hl) cp 7 jr c,l0899 jr nz,l089b dec hl dec hl dec hl ld a,(hl) dec hl ld l,(hl) ld h,a call l6f7f ; HL:DE jr nz,l089b l0899: pop hl ret l089b: pop hl jr l087c ; ; Statement : ON expr GOSUB list of line_numbers ; ON expr GOTO list of line_numbers ; ON ERROR GOTO line_number ; ON ERROR GOTO 0 ; l089e: cp 096h ; Test 'ERROR' jp z,l1011 ; Yeap call l1341 ld c,a ld a,(hl) cp 09ch push af jr z,l08b2 call l4862 ; Verify ??? db 09bh dec hl l08b2: call l4869 ; Skip spaces l08b5: dec c jr z,l08c2 call l13d1 ; Get number call l4888 ; Test comma jr c,l08b5 ; Yeap pop af ret l08c2: call l53d6 call nz,l5564 pop af jp nz,l07a0 ex de,hl ret l08ce: ex de,hl call l4915 ex de,hl dec hl ld b,1 l08d6: ld c,1ah call l5598 push hl call l4869 ; Skip spaces cp 0abh ; Test NEXT jr z,l08eb pop hl cp 099h ; Test FOR jr nz,l08d6 inc b jr l08d6 l08eb: pop af ex de,hl push hl call l4915 ex (sp),hl call l4911 ex de,hl dec b jr z,l091e call l4869 ; Skip spaces jr z,l090d l08fe: push bc push de call l3f03 pop de pop bc call l4888 ; Test comma jr nc,l090d ; Nope dec b jr nz,l08fe l090d: dec hl ld a,b or a jr z,l091e ex de,hl call l4915 ex (sp),hl call l4911 pop hl ex de,hl jr l08d6 l091e: pop de jp l4869 ; Skip spaces l0922: dec hl ex de,hl call l4915 ex de,hl ld b,0 l092a: inc b l092b: ld c,1dh call l5598 push hl call l4869 ; Skip spaces pop hl cp 0cbh ; Test WHILE jr z,l092a cp 0cah ; Test WEND jr nz,l092b dec b jr nz,l092b call l4869 jp l4869 ld bc,1*256+0 l0949: ld a,(hl) or a jr z,l0954 call l09cc inc hl inc b jr l0949 l0954: pop af call l095b jp l0472 ; Give new line l095b: jr z,l0973 cp 'C'-'@' ; Test abort jp z,l0fb3 jr l0978 ; ; ; l0964: push bc ld hl,l7115 ; Init line push hl call l096f pop hl pop bc ret ; ; ; l096f: ld b,1 l0971: ld c,0 l0973: call l03f3 ; Get character jr nc,l09c9 l0978: or a ; Test any input jr z,l0973 ; Nope cp cr jr z,l09c4 ld c,0 cp rubout jr z,l09a7 cp ' ' jr nc,l099b cp tab jr z,l099b cp bs jr z,l09a7 cp lf jr nz,l0973 dec b jr z,l096f inc b ld c,0ffh l099b: inc b dec b jr z,l09b9 ld (hl),a inc hl inc b l09a2: call l09cc jr l0973 l09a7: dec b jr z,l096f dec hl ld a,bs ; Clear character on screen call l09cc ld a,' ' call l09cc ld a,bs jr l09a2 l09b9: call l03db ; Test input from file ld a,bell jr nz,l09a2 ; Nope call l0eae ; Line too long db 23 l09c4: ld a,c or a jr nz,l0971 scf l09c9: ld (hl),0 ret ; ; ; l09cc: push af call l03db ; Test input from file jr z,l09d6 ; Yeap pop af jp l0478 ; Put to character device l09d6: pop af ret ; ; Input line ; l09d8: ld hl,l7115 ; Init line xor a jr l09ea ; ; ; l09de: ld hl,l7115 ; Init line call l2289 ; Get character cp _CUL ; Test cursor left jr z,l09ea ; Yeap ld (hl),0 ; Clear token l09ea: push af call l0447 ; Clear type ahead character ld c,-1 ; Clear count l09f0: inc c ld a,(hl) ; Get token inc hl or a jr nz,l09f0 ; Got one ld a,c ld (l7218),a ; Save length call l0a75 pop af l09fe: call z,l2289 ; Get character call l0a07 ; Process it xor a jr l09fe ; ; Process next character in Accu ; l0a07: push de push bc call l0dc0 ; Find control character pop bc pop de jp c,l0b5b ; Nope push af ; save index ld a,(l0e2c) ; Test terminal capability or a ld hl,l0a2a jr nz,l0a1e ; ** ALWAYS ON PCW ** ld hl,l0a40 l0a1e: pop af ; Get back index add a,a ; *2 add a,l ld l,a ; Position into table adc a,h sub l ld h,a ld a,(hl) ; Get address of routine inc hl ld h,(hl) ld l,a jp (hl) ; Execute it ; ; ** ALWAYS ON PCW ** (Mode 1) ; l0a2a: dw l0b1a ; 0 : Cursor left dw l0b05 ; 1 : Cursor right dw l0af5 ; 2 : Cursor up dw l0afb ; 3 : Cursor down dw l0add ; 4 : Search text dw l0bb9 ; 5 : Delete right dw l0bb0 ; 6 : Delete left dw l0b99 ; 7 : Delete to character dw l0ad3 ; 8 : Toggle insert/overwrite dw l0a5c ; 9 : Abort editing dw l0a62 ; 10 : End of editing ; ; ** NEVER ON PCW ** (Mode 2) ; l0a40: dw l0d2e ; 0 : -> Cursor right dw l0cec ; 1 : B -> Delete left dw l0cc6 ; 2 : D -> Delete right dw l0d0f ; 3 : H -> Delete to end of line dw l0cb9 ; 4 : I -> Turn on insert mode dw l0d15 ; 5 : K -> Delete to character dw l0a72 ; 6 : L -> Display current line dw l0cbc ; 7 : O -> Overwrite dw l0cff ; 8 : S -> Search for character dw l0cb6 ; 9 : X -> Append to line ; dw l0a5c ; 10 : ^C - Abort editing dw l0cd7 ; 11 : ^H - Backspace dw l0a62 ; 12 : ^M - End of editing dw l0cc0 ; 13 : ^[ - Open command mode ; ; Abort editing (Both modes) ; l0a5c: call l0a63 jp l0fb3 ; ; End of editing (Both modes) ; l0a62: pop af ; Clear stack level l0a63: ld a,(l0e2c) ; Test terminal capability or a push af call nz,l0ada ; ** ALWAYS ON PCW ** pop af call z,l0cfc ; ** NEVER ON PCW ** jp l0472 ; Give new line ; ; Display current line (Mode 2) ; l0a72: call l0472 ; Give new line ; ; ; l0a75: ld bc,l7115 ; Init line call l0cb9 ; Set insert ld a,(l0e2c) ; Test terminal capability or a jr z,l0a8d ; ** NEVER ON PCW ** ld hl,1*256+1 ld (l7219),hl ; Init screen lines ex de,hl call l0c36 jr l0aba l0a8d: ld a,(bc) or a ret z call l6f41 ; Test digit jr c,l0aa8 ; Yeap call l0aa3 call l0aa3 call l0aae ld a,'?' call l0478 ; Give question maek l0aa3: ld a,' ' jp l0478 ; Give blank ; ; ; l0aa8: call l0aba ld a,(bc) or a ret z l0aae: call l0cc0 call l0cfc call l0472 ; Give new line ld bc,l7115 ; Init line ; ; ; l0aba: ld a,(bc) call l6f41 ; Test digit ret nc ; Nope l0abf: call l0ac8 ld a,(bc) call l6f41 ; Test digit jr c,l0abf ; Yeap ; ; ; l0ac8: ld a,(l0e2c) ; Test terminal capability or a jp z,l0d2e ; ** NEVER ON PCW ** inc bc jp l0b05 ; ; Toggle insert/overwrite (Mode 1) ; l0ad3: ld hl,l7217 ld a,(hl) ; Get state cpl ; Toggle it ld (hl),a ret ; ; Position to end of token ; l0ada: xor a jr l0ae0 ; ; Search text (Mode 1) ; l0add: call l2289 ; Get character to be searched for l0ae0: push af call l0bdb pop af push de ld d,a l0ae7: ld a,(bc) ; Get character or a ; Test end jr z,l0af2 ; Yeap call l0c0d ld a,(bc) cp d ; Compare jr nz,l0ae7 ; Try next l0af2: pop de jr l0b25 ; ; Cursor up (Mode 1) ; l0af5: dec d ; Decrement position jp nz,l0e4b ; Cursor up if still more inc d ; Else let as is ret ; ; Cursor down (Mode 1) ; l0afb: inc d ld a,(l721a) ; Get screen lines cp d ; Test in range jp nc,l0e53 ; Cursor down if so dec d ; Else let as is ret ; ; Cursor right (Mode 1) ; l0b05: call l056a ; Get console dimensions ld a,l inc e cp e ; Compare jp nc,l0e5a ; Cursor right if in range dec e ; Get position ld a,(l721a) ; Get screen lines cp d ; Test last line ret z ; Yeap, let unchanged l0b14: inc d ; Bump position ld e,1 jp l0e4f ; ; Cursor left (Mode 1) ; l0b1a: dec e ; Count down position jp nz,l0e57 ; Cursor left if not left margin inc e ; Let as is call l056a ; Get console dimensions ld h,d ; Set width dec h ; Test left ret z ; Yeap l0b25: push bc ld a,h sub d ; Test same position jr z,l0b3e jr c,l0b35 ld c,a l0b2d: call l0e53 ; Cursor down dec c jr nz,l0b2d jr l0b3e l0b35: cpl inc a ld c,a l0b38: call l0e4b ; Cursor up dec c jr nz,l0b38 l0b3e: ld a,e sub l jr z,l0b56 jr c,l0b4d ld c,a l0b45: call l0e57 ; Cursor left dec c jr nz,l0b45 jr l0b56 l0b4d: cpl inc a ld c,a l0b50: call l0e5a ; Cursor right dec c jr nz,l0b50 l0b56: pop bc ld d,h ld e,l scf ret ; ; -> Process normal character ; l0b5b: push af ld a,(l0e2c) ; Test terminal capability or a call nz,l0bdb ; ** ALWAYS ON PCW ** ld a,(l7217) ; Test overwrite or a jr z,l0b71 ; Nope ld a,(bc) ; Test end of line or a jr z,l0b71 ; Yeap pop af ld (bc),a ; Overwrite jr l0b89 l0b71: ld a,(l7218) ; Get length inc a ; Advance pop hl jp z,l0e81 ; Overflow, ring bell push hl ld (l7218),a ; Save new length pop af ; Get character push bc ld h,b ; Copy line ld l,c l0b81: ld b,(hl) ; Get old ld (hl),a ; Set new inc hl or a ; Test end ld a,b jr nz,l0b81 ; Nope pop bc l0b89: ld a,(l0e2c) ; Test terminal capability or a jp z,l0d2e ; ** NEVER ON PCW ** call l0c3c call l0c0d jp l0b25 ; ; Delete to character (Mode 1) ; l0b99: call l0bdb push de call l2289 ; Get character searched for ld d,a ; save l0ba1: ld a,(bc) ; Get character or a jr z,l0bac ; End of line call l0bc7 ; Delete it ld a,(bc) ; Test position found cp d jr nz,l0ba1 ; Nope l0bac: pop de jp l0c36 ; ; Delete left (Mode 1) ; l0bb0: call l0b1a ret nc call l0bd7 jr l0bbc ; ; Delete right (Mode 1) ; l0bb9: call l0bdb l0bbc: ld a,(bc) or a jp z,l0e81 ; Ring bell call l0bc7 jp l0c36 ; ; ; l0bc7: ld hl,l7218 ; Get token length dec (hl) ; Decrement push bc ld h,b ld l,c l0bce: inc hl ld a,(hl) ld (bc),a inc bc or a jr nz,l0bce pop bc ret l0bd7: ld a,TRUE jr l0bdc ; ; ; l0bdb: xor a l0bdc: ld (l721b),a ld bc,l7115 ; Init line ld hl,1*256+1 ; Init screen position push hl l0be6: call l6f7f ; HL:DE jr z,l0c05 jr nc,l0bf8 ld a,(bc) or a jr z,l0c05 pop af push hl call l0c0d jr l0be6 l0bf8: ld a,(l721b) or a jr nz,l0c08 dec bc ld a,(bc) inc bc cp 0ah jr z,l0c08 l0c05: pop af jr l0c0a l0c08: dec bc pop hl l0c0a: jp l0b25 ; ; ; l0c0d: ld a,(bc) inc bc cp tab jr nz,l0c1d l0c13: call l0c21 ld a,l dec a and 00000111b jr nz,l0c13 ret l0c1d: cp lf jr z,l0c32 l0c21: push de ex de,hl call l056a ; Get console dimensions ex de,hl ld a,d cp l ld a,e pop de jr z,l0c32 cp l jr z,l0c32 inc l ret l0c32: inc h ld l,1 ret ; ; ; l0c36: call l0c3c jp l0b25 ; ; ; l0c3c: push de push bc l0c3e: ld a,(bc) ; Get token or a jr z,l0c48 ; End inc bc call l0c87 jr l0c3e l0c48: push de ld a,(l721a) ; Get sceen lines cp d jr c,l0c5d l0c4f: call l0c64 ld a,(l721a) ; Get sceen lines cp d jr z,l0c5d call l0b14 jr l0c4f l0c5d: pop hl ld (l7219),hl pop bc pop hl ret ; ; ; l0c64: ld hl,(l7219) ld a,h cp d jr nz,l0c71 ld a,l sub e ret c ret z jr l0c77 l0c71: call l056a ; Get console dimensions ld a,l sub e inc a l0c77: push de push bc ld b,a l0c7a: ld a,' ' call l0ca1 dec b jr nz,l0c7a pop bc pop hl jp l0b25 ; ; ; l0c87: cp tab jr nz,l0c97 l0c8b: ld a,' ' call l0ca1 ld a,e dec a and 00000111b jr nz,l0c8b ret l0c97: cp lf jr nz,l0ca1 call l0c64 jp l0b14 ; ; ; l0ca1: call l0e83 ; Print character call l056a ; Get console dimensions ld a,h cp e jr z,l0cb2 ld a,l cp e jp z,l0b14 inc e ret l0cb2: inc d ld e,1 ret ; ; Append to line (Mode 2) ; l0cb6: call l0cfc ; ; Turn on insert mode (Mode 2) ; l0cb9: xor a jr l0cc2 ; ; Overwrite (Mode 2) ; l0cbc: ld a,-1 jr l0cc2 ; ; Open command mode (Mode 2) ; l0cc0: ld a,1 ; ; ; l0cc2: ld (l7217),a ; Set state ret ; ; Delete right (Mode 2) ; l0cc6: ld a,(bc) or a jp z,l0e81 ; Ring bell call l0d2a ld a,(bc) ; Get character call l0478 ; Put to device call l0bc7 jr l0d2a ; ; Backspace (Mode 2) ; l0cd7: ld a,(l7217) or a ; Test insert jr z,l0cec ; Yeap l0cdd: ld hl,l7115 ; Init line call l6f85 ; HL:BC dec bc jr nz,l0cf8 inc bc call l0e81 ; Ring bell xor a ret ; ; Delete left (Mode 2) ; l0cec: call l0cdd ret z call l0bc7 ld a,' ' call l0d34 l0cf8: ld a,bs jr l0d34 l0cfc: xor a jr l0d02 ; ; Search for character (Mode 2) ; l0cff: call l2289 ; Get character l0d02: ld d,a ld a,(bc) l0d04: or a ret z call l0d34 inc bc ld a,(bc) cp d jr nz,l0d04 ret ; ; Delete to end of line (Mode 2) ; l0d0f: xor a call l0d18 jr l0cb9 ; ; Delete to character (Mode 2) ; l0d15: call l2289 ; Get character l0d18: ld d,a call l0d2a ld a,(bc) l0d1d: or a jr z,l0d2a call l0d34 call l0bc7 ld a,(bc) cp d jr nz,l0d1d l0d2a: ld a,'\' jr l0d34 ; ; Cursor left (Mode 2) ; l0d2e: ld a,(bc) or a jp z,l0e81 ; Ring bell inc bc l0d34: jp l0478 ; Put character ; l0d37: db ' BDHIKLOSX' l0d41: db 'C'-'@',bs,cr,esc,0 ; ; ; l0d46: cp rubout jr nz,l0d4c ld a,bs l0d4c: ld hl,l7217 ld d,(hl) ; Get state dec d jr z,l0d62 ; Command mode ld hl,l0d41 ; Init special command table ld c,10 ; Set index call l0d73 ; Find character ret nc ; Yeap call l0db1 ret c jr l0d6b l0d62: ld hl,l0d37 ; Init command table ld c,0 ; Set index call l0d73 ; Find character ret nc ; Yeap l0d6b: call l0e81 ; Ring bell call l2289 ; Get character jr l0d46 ; ; Map character in Accu from control table ^HL to index C ; Carry set indicates no map ; l0d73: ld b,a ; Save character call l6f48 ; Get as upper case ld e,a ; Save l0d78: ld a,(hl) or a ; Test end of table ld a,b scf ret z ; Yeap ld a,(hl) cp e ; Test character ld a,c ret z ; Return index if found inc c ; Bump index inc hl ; Advance pointer jr l0d78 ; ; Character control table ; *** On PCW only one control character per function ; l0d85: db 1,'A'-'@',0,0 ; 0 : Cursor left db 1,'F'-'@',0,0 ; 1 : Cursor right db 1,'_'-'@',0,0 ; 2 : Cursor up db 1,'^'-'@',0,0 ; 3 : Cursor down db 1,']'-'@',0,0 ; 4 : Search text db 1,'G'-'@',0,0 ; 5 : Delete right db 1,rubout ,0,0 ; 6 : Delete left db 1,'U'-'@',0,0 ; 7 : Delete to character db 1,'V'-'@',0,0 ; 8 : Toggle insert/overwrite db 1,'C'-'@',0,0 ; 9 : Abort editing db 1,'M'-'@',0,0 ; 10 : End of editing TERMLEN equ $-l0d85 ; ; Test valid character in Accu - Carry set reflects yes ; ; *** MODIFIED AGAINST V 1.29 *** ; l0db1: cp tab scf ret z cp lf scf ret z cp rubout ret z cp ' ' ccf ret ; ; Map control character in Accu - Carry set reflects no control map ; l0dc0: ld hl,l0e2c ld b,(hl) ; Test terminal capability inc b jp nz,l0d46 ; ** NEVER ON PCW ** l0dc8: cp '\' ; Test literal jr nz,l0dd1 ; Nope, find it call l2289 ; Get literal follower jr l0dee l0dd1: ld c,a ; Save character ld b,1 ; Init length ld hl,l0d85 ; Set table xor a ; Set count l0dd8: push af push hl call l0dfd pop hl jr z,l0dfa inc hl inc hl inc hl inc hl pop af inc a ; Bump count cp TERMLEN / 4 ; Test table scanned jr nz,l0dd8 ; Nope ld a,c ; Get back character dec b jr nz,l0df2 l0dee: call l0db1 ; Test valid character ret c ; Yeap l0df2: call l0e81 ; Ring bell call l2289 ; Get character jr l0dc8 l0dfa: pop af or a ret ; ; ; l0dfd: ld a,(hl) ; Get from table cp b ; Test range ret c ; Out of range inc hl ld a,c ; Get character cp (hl) ; Compare ret nz ; No match dec hl ld a,(hl) dec a ret z ld a,b dec a jr nz,l0e11 call l2289 ; Get character ld d,a inc b l0e11: inc hl inc hl ld a,d cp (hl) ret nz dec hl dec hl ld a,2 cp (hl) ret z cp b jr nz,l0e24 call l2289 ; Get character ld e,a inc b l0e24: inc hl inc hl inc hl ld a,e cp (hl) ret ; l0e2a: db 90,90 l0e2c: db -1 l0e2d: db 2,esc,'D',0,0,0 ; + 0 : Cursor left db 2,esc,'C',0,0,0 ; + 6 : Cursor right db 2,esc,'A',0,0,0 ; +12 : Cursor up db 2,esc-'B',0,0,0 ; +18 : Cursor down db 2,cr,lf,0,0,0 ; +24 : Insert new line ; ; Move cursor up ; l0e4b: ld a,12 jr l0e5c ; ; Insert new line ; l0e4f: ld a,24 jr l0e5c ; ; Move cursor down ; l0e53: ld a,18 jr l0e5c ; ; Move cursor left ; l0e57: xor a jr l0e5c ; ; Move cursor right ; l0e5a: ld a,6 l0e5c: push hl push de push bc ld hl,l0e2d ; Point to control string array ld e,a ; Set index ld d,0 add hl,de ; Position table ld b,(hl) ; Get length inc b jr nz,l0e79 ; Not -1 ; ; *** NEVER ON PCW *** ; inc hl ld a,(hl) ; Get routine inc hl ld h,(hl) ld l,a call l6fb4 ; Execute it jr l0e7c ; ; Print the control string ; l0e74: inc hl ld c,(hl) call l2283 ; Print l0e79: dec b jr nz,l0e74 l0e7c: pop bc pop de pop hl scf ret ; ; Ring the bell ; l0e81: ld a,bell ; ; Prinr character in Accu ; l0e83: push bc ld c,a call l2283 ; Print pop bc ret ; ; Clear errors ; l0e8a: ld hl,0 ld (l7315),hl ; Clear OS error xor a ; Clear program error, too ; ; ; l0e91: ld (l7220),a ; Save error number call l4919 ld (l721c),hl call l0f00 ; Get ERL call c,l138e ; Got it, so save address ret ; ; Statement : ERROR expr ; l0ea1: call l134e ; *** MODIFIED AGAINST V 1.29 *** jr z,l0eb0 ; ; Syntax Error ; l0ea6: ld a,2 jr l0eb0 ; ; Improper argument ; Error handler for unsupported statements: INPW, OUTW, WAITW ; l0eaa: ld a,5 jr l0eb0 ; ; Process error followed by call ; l0eae: pop de ; Get caller ld a,(de) ; Fetch error number l0eb0: call l0e91 ld hl,(l755e) call l0fd7 ld (l721e),hl call l64ef l0ebf: ld sp,l7101 ; Reset stack ld hl,(l755c) call l65ab call l02cb call l0f00 ; Get ERL ld hl,(l7225) ex de,hl ld hl,l7227 jr nc,l0ee9 ; Not found ld a,d or e jr z,l0ee9 and (hl) jr nz,l0ee9 dec (hl) call l18fc ld hl,(l75c7) ; Get start of program add hl,de jp l48bf l0ee9: ld (hl),0 ld a,(l7220) ; Get error number call l109c ; And print error message ld hl,(l721c) call l490a call l0f63 call l18fc jp l0196 ; ; Process ERL - Carry set if ERL not successfull ; l0f00: push de ld hl,(l721c) ex de,hl ld hl,(l75c7) ; Get start of program add hl,de pop de call l4922 ret c ld hl,lffff ret ; ; ; l0f12: push af push de ld de,l1217 ld a,11 ; Division by zero jr l0f22 l0f1b: push af push de ld de,l11de ld a,6 ; Overflow l0f22: push hl push af ld hl,(l7225) ld a,h or l pop hl ld a,h jp nz,l0eb0 ; Error ld a,3 call l03c4 ; Set console for output push af call l10d0 call l0472 ; Give new line pop af call l03c4 ; Reset current device pop hl pop de pop af ret l0f42: call l053c ld hl,l0f4d call l0f74 jr l0f69 ; l0f4d: db 'Undefined line ',null ; ; ; l0f5d: call l02cb ld de,l0f7b l0f63: call l053c call l10d0 l0f69: call l1091 call l491f ret nc ex de,hl ld hl,l0f81 l0f74: call l0465 ; Give message ex de,hl jp l5c17 ; l0f7b: db 'Break',null l0f81: db ' in ',null ; ; Statement : STOP ; l0f86: ret nz l0f87: push hl call l0f5d pop hl jr l0f92 ; ; Statement : END ; l0f8e: ret nz call l18d1 l0f92: ex de,hl call l491f ex de,hl jr nc,l0fcf ld a,(hl) cp 1 jr z,l0fa9 inc hl ld a,(hl) inc hl or (hl) jr z,l0fae inc hl call l4911 inc hl l0fa9: call l0fd7 jr l0fcf ; Restart l0fae: call l0fd2 jr l0fcf ; Restart ; ; ; l0fb3: call l0f5d ld hl,(l755e) call l0fd7 jr l0fcf ; Restart l0fbe: call l491f jr nc,l0fcf call l0fd2 ld a,(l7227) or a ld a,19 jp nz,l0eb0 ; RESUME missing l0fcf: jp l0196 ; Restart l0fd2: ld hl,l0000 jr l0fe6 ; ; ; l0fd7: ex de,hl call l491f ret nc call l4919 ld (l7223),hl ex de,hl call l64cf l0fe6: ld (l7221),hl ret ; ; Statement : CONT ; l0fea: ret nz ld hl,(l7221) ld a,h or l ld a,17 jp z,l0eb0 ; Cannot CONTinue ex de,hl ld hl,(l7223) call l490a pop hl ; Clean stack ; *** MODIFIED AGAINST V 1.29 *** ld hl,(l75c7) ; Get start of program add hl,de jp l48a7 l1004: xor a ld (l7227),a l1008: ex de,hl ld hl,l0000 ld (l7225),hl ex de,hl ret l1011: call l4869 ; Skip spaces call l4862 ; Verify ??? db 09ch call l13d1 ; Get number ld a,d or e jr z,l102b push hl call l540b ; Find program line call l64cf ld (l7225),hl pop hl ret ; ; Token 0xae : ??? ; l102b: call l1008 ld a,(l7227) or a ret z jp l0ebf ; ; Statement : RESUME 0 ; l1036: ret nz l1037: call l1066 pop af jp l48a7 ; ; Statement : RESUME ; RESUME line_number ; RESUME NEXT ; l103e: ld a,(hl) cp 0abh ; Test NEXT jr z,l105b ; Yeap push hl call l13d1 ; Get number pop hl ret nz ld a,d or e jr z,l1037 ld a,(hl) call l53d6 push de call l1066 pop hl inc hl pop af jp l48bf l105b: call l4869 ; Skip spaces ret nz call l1066 inc hl jp l5564 l1066: ld a,(l7227) or a ld a,20 jp z,l0eb0 ; Unexpected RESUME xor a ld (l7220),a ; Set no error ld (l7227),a ld hl,(l721c) call l490a ld hl,(l721e) ex de,hl ld hl,(l75c7) ; Get start of program add hl,de ret ; ; ; l1085: call l0e8a ; Reset errors ld a,TRUE jr l108d ; ; ; l108c: xor a l108d: ld (l7228),a ret ; ; ; l1091: ld a,(l7228) or a ret z call l0472 ; Give new line jp l21b6 ; ; Print error message - Error number in Accu ; l109c: ld de,l11ab cp 31 ; Test standrad jr c,l10ba ; Yeap cp 115+1 ; Validate range ret nc cp 113 jr c,l10b1 ; 'Normal' error ld de,l131f ; Init for Jetsam sub 113 ; Fix for offset jr l10ba l10b1: cp 74+1 ; Verify range ret nc sub 50 ret c ld de,l1295 l10ba: call l10c2 ld a,(de) or a jr z,l109c ret ; ; Skip Accu-times over string array ^DE ; l10c2: inc a l10c3: dec a ; Test substring found ret z ; Yeap push af dec de l10c7: inc de ld a,(de) ; Skip over substring or a jr nz,l10c7 pop af inc de jr l10c3 ; ; ; l10d0: ld a,(de) ; Get character inc de or a ; Test zero ret z ; Yeap jp m,l10dc ; Hi bit on call l0478 ; Put character jr l10d0 l10dc: push de ; Save pointer ld de,l10eb and NoMSB ; Strip off hi bit for index call l10c2 ; Position substring call l10d0 ; Print pop de ; Restore pointer jr l10d0 ; ; Message items ; l10eb: db ' d',null ; 0 db 'an',null ; 1 db 'ed',null ; 2 db 'en',null ; 3 db 'er',null ; 4 db 'ex',null ; 5 db 'in',null ; 6 db 'is',null ; 7 db 'or',null ; 8 db 'y ',null ; 9 db 't ',null ; 10 db 'on',null ; 11 db 'ile',null ; 12 db 'ead',null ; 13 db 'i',11+MSB,null ; 14 - ion db 'irec',null ; 15 db 'no',10+MSB,null ; 16 - not db 'NEXT',null ; 17 db 'too ',null ; 18 db 'WEND',null ; 19 db ' full',null ; 20 db 'F',12+MSB,' ',null ; 21 - File db 'found',null ; 22 db ' ',4+MSB,'r',8+MSB,null; 23 - error db 'numb',4+MSB,null ; 24 - number db 'nvalid',null ; 25 db 'RESUME',null ; 26 db ' lock',2+MSB,null ; 27 - locked db 'Rec',8+MSB,'d ',null ; 28 - Record db 'Str',6+MSB,'g ',null ; 29 - String db 'Unknown',null ; 30 db 'v',4+MSB,'flow',null ; 31 - verflow db ' m',7+MSB,'s' ; 32 - missing db 6+MSB,'g',null db 'alr',13+MSB,9+MSB,null ; 33 - already db 18+MSB,'l' ; 34 - too long db 11+MSB,'g',null db 'R',13+MSB,'-',11+MSB ; 35 - Read-only db 'l',9+MSB,null db 'Un',5+MSB,'pect' ; 36 - Unexpected db 2+MSB,' ',null db 15+MSB,10+MSB,'comm' ; 37 - irect command db 1+MSB,'d',null ; ; Standard errors ; l11ab: db 30+MSB,23+MSB,null ; Unknown error db 36+MSB,17+MSB,null ; Unexpected NEXT db 'Syntax',23+MSB,null ; Syntax error db 36+MSB,'RETURN',null ; Unexpected RETURN db 'DATA ',5+MSB,'haust' ; DATA exhausted db 2+MSB,null db 'Improp',4+MSB,' argum' ; Improper argument db 3+MSB,'t',null ; ; More standard errors ; l11de: db 'O',31+MSB,null ; Overflow db 'Mem',8+MSB,'y' ; Memory full db 20+MSB,null db 'L',6+MSB,'e',0+MSB ; Line does not exist db 'oes ',16+MSB,5+MSB db 7+MSB,'t',null db 'Subscrip',10+MSB,'ou' ; Subscript out of range db 10+MSB,'of r',1+MSB db 'ge',null db 'Arra',9+MSB,33+MSB ; Array already dimensioned db 'dim',3+MSB,'s',14+MSB db 2+MSB,null ; ; Still more standard errors ; l1217: db 'Div',7+MSB,14+MSB ; Division by zero db ' b',9+MSB,'z',4+MSB db 'o',null db 'I',25+MSB,0+MSB ; Invalid direct command db 37+MSB,null db 'Type m',7+MSB ; Type mismatch db 'match',null db 29+MSB,'space' ; String space full db 20+MSB,null db 29+MSB,34+MSB,null ; String too long db 29+MSB,5+MSB,'press' ; String expression too complex db 14+MSB,' ',18+MSB db 'compl',5+MSB,null db 'C',1+MSB,16+MSB ; Cannot CONTinue db 'CONT',6+MSB,'ue',null db 30+MSB,' us',4+MSB ; Unknown user function db ' funct',14+MSB,null db 26+MSB,32+MSB,null ; RESUME missing db 36+MSB,26+MSB,null ; Unexpected RESUME db 'O/S',0+MSB,'ep',3+MSB ; O/S dependent error db 'd',3+MSB,'t',23+MSB,null db 'Op',4+MSB,1+MSB ; Operand missing db 'd',32+MSB,null db 'L',6+MSB,'e ' ; Line too long db 34+MSB,null db null ; (24) db null ; (25) db 17+MSB,32+MSB,null ; NEXT missing db null ; (27) db null ; (28) db 19+MSB,32+MSB,null ; WEND missing db 36+MSB,19+MSB,null ; Unexpected WEND ; ; File related errors ; l1295: db 28+MSB,'o',31+MSB,null ; Record overflow db 'Int',4+MSB,'nal' ; Internal error db 23+MSB,null db 21+MSB,24+MSB ; File number error db 23+MSB,null db 21+MSB,16+MSB ; File not found db 22+MSB,null db 21+MSB,'type' ; File type error db 23+MSB,null db 21+MSB,33+MSB ; File already open db 'op',3+MSB,null db null ; (56) db 'D',7+MSB,'c I/O' ; Disc I/O error db 23+MSB,null db 21+MSB,33+MSB,5+MSB ; File already exists db 7+MSB,'ts',null db null ; (59) db null ; (60) db 'D',7+MSB,'c' ; Disk full db 20+MSB,null db 'EOF met',null ; EOF met db 28+MSB,24+MSB ; Record number error db 23+MSB,null db 21+MSB,'name i' ; File name invalid db 25+MSB,null db null db 'D',37+MSB,' ' ; Direct command found db 22+MSB,null db 'D',15+MSB,'t',8+MSB ; Directory full db 'y',20+MSB,null db 'R',13+MSB,' pas' ; Read past EOF db 10+MSB,'EOF',null db 28+MSB,7+MSB,27+MSB,null; Record is locked db 35+MSB,'d',7+MSB ; Read-only disc db 'c',null db 35+MSB,'f',12+MSB,null ; Read-only file db 'I',25+MSB,0+MSB ; Invalid drive db 'rive',null db 21+MSB,7+MSB ; File is locked db 27+MSB,null db 'RESET',0+MSB,3+MSB ; RESET denied db 'i',2+MSB,null ; ; Jetsam errors ; l131f: db 'No',10+MSB,'a key' ; Not a keyes file db 2+MSB,' f',12+MSB,null db 28+MSB,7+MSB,' not' ; Record is not locked db 27+MSB,null db 'Inc',11+MSB,'s',7+MSB ; Inconsistent files db 't',3+MSB,10+MSB,'f' db 12+MSB,'s',null ; ; Get byte ; l1341: push de ; *** MODIFIED AGAINST V 1.29 *** call l1366 ; Get integer push af ld a,d ; Verify 0..255 or a jr nz,l138b pop af ld a,e pop de ; *** MODIFIED AGAINST V 1.29 *** ret ; ; Get non zero byte ; ; *** MODIFIED AGAINST V 1.29 *** ; l134e: call l1341 ; Get byte push af or a ; Verify 1..255 jr z,l138b pop af ret ; ; Get positive non zero integer ; ; *** MODIFIED AGAINST V 1.29 *** ; l1357: call l135d ; Get integer jr z,l138b ; Error if zero ret ; ; Get positive integer ; ; *** MODIFIED AGAINST V 1.29 *** ; l135d: call l1366 ; Get integer ld a,d rlca ; Verify >= 0 jr c,l138b or e ret ; ; Get integer into DE ; l1366: call l13f2 ; Get expression push af ex de,hl call l6df6 ; Get integer ex de,hl pop af ret ; ; ; l1371: call l13f2 push af push bc push hl call l6e31 ex de,hl pop hl pop bc pop af ret l137f: call l13f2 jp l6b07 l1385: call l13f2 jp l6eee l138b: jp l0eaa ; ; Save line address ; l138e: ld (l7229),hl ; Just do it ret ; ; ; l1392: ld bc,0 ld de,-2 call l4884 ; Test end of statement ret c ; Yeap cp ',' ret z cp 0f2h ; Test unary '-' jr z,l13ad ; Yeap call l13c3 ; Get number ld b,d ld c,e ret z ld a,(hl) cp ',' ret z l13ad: call l4862 ; Verify '-' db 0f2h ld de,lfffe ret z cp ',' ret z call l13c3 ; Get number ex de,hl call l6f85 ; HL:BC ex de,hl ret nc jr l138b ; ; Load 16 bit number into DE from token stream ; l13c3: ld a,(hl) ; Get token cp 02eh ; Test address reference jr nz,l13d1 ; Nope call l4869 ; Skip spaces ex de,hl ld hl,(l7229) ; Fetch result ex de,hl ret ; ; Load 16 bit number into DE from token stream ; l13d1: ld a,(hl) ; Get token inc hl ld e,(hl) ; Fetch argument inc hl ld d,(hl) cp 01dh ; Test 16 bit integer (???) jr z,l13ef cp 01ch ; Test long integer (???) jr z,l13e6 dec hl ; Fix for previous token dec hl ld de,0 ; Return zero value dec hl jr l13ef l13e6: push hl ex de,hl inc hl ; Fix for low part inc hl inc hl ld e,(hl) ; Fetch low part inc hl ld d,(hl) pop hl l13ef: jp l4869 ; Skip spaces ; ; Get expression ; l13f2: push bc xor a ; Set level call l13fc pop bc dec hl jp l4869 ; Skip spaces ; ; Get expression (level=Acu) ; l13fc: dec hl l13fd: push af call l14c7 push hl l1402: pop hl pop bc ld a,(hl) ; Get token cp 0ebh ; Test operator ret c ; Nope cp 0fdh ret nc cp 0f1h ; Test simple math jr c,l1453 ; Yeap call z,l6ef6 ; Got '+' jr nz,l1426 push bc push hl ld hl,(l7602) ; Get argument ex (sp),hl call l14c7 call l6eee ex (sp),hl call l679f jr l1402 l1426: ld a,(hl) ; Get ?? sub 0f1h ; Less offset ld e,a add a,a ; *2 add a,e ; *3 add a,LOW l147b ; Build table entry ld e,a adc a,HIGH l147b sub e ld d,a ex de,hl ld a,b ; Get ?? cp (hl) ; Compare ex de,hl ret nc ; Not in range push bc l1439: call l6f04 push de push bc ld a,(de) ld b,a call l13fd pop bc ex (sp),hl inc hl ld a,(hl) ; Fetch address from table inc hl ld d,(hl) ld e,a ld a,c call l659f call l6fb7 ; Execute ^DE jr l1402 l1453: ld a,b cp 00eh ret nc push bc ld a,(hl) sub 0eah ld b,a call l6ef6 ld de,l149f jr nz,l1439 push hl ld hl,(l7602) ; Get argument ex (sp),hl push bc ld a,0eh call l13fd pop bc ex (sp),hl push bc call l67c1 pop bc call l14a7 jr l1402 ; l147b: db 10h dw l6c1b db 10h dw l6c2f db 16h dw l6c42 db 16h dw l6c62 db 1ah dw l3a1d db 14h dw l6c78 db 0ah dw l6c96 db 04h dw l6cc1 db 02h dw l6caf db 12h dw l6c89 db 08h dw l6ca1 db 06h dw l6cb3 l149f: db 0eh dw l14a2 l14a2: push bc call l6c55 pop bc l14a7: add a,1 adc a,a and b add a,-1 sbc a,a jp l6e8a ; ; Function : - ; l14b1: ld a,18h call l13fc push hl call l6cd3 pop hl ret ; ; Function : NOT ; l14bc: ld a,0ch call l13fc push hl call l6cc5 pop hl ret ; ; ; l14c7: call l4869 ; Skip spaces ; ; Function : + ; l14ca: jr z,l14e9 ; No opearnd cp 00dh+1 ; Test range jr c,l1514 cp ' ' jr c,l1533 cp 022h ; Test STR$ (???) jp z,l66ff cp 0ffh ; Test ??? jp z,l1579 push hl ld hl,l14ed call l6f5a ; Get from table ex (sp),hl jp l4869 ; Skip spaces l14e9: call l0eae ; Operand missing db 22 ; l14ed: db 00ch dw l0ea6 db 028h ; 0x28 : STRIP$ ????? dw l1573 db 0f1h ; 0xF1 : + dw l14ca db 0f2h ; 0xF2 : - dw l14b1 db 0fdh ; 0xFD : NOT dw l14bc db 0ddh ; 0xDD : ERR dw l15a5 db 0dch ; 0xDC : ERL dw l15b4 db 0e6h ; 0xE6 : VARPTR dw l15ba db 0a9h ; 0xA9 : MID$ dw l6901 db 0e5h ; 0xE5 : USR dw l5f84 db 0deh ; 0xDE : FN dw l15fe db 0e7h ; 0xE7 : HIMEM dw l15d3 db 0e8h ; 0xE8 : OSERR dw l15ae ; ; ; l1514: call l3f0d jr nc,l1524 cp 3 jr z,l152c push hl ex de,hl call l6efc pop hl ret l1524: cp 3 jp nz,l6e78 ld de,l1532 l152c: ex de,hl ld (l7602),hl ; Save argument ex de,hl ret ; l1532: db 0 ; ; ; l1533: sub 0eh ld e,a ld d,0 cp 0ah jr c,l1558 inc hl ld e,(hl) jr z,l1558 inc hl ld d,(hl) cp 0eh jr c,l1558 cp 10h jr c,l155f cp 10h ld a,4 jr z,l1551 add a,a l1551: dec hl call l6efc dec hl jr l1570 l1558: ex de,hl call l6e92 ex de,hl jr l1570 l155f: push hl cp 0eh jr nz,l156b inc de ex de,hl inc hl inc hl ld e,(hl) inc hl ld d,(hl) l156b: ex de,hl call l6dd0 pop hl l1570: jp l4869 ; Skip spaces l1573: call l13f2 jp l4856 ; Verify ')' l1579: inc hl ld c,(hl) call l4869 ; Skip spaces ld a,c add a,a add a,2*01fh ; *** MODIFIED AGAINST V 1.29 *** ld c,a cp 099h ; *** MODIFIED AGAINST V 1.29 *** jp nc,l0ea6 cp 03dh ; *** MODIFIED AGAINST V 1.29 *** jr c,l1598 call l4852 call l1573 ; Verify '(' push hl call l1598 pop hl ret l1598: push hl ld b,0 ld hl,l165c add hl,bc ld a,(hl) inc hl ld h,(hl) ld l,a ex (sp),hl ret ; ; Function : ERR ; l15a5: push hl ld a,(l7220) ; Get error call l6e8f pop hl ret ; ; Function : OSERR ; l15ae: push hl ld hl,(l7315) ; Get OS error jr l15d7 ; ; Function : ERL ; l15b4: push hl call l0f00 ; Get line number jr l15d7 ; ; Function : VARPTR (var) ; VARPTR (#file_number) ; l15ba: call l4852 ; Verify '(' call l15c7 call l4856 ; Verify ')' push hl ex de,hl jr l15d7 l15c7: cp '#' jp z,l1d3a call l3f0d jp nc,l0eaa ret ; ; Function : HIMEM ; l15d3: push hl ld hl,(l75bb) ; Get hi memory l15d7: call l6dd0 pop hl ret ; ; Statement : DEF FNname[(parameter)]=expr ; DEF USER[digit]=expr ; l15dc: cp 0e5h ; Test USER jp z,l5f71 call l4862 ; Verify FN db 0deh ex de,hl call l491f ex de,hl ld a,12 jp nc,l0eb0 ; Invalid direct command call l3f1f push hl call l64cf ex de,hl ld (hl),e inc hl ld (hl),d pop hl jp l5564 ; ; Function : FN ; l15fe: call l3f1f push bc push hl ex de,hl ld e,(hl) inc hl ld d,(hl) ld hl,(l75c7) ; Get start of program add hl,de ld a,d or e ld a,18 jp z,l0eb0 ; Unknown user function call l43ad ld a,(hl) cp '(' jr nz,l1642 call l4869 ; Skip spaces ex (sp),hl call l4852 ; Verify '(' ex (sp),hl l1622: call l43ef ex (sp),hl push de call l13f2 ex (sp),hl ld a,b call l3eb8 pop hl call l4888 ; Test comma jr nc,l163b ; Nope ex (sp),hl call l485a ; Verify ',' jr l1622 l163b: call l4856 ; Verify ')' ex (sp),hl call l4856 ; Verify ')' l1642: call l43cd call l485e ; Verify '=' call l13f2 jp nz,l0ea6 call l6ef6 call z,l6a7d call l43d6 pop hl pop af jp l6e45 ; ; Function table ***** INVALID NUMBER TO FUNCTION ASSIGNMENT ***** ; l165c:: dw l205b ; 0x61 : 0xe1 : ???*** MODIFIED AGAINST V 1.29 *** dw l200f ; 0xe2 : ??? *** MODIFIED AGAINST V 1.29 *** dw l2df2 ; 0xe3 : TO dw l2e42 ; 0xe4 : USING dw l2367 ; 0xe5 : USR dw l234f ; 0xe6 : VARPTR dw l23b2 ; 0xe7 : HIMEM dw l304e ; 0xe8 : OSERR dw l302a ; 0xe9 : -- dw l303d ; 0xea : -- dw l2e33 ; 0xeb : > dw l243c ; 0xec : = dw l244f ; 0xed : >= dw l245c ; 0xee : < dw l2426 ; 0xef : <> dw l2447 ; 0xf0 : <= dw l247c ; 0xf1 : + dw l686e ; 0xf2 : - dw l2017 ; 0xf3 : * ???? dw l6847 ; 0xf4 : / dw l6998 ; 0xf5 : ^ dw l469c ; 0xf6 : \ dw l69ff ; 0xf7 : AND dw l68f2 ; 0xf8 : EQV dw l16fa ; 0xf9 : IMP dw l16f6 ; 0xfa : MOD dw l6842 ; 0xfb : OR dw l68f7 ; 0xfc : XOR dw l3d36 ; 0xfd : NOT dw l1724 ; 0xfe : -- dw l69b2 ; 0xff : -- dw l0eaa ; 0x00 : -- INVALID dw l6ccf ; 0x01 : ABS dw l698c ; 0x02 : ASC dw l3c11 ; 0x03 : ATN dw l6e74 ; 0x04 : CDBL dw l6992 ; 0x05 : CHR$ dw l6df6 ; 0x06 : CINT dw l3ba6 ; 0x07 : COS dw l6e5d ; 0x08 : CSNG dw l6835 ; 0x09 : CVD dw l682d ; 0x0a : CVI dw l6831 ; 0x0b : CVS dw l1cea ; 0x0c : EOF dw l3abe ; 0x0d : EXP dw l6d2d ; 0x0e : FIX dw l6b62 ; 0x0f : FRE dw l5f47 ; 0x10 : INP dw l6d32 ; 0x11 : INT dw l6986 ; 0x12 : LEN dw l1d14 ; 0x13 : LOC dw l1d30 ; 0x14 : LOF dw l3b3a ; 0x15 : LOG dw l3b32 ; 0x16 : LOG10 dw l6770 ; 0x17 : LOWER$ dw l058f ; 0x18 : LPOS dw l6803 ; 0x19 : MKD$ dw l67fb ; 0x1a : MKI$ dw l67ff ; 0x1b : MKS$ dw l5f19 ; 0x1c : PEEK dw l0595 ; 0x1d : POS dw l6e87 ; 0x1e : SGN dw l3bb9 ; 0x1f : SIN dw l69a1 ; 0x20 : SPACE$ dw l3a15 ; 0x21 : SQR dw l689c ; 0x22 : STR$ dw l3bfe ; 0x23 : TAN dw l6e31 ; 0x24 : UNT dw l677c ; 0x25 : UPPER$ dw l69d5 ; 0x26 : VAL dw l0eaa ; 0x27 : INPW INVALID dw l676a ; 0x28 : STRIP$ dw l21c6 ; 0x29 : VERSION dw l6814 ; 0x2a : CVIK dw l6821 ; 0x2b : CVUK dw l67eb ; 0x2c : MKIK$ dw l67e5 ; 0xFF : 0x2d : MKUK$ ; ; Function : MOD ; l16f6: ld b,0ffh jr l16fc ; ; Function : IMP ; l16fa: ld b,1 l16fc: call l4852 ; Verify '(' call l13f2 l1702: call l4888 ; Test comma jp nc,l4856 ; Veify ')' if not call l6f04 call l13f2 push hl ld a,c call l659f push bc push hl call l6c55 pop hl pop bc or a jr z,l1721 cp b call nz,l6eff l1721: pop hl jr l1702 ; ; Token 0xfe : ??? ; l1724: call l4852 ; Verify '(' call l13f2 call l6f04 call l4888 ; Test comma ld de,l0000 call c,l1366 ; Yeap call l4856 ; Verify ')' push hl push de ld hl,l0027 add hl,de ld de,l004f call l6f7f ; HL:DE jp nc,l0eaa pop de ld a,c call l659f ld b,e call l6cf4 pop hl ret ; ; ; l1753: ld hl,reclng ld (l722c),hl ; Set standard size xor a ld (l722b),a ; Clear max files ld (l722e),a ; Clear file type ld hl,l0002 ld (l72e8),hl ret ; ; Init file space - Accu holds maxfiles, HL record size ; Carry indicates not enough space, HL holds new top of memory ; l1767: push bc push de push af ld de,reclng call l6f7f ; HL:DE - Test min jr nc,l1773 ex de,hl ; Nope, swap l1773: ld de,l00ad add hl,de ; Add what we need ex de,hl pop af ld hl,0 ; Init bytes requested inc a l177d: dec a or a jr z,l1784 add hl,de ; Add bytes jr nc,l177d ; Ok, still memory l1784: pop de pop bc ret ; ; Clear file pointers - Number in Accu, record size in HL ; l1787: ld a,c ld (l722b),a ; Save max files ld (l722c),hl ; Store size ld de,reclng call l6f7f ; HL:DE - Test min jr nc,l1797 ex de,hl ; Nope, swap l1797: ld de,l00ad add hl,de ; Add what we need ld (l72e0),hl ; save as base file pointer ld c,b l179f: inc c ld a,(l722b) ; Get max files cp c ; Test all done ret c ; Yeap call l1963 ; Get file pointer xor a ld (de),a ; Mark passive jr l179f ; ; Get address of requested file in Accu - File space in reg HL ; l17ac: ex de,hl ld hl,(l72e0) ; Get base file pointer ex de,hl l17b1: dec a ret z add hl,de ; Calculate address jr l17b1 ; ; Get address of file buffer ; l17b6: push af ld hl,l0030 add hl,de ; Position pointer ld a,(hl) ; Fetch address inc hl ld h,(hl) ld l,a pop af ret ; ; Prepare file - Reg C indicates mode ; l17c1: push bc push bc push hl ld a,c or a jr z,l17d2 ld hl,(l72e0) ; Get base file pointer ld b,h ; Copy it ld c,l ld hl,l00ad jr l17d8 l17d2: ld bc,l00b2 ld hl,l0032 l17d8: push de l17d9: xor a ld (de),a inc de dec bc ld a,b or c jr nz,l17d9 pop de push de add hl,de ; Get offset ex de,hl ld bc,l0030 add hl,bc ld (hl),e ; Save disk buffer address inc hl ld (hl),d pop de pop hl pop bc inc de ld b,c ld c,-1 call l1d53 ; Parse file pop bc ret z call l0eae ; File name invalid db 64 ; ; Statement : OPEN mode,file_number,filename[,record_length] ; OPEN mode,file_number,filename[,record_length],key ; ; For indexed files: ; ; OPEN mode,file_number,data_filename, ; index_filename,key,set_length ; OPEN mode,file_number,data_filename, ; index_filename,key,set_length,user_id ; l17fc: call l0eae ; File already open db 55 l1800: call l188f ; Get mode call l485a ; Verify ',' call l1959 ; Get file number jr nz,l17fc ; Invalid call l485a ; Verify ',' call l17c1 ; Prepare file ld a,b cp 4 jp z,l2c3b cp 3 jr z,l1825 call l1882 ld a,b cp 2 jr z,l1863 jr l1878 l1825: push de ld de,l0080 call l4888 ; Test comma jr nc,l1836 ; Nope ld a,(hl) cp ',' jr z,l1836 call l1357 l1836: ex (sp),hl push hl ld hl,(l722c) ; Get size call l6f7f ; HL:DE jp c,l0eaa ld b,d ld c,e pop de ld hl,l0025 add hl,de ld (hl),c inc hl ld (hl),b pop hl call l1882 call l20dc ; Create file ld a,3 jr l1868 ; ; ; l1856:: ld c,0 ex de,hl ld hl,l722e ld (l72e4),hl ; Set file ex de,hl call l17c1 ; Prepare file l1863: call l20e0 ; Create file ld a,2 l1868: dec de ld (de),a ret ; ; Reset file for read and read 1st record ; l186b: ld c,0 ex de,hl ld hl,l722e ld (l72e2),hl ; Set input file ex de,hl call l17c1 l1878: call l20e5 ; Verify file on disk ld a,1 dec de ld (de),a ; Set type jp l1a09 ; Read record ; ; ; l1882: call l4888 ; Test comma ret nc ; Nope ; *** MODIFIED AGAINST V 1.29 *** call l1341 ; *** MODIFIED AGAINST V 1.29 *** cp 3 jp nc,l0eaa ret ; ; Get mode of file ; ; Map 'I' -> 1 ; 'O' -> 2 ; 'R' -> 3 ; 'K' -> 4 ; l188f: call l137f ld a,b or a jr z,l18ab ; Error ld a,(de) ; Get mode chaharetr call l6f48 ; As upper case ld b,1 ; Init binary type cp 'I' ret z inc b cp 'O' ret z inc b cp 'R' ret z inc b cp 'K' ret z l18ab: call l0eae ; File type error db 54 ; ; Statement : CLOSE [list of file_numbers] ; l18af: jr z,l18d1 l18b1: ld a,(hl) cp '#' ; Test file indicator call z,l4869 ; Skip spaces if so call l1341 ld c,a or a jr z,l18cb call l1963 cp 4 push af call z,l2d52 pop af call nz,l1905 l18cb: call l4888 ; Test comma jr c,l18b1 ret l18d1: xor a l18d2: push bc push de ld c,a l18d5: inc c ld a,(l722b) ; Get max files cp c jr c,l18e4 call l1963 call l1905 jr l18d5 l18e4: pop de pop bc ret l18e7: ld a,(l722b) ; Get max files or a ; *** MODIFIED AGAINST V 1.29 *** ret z ; *** MODIFIED AGAINST V 1.29 *** ld c,a inc b l18ee: call l1963 inc de ld a,(de) dec de cp b call z,l1905 dec c jr nz,l18ee ret ; ; ; l18fc: push de ld de,l722e call l1905 pop de ret ; ; ; l1905: ld a,(de) ; Get file type cp 4 jp z,l2d5c ; 'K' cp 2 jr nz,l1926 ; Not 'O' push bc push hl ex de,hl ld (l72e4),hl ; Set file ex de,hl ld c,eof call l1a44 ; Give end ld hl,l002e add hl,de ld a,(hl) ; Test partial buffer or a call nz,l1aec ; Write to disk pop hl pop bc l1926: ld a,(de) ; Get file type or a ; Test active ret z ; Nope xor a ld (de),a ; Clear type inc de jp l2103 ; Close file ; ; ; l192f: call l195f ex de,hl ld (l72e4),hl ; Set file cp 2 jr l1943 l193a: call l195f ex de,hl ld (l72e2),hl ; Set input file cp 1 l1943: ex de,hl ret z cp 3 ret nc or a jr z,l1988 jp l18ab l194e: call l1959 ; Get file number jr z,l1988 cp 3 jp c,l18ab ret ; ; Get file number ; l1959: ld a,(hl) cp '#' ; Test marker call z,l4869 ; Skip spaces if so l195f: call l134e ld c,a ; ; ; l1963: push hl ld a,(l722b) ; Get max files cp c jr c,l1988 ld a,c ld hl,(l75bd) call l17ac ; Get address of requested file ex de,hl ld a,(de) or a pop hl ret ; ; ; l1976: call l6df6 ; Get integer ld a,h or a ; Verify byte jr nz,l1988 or l ; Verify <> 0 jr z,l1988 jp m,l1988 ld c,l call l1963 ret nz l1988: call l0eae ; File number error db 52 ; ; Get character from file into Accu ; l198c: push hl ld hl,(l72e2) ; Get input file ld a,(hl) pop hl cp 3 ; Test type jr nc,l19b0 ; Not sequential ; ; Get character from file into Accu ; l1996: call l19b0 ; Get byte ret nc ; End of file cp eof ; Test eof scf ret nz ; Nope push de push hl ld hl,(l72e2) ; Get input file ld de,l002e add hl,de ; Position pointer ld (hl),0 ; Mark end of file inc hl ld (hl),0 pop hl pop de or a ret ; ; Get character from file into Accu ; l19b0: push hl push de ld hl,(l72e2) ; Get input file ex de,hl ld a,(de) cp 3 ; Test sequential jr nc,l19cf ; Nope l19bb: ld hl,l002f add hl,de ; Point to file position ld a,(hl) or a jr nz,l19d4 ; Still in line dec hl ld a,(hl) ; Get index or a ld a,eof jr z,l19e1 ; End of record call l1a09 ; Read record jr l19bb l19cf: call l1a81 jr l19df l19d4: dec (hl) ; Count down index ld a,reclng-1 sub (hl) call l17b6 ; Get buffer address ld e,a ld d,0 add hl,de ; Position it l19df: ld a,(hl) ; Fetch byte scf l19e1: pop de pop hl ret ; ; ; l19e4: ex de,hl ld hl,(l72e2) ; Get input file ex de,hl push hl ld hl,l002f add hl,de ld b,(hl) ; Get length of line pop hl l19f0: call l19b0 ; Get from file ld (hl),a ; Save inc hl dec b jr nz,l19f0 l19f8: push hl call l1a2e pop hl inc de call l2170 ; Read record dec de ret nc ; End ld bc,reclng add hl,bc ; Bump jr l19f8 ; ; Read record from file ; l1a09: push hl call l1a2e call l17b6 ; Get buffer address inc de call l2170 ; Read record dec de sbc a,a ; 0xFF is successfull and MSB ld hl,l002f add hl,de ld (hl),a ; Save position (either 0x00 or 0x80) dec hl ld (hl),a pop hl ret ; ; ; l1a21: push de push hl ld hl,(l72e2) ; Get input file ld de,l002f add hl,de ; Set pointer inc (hl) ; Advance line pointer pop hl pop de ret ; ; ; l1a2e: ld hl,l002c add hl,de ; Set pointer inc (hl) ; Advance lo ret nz ; No carry inc hl inc (hl) ; Advance hi ret ; ; Give new line to file ; l1a37: push bc ld c,cr call l1a44 ; Simple one ld c,lf call l1a44 pop bc ret ; ; Put character in reg C to file - Preserving regs ; l1a44: push de ; Save regs push hl call l1a4c ; Put to file pop hl pop de ret ; ; Put character in reg C to file ; l1a4c: ld hl,(l72e4) ; Get output file ex de,hl ld a,(de) ; Get mode cp 3 jr nc,l1a6d ; Not sequential ld hl,l002e add hl,de push hl ld a,(hl) ; Get record index cp reclng ; Test buffer filled call z,l1aec ; Write to disk if so pop hl push bc ld c,(hl) ; Get index ld b,0 inc (hl) call l17b6 ; Get buffer address add hl,bc ; Position in buffer pop bc jr l1a70 l1a6d: call l1a81 l1a70: ld (hl),c ; Store byte ld hl,l002f add hl,de inc (hl) ; Bump line index ld a,c cp ' ' ; Test printable ret nc ; Yeap dec (hl) ; Fix count cp cr ; Test return ret nz ; Nope ld (hl),0 ; Clear line position ret ; ; ; l1a81: push bc ; *** MODIFIED AGAINST V 1.29 *** ld hl,l002a+1 add hl,de ld b,(hl) dec hl ld c,(hl) push hl ld a,(de) cp 4 jr nz,l1a91 inc bc inc bc l1a91: dec hl dec hl dec hl ld a,(hl) dec hl ld l,(hl) ld h,a ; *** MODIFIED AGAINST V 1.29 *** call l6f85 ; HL:BC jp z,l1b7d pop hl ; *** MODIFIED AGAINST V 1.29 *** inc (hl) jr nz,l1aa4 inc hl inc (hl) l1aa4: ; *** MODIFIED AGAINST V 1.29 *** call l17b6 ; Get buffer address add hl,bc pop bc ret l1aaa: push de push hl ld hl,(l72e4) ; Get output file ex de,hl ld a,(de) cp 3 jr c,l1adb ; Sequential ld hl,l002a add hl,de ld c,(hl) inc hl ld b,(hl) jr z,l1ac0 inc bc inc bc l1ac0: ld hl,l0026 add hl,de ld a,(hl) sub c ld e,a inc hl ld a,(hl) sbc a,b ld d,a ld hl,lfffe add hl,de jr nc,l1adb l1ad1: ld c,' ' ; Put blank to file call l1a44 dec hl ld a,h or l jr nz,l1ad1 l1adb: pop hl pop de ret ; ; Get position of file record ; l1ade: push de push hl ld hl,(l72e4) ; Get output file ld de,l002f add hl,de ; Position line index ld a,(hl) inc a ; Make 1 relative pop hl pop de ret ; ; Write record ro disk ; l1aec: call l17b6 ; Get buffer address inc de call l2135 ; Write record dec de jr nc,l1b03 ld hl,l002e add hl,de ld (hl),0 ; Clear index dec hl dec hl inc (hl) ret nz inc hl inc (hl) ret l1b03: push af ld a,(de) cp 4 jr nz,l1b20 push de ld hl,(l75bd) ex de,hl call l6f8b ; DE:=HL-DE ld hl,(l72e0) ex de,hl call l47af ld c,l inc c pop de call l2d4b jr l1b26 l1b20: xor a ld (de),a inc de call l2103 l1b26: pop af jp l0eb0 l1b2a: call l194e push hl call l17b6 ; Get buffer address ld b,h ld c,l ld hl,l0026 add hl,de ld e,(hl) inc hl ld d,(hl) ex de,hl add hl,bc ld (l72e6),hl cp 4 jr nz,l1b49 ld hl,(l72e8) add hl,bc ld b,h ld c,l l1b49: pop hl call l485a l1b4d: push bc call l1341 ld e,a ld d,0 push de call l4862 db 0dah call l3f03 call l6eee pop bc ex (sp),hl push de push hl add hl,bc ex de,hl ld hl,(l72e6) call l6f7f ; HL:DE jr c,l1b7d ex de,hl pop de ex (sp),hl ld (hl),c inc hl ld (hl),e inc hl ld (hl),d pop bc pop hl call l4888 jr c,l1b4d ret l1b7d: call l0eae ; Record overflow db 50 l1b81: call l135d ex de,hl ld (l72e8),hl ex de,hl ret l1b8a: call l1c09 push hl call l1c51 l1b91: push bc push hl call l1cc2 push de ld hl,(l72ec) ex de,hl ld hl,(l72ea) call l6fa8 ; Move up ex de,hl ld (l72ec),hl pop de pop hl pop bc call l1c89 jr c,l1b91 pop hl ret l1baf: call l1c09 ld a,(de) cp 4 jr nz,l1bd4 push hl push de push bc push bc call l2e0c pop bc ld h,b ld l,c call l30f7 push hl call l17b6 ; Get buffer address ld e,(hl) inc hl ld d,(hl) pop hl call l6f7f ; HL:DE jr nz,l1c05 pop bc pop de pop hl l1bd4: call l1bdb ret c jp l1b03 l1bdb: push hl call l1c51 l1bdf: push bc push hl ld a,c and 7fh call nz,l1cc2 push de ld hl,(l72ea) ex de,hl ld hl,(l72ec) call l6fa8 ; Move up ld (l72ec),hl pop de call l1cac pop hl pop bc jr nc,l1c03 call l1c89 jr c,l1bdf scf l1c03: pop hl ret l1c05: call l0eae ; Record number error db 63 l1c09: call l194e push hl ld hl,l0028 add hl,de ex (sp),hl call l4888 jr nc,l1c2b ld a,(hl) cp ',' jr z,l1c2b push de call l1371 ld a,d or e jp z,l0eaa ld b,d ld c,e pop de ex (sp),hl jr l1c3a l1c2b: ex (sp),hl ld c,(hl) inc hl ld b,(hl) dec hl ld a,(de) cp 4 jr z,l1c3a inc bc ld a,b or c jr z,l1c05 l1c3a: ld a,(de) cp 4 jr z,l1c49 ld (hl),c inc hl ld (hl),b dec bc pop hl call l1882 jr l1c4e l1c49: dec bc call l3002 pop hl l1c4e: jp l487e l1c51: push de ld hl,l002a add hl,de xor a ld (hl),a inc hl ld (hl),a call l17b6 ; Get buffer address ld (l72ec),hl ld hl,l0026 add hl,de ld a,(hl) inc hl ld h,(hl) ld l,a push hl ld d,b ld e,c call l4820 jp c,l0eaa ld (l72ee),hl ld hl,l0080 add hl,de ld (l72ea),hl ld a,80h sub e ld c,a ld b,d pop hl pop de call l6f85 ; HL:BC ret nc ld b,h ld c,l ret l1c89: ld a,l sub c ld l,a ld a,h sbc a,b ld h,a or l ret z push hl ld hl,(l72ee) inc hl ld (l72ee),hl ld hl,l0080 ld (l72ea),hl pop hl ld bc,l0080 call l6f85 ; HL:BC jr nc,l1caa ld b,h ld c,l l1caa: scf ret l1cac: push bc push hl call l1cd7 inc de call l2135 dec de jr nc,l1cbf ld hl,l002e add hl,de ld (hl),0 scf l1cbf: pop hl pop bc ret l1cc2: push bc push hl call l1cd7 inc de call l2170 dec de sbc a,a and 80h ld hl,l002e add hl,de ld (hl),a pop hl pop bc ret l1cd7: ld hl,(l72ee) ld b,h ld c,l ld hl,l0022 add hl,de ld (hl),c inc hl ld (hl),b inc hl ld (hl),0 ld hl,l0080 ret ; ; Function : EOF (file_number) ; l1cea: call l1976 and 1 jp z,l18ab ld hl,l002e add hl,de ld a,(hl) or a jr z,l1d0e ld a,(de) cp 3 jr z,l1d0e ex de,hl ld (l72e2),hl ; Set input file ex de,hl call l19b0 push af call c,l1a21 pop af sub 1ah l1d0e: sub 1 sbc a,a jp l6e8a ; ; Function : LOC (file_number) ; l1d14: call l1976 cp 3 jr c,l1d26 ld hl,l0028 add hl,de ld a,(hl) inc hl ld h,(hl) ld l,a jp l6dd0 l1d26: ld hl,l002d add hl,de ld a,(hl) dec hl ld l,(hl) jp l6e91 ; ; Function : LOF (file_number) ; l1d30: call l1976 inc de call l1ee9 jp l6e8f l1d3a: call l1959 push hl call l17b6 ; Get buffer address ex de,hl pop hl ret l1d44: ld de,l72f0 l1d47: push de ld b,'%' xor a l1d4b: ld (de),a inc de dec b jr nz,l1d4b pop de ld b,0ffh l1d53: push bc push de push de push hl ld hl,l0009 add hl,de ld a,b or a ld de,l1d8e jr nz,l1d65 ld de,l1d91 l1d65: ld b,3 l1d67: ld a,(de) ld (hl),a inc de inc hl dec b jr nz,l1d67 pop hl call l1d98 ex (sp),hl ex de,hl call l1e08 jr nc,l1d94 pop hl pop de push de ld bc,256*(_nam+_ext)+0 ;;l0b00 l1d7f: inc de ld a,(de) cp '?' jr nz,l1d86 inc c l1d86: dec b jr nz,l1d7f ld a,c or a pop de pop bc ret l1d8e: db ' ' l1d91: db 'BAS' l1d94: call l0eae ; File name invalid db 64 l1d98: ld a,c or a jp nz,l137f call l4894 ld d,h ld e,l ld b,0 l1da4: ld a,(hl) or a ret z cp ' ' jp z,l4894 cp ',' ret z cp '=' ret z inc hl inc b jr l1da4 l1db6: call l1ea1 ret nc ld c,0 call l1e01 jr nc,l1ddc ld c,1 ld e,a call l1eab call c,l1e01 jr nc,l1dd8 ld d,a ld a,e add a,a ld e,a add a,a add a,a add a,e add a,d ld e,a call l1eab l1dd8: ld a,e cp 10h ret nc l1ddc: call l1eb0 ccf ret c sub 'A' jr c,l1df3 cp 10h jr nc,l1df3 ld d,a ld a,c or 2 ld c,a call l1e9d ccf ret c l1df3: ld a,c or a ret z call l1ea1 xor ':' ret nz call l1e9d scf ret l1e01: sub '0' ccf ret nc cp 0ah ret l1e08: call l1ea1 ret nc ld c,a call l20bb inc a ld (de),a push hl ld hl,l0024 add hl,de ld a,(l7317) ld (hl),a pop hl ld a,c push hl push bc l1e1f: cp ':' jr z,l1e28 call l1eab jr c,l1e1f l1e28: pop bc pop hl or a ld a,c jr z,l1e5a push de call l1db6 ex (sp),hl jr nc,l1e4c ld a,c rra jr nc,l1e43 ld a,e push hl push bc ld bc,l0024 add hl,bc ld (hl),a pop bc pop hl l1e43: ld a,c and 2 scf jr z,l1e4c ld a,d inc a ld (hl),a l1e4c: ex de,hl pop hl ret nc inc de call l1ea1 jr nz,l1e5b ld c,0bh scf jr l1e94 l1e5a: inc de l1e5b: cp '.' ret z ld c,8 call l1e6e ret c xor '.' ret nz call l1e9d ld c,3 jr nc,l1e8b l1e6e: push hl cp ' ' ld hl,l1ebd call nc,l6f71 pop hl jr c,l1e8b dec c ret m cp '*' call z,l1e94 ld (de),a inc de call l1eab jr nz,l1e6e call c,l1e9d l1e8b: push af ld a,' ' call l1e96 pop af ccf ret l1e94: ld a,'?' l1e96: inc c l1e97: dec c ret z ld (de),a inc de jr l1e97 l1e9d: call l1eab ret nc l1ea1: call l1eb0 l1ea4: ret nz call l1eab jr c,l1ea4 ret l1eab: ld a,b or a ret z dec b inc hl l1eb0: ld a,b or a ret z ld a,(hl) and 7fh call l6f48 ; Convert to upper case cp ' ' scf ret l1ebd: db '.[]<>/\,;:=|',0 l1eca: call l137f push hl ex de,hl call l1db6 jp nc,l0eaa ld a,b or a jp nz,l0eaa ld a,c rra jr nc,l1ee2 ld hl,l7317 ld (hl),e l1ee2: pop hl rra ret nc ld a,d jp l20aa l1ee9: ld hl,l000f add hl,de ld a,(hl) ret l1eef: ld c,0 ld a,(hl) or a call l1efe call l4888 jr c,l1eef ret l1efc: ld c,0ffh l1efe: jr nz,l1f0b push hl ld hl,l1f22 ld c,0 call l1d44 jr l1f0f l1f0b: call l1d44 push hl l1f0f: ld de,l72f0 call l2117 jp z,l1fb8 l1f18: call l1f26 call l2123 jr nz,l1f18 pop hl ret l1f22: db '*.*',0 l1f26: ld a,' ' call l0478 ld b,8 call l1f56 ld a,(hl) and 7fh cp ' ' jr z,l1f39 ld a,'.' l1f39: call l0478 ld b,3 call l1f56 call l056a call l050a dec a sub l jp nc,l0472 cp 0f3h jp nc,l0472 ld a,' ' jp l0478 l1f56: ld a,(hl) and 7fh call l0478 inc hl dec b jr nz,l1f56 ret l1f61: ld c,0 call l1fae call l4862 db 03dh call l1d44 jr l1f7b l1f6f: ld c,0ffh call l1d44 call l4862 db 0dah call l1fae l1f7b: push hl ld de,l72f0 call l20ff jr z,l1fb8 ld a,(l7314) ld hl,l00a4 cp (hl) jp nz,l0eaa ld a,(de) ld hl,l0080 cp (hl) jp nz,l0eaa ex de,hl call l20ff ex de,hl ld a,':' jp nz,l0eb0 push de ld de,l7300 ld a,10h call l6fa2 ; Move up pop de pop hl jp l210f l1fae: ld de,l0080 call l1d47 jp nz,l1d94 ret l1fb8: call l0eae ; File not found db 53 l1fbc: ld c,0 call l1fc9 call l4888 jr c,l1fbc ret l1fc7: ld c,0ffh l1fc9: call l1d44 cp 0bh jp z,l1d94 call l210b jp nc,l0eb0 ret l1fd8: ld c,0 jr l1fde l1fdc: ld c,0ffh l1fde: call l1d44 jp nz,l1d94 push hl call l20e5 l1fe8: ld hl,l0080 call l2170 jr nc,l200b ld b,80h l1ff2: call l041c jr nc,l1ffd call l2103 jp l0fb3 l1ffd: ld a,(hl) inc hl cp 1ah jr z,l200b call l0490 dec b jr nz,l1ff2 jr l1fe8 l200b: pop hl jp l2103 ; ; Token 0xe2 : ?? ; l200f: call l2045 l2012: ld b,0 jp l6ae4 ; ; Function : * ; l2017: call l2045 push hl ld de,l72f0 call l2117 jr z,l202d l2023: dec bc ld a,b or c jr z,l2030 call l2123 jr nz,l2023 l202d: pop hl jr l2012 l2030: ld b,0ch call l6ae4 ld a,8 call l6fa2 ; Move up ld a,'.' ld (de),a inc de ld a,3 call l6fa2 ; Move up pop hl ret l2045: call l4852 ld c,0ffh call l1d44 call l4888 ld de,l0001 call c,l1357 ld b,d ld c,e jp l4856 ; ; Token 0xe1 : ?? ; l205b: call l20bb ld e,a ld a,(hl) cp '(' jr nz,l207e call l4869 call l137f call l4856 push hl ex de,hl call l1db6 ccf sbc a,a or b jr nz,l207a ld a,c cp 2 l207a: jp nz,l0eaa pop hl l207e: push hl ld hl,l0080 push hl ld b,2 ld a,(l7317) or a jr z,l209a cp 0ah jr c,l2095 ld (hl),'1' inc b inc hl sub 0ah l2095: add a,'0' ld (hl),a inc b inc hl l209a: ld a,e add a,'A' ld (hl),a inc hl ld (hl),':' pop hl call l6ae4 call l6fa2 ; Move up pop hl ret l20aa: push de ld e,a ld a,.seldsk jr l20b6 ; Select disk l20b0: ld a,0ffh l20b2: push de ld e,a ld a,.usrcod l20b6: call l20cf pop de ret l20bb: ld a,.curdsk jr l20cf l20bf: ld a,.setdma jr l20cf l20c3: push hl push af ld hl,l0024 add hl,de ld a,(hl) call l20b2 pop af pop hl l20cf: push bc push de push hl ld c,a call l0005 pop hl pop de pop bc cp 0ffh ret l20dc: call l2107 ret c l20e0: call l20f4 jr l20e8 l20e5: call l2107 l20e8: ret c jp l0eb0 l20ec: or a call nz,l20ff ld a,':' ccf ret nc l20f4: call l210b ld a,.make call l20c3 ld a,'C' ret l20ff: call l2107 ret nc l2103: ld a,.close jr l2111 l2107: ld a,.open jr l2111 l210b: ld a,.delete jr l2111 l210f: ld a,.rename l2111: call l20c3 ld a,'5' ret l2117: push de ld de,l0080 call l20bf pop de ld a,.srcfrs jr l2125 l2123: ld a,.srcnxt l2125: call l20c3 ret z add a,4 add a,a add a,a add a,a add a,a add a,a ld l,a ld h,0 inc hl ret l2135: ld a,'"' call l218d jr l2141 l213c: ld a,'"' call l2156 l2141: ret c push bc ld b,'C' cp 5 jr z,l2151 ld b,'9' xor 3 jr z,l2151 ld b,'=' l2151: ld a,b pop bc ret l2154: ld a,'!' l2156: push hl ld hl,l0021 add hl,de ld (hl),c inc hl ld (hl),b inc hl ld (hl),0 pop hl l2162: push af ex de,hl call l20bf ex de,hl pop af call l20c3 or a ret nz scf ret l2170: ld a,'!' call l218d ret c cp 1 jr z,l2181 cp 4 ld a,'9' jp nz,l0eb0 l2181: push hl ld a,80h l2184: ld (hl),0 inc hl dec a jr nz,l2184 pop hl or a ret l218d: call l2162 push af push hl ld hl,l0021 add hl,de inc (hl) jr nz,l219f inc hl inc (hl) jr nz,l219f inc hl inc (hl) l219f: pop hl pop af ret l21a2: call l20b0 ld (l7317),a call l22ae ld hl,(l0006) dec hl jp l2226 l21b2: ret nz call l18d1 l21b6: rst 0 l21b7: ld de,l0080 push de ld hl,l0081 ld a,(de) call l6fa2 ; Move up xor a ld (de),a pop hl ret ; ; Statement : VERSION (expr) ; l21c6: call l6df6 ; Get integer ld a,h or a jr nz,l21db inc l dec l jr z,l21ef dec l jr z,l21ea dec l jr z,l21e5 dec l jr z,l21e5 dec l l21db: jp nz,l0eaa ld c,.vers call BDOS ; Get CP/M version jr l21f2 l21e5: ld hl,l0001 jr l21f2 l21ea: ld hl,l0000 jr l21f2 l21ef: ld hl,l0008 l21f2: jp l6e92 l21f5: jr z,l2211 call l137f push hl ld a,b or a jr z,l2223 ld a,(de) call l6f48 ; Convert to upper case sub 'A' jr c,l2223 cp 10h jr nc,l2223 ld b,a call l18e7 jr l2215 l2211: push hl call l18d1 l2215: call l20bb push af ld a,.resdsk call l20cf ; Reset disk system pop af pop hl jp l20aa l2223: jp l0eaa l2226: push hl ld hl,l7326 ld (l7318),hl ld hl,l7329 ld (l731a),hl pop hl l2234: push hl ld hl,l7323 ld (l731c),hl ld hl,l22a4 ld (l731e),hl pop hl ret l2243: ld de,l7326 call l2271 ex de,hl ld (l7318),hl ex de,hl ret l224f: ld de,l7329 call l2271 ex de,hl ld (l731a),hl ex de,hl ret l225b: call l2271 jr c,l2234 push de call l485a call l1366 ex de,hl ld (l731c),hl pop hl ld (l731e),hl ex de,hl ret l2271: call l4884 ret c call l485e call l1366 or a ret l227d: push hl ld hl,(l731a) jr l228d l2283: push hl ld hl,(l7318) jr l228d l2289: push hl ld hl,(l731c) l228d: push bc push de call l6fb4 ; Execute ^HL scf pop de pop bc pop hl ret l2297: push bc push de push hl ld hl,(l731e) call l6fb4 ; Execute ^HL pop hl pop de pop bc ret l22a4: call l7320 or a ret z call l7323 scf ret l22ae: ld hl,(l0001) inc hl inc hl inc hl ld de,l7320 ld a,0ch jp l6fa2 ; Move up l22bc: call l22c4 ret c ret nz ld a,69h ret l22c4: push de ld hl,(l7476) ex de,hl ld hl,l0057 add hl,de ld a,(hl) and 2 jr z,l22f7 ld hl,l0028 add hl,de ld c,(hl) inc hl ld b,(hl) dec bc ld hl,(l7489) call l6f85 ; HL:BC jr nz,l22f7 ld (l7330),hl ld hl,l008d add hl,de ld de,l748b call l299a jr nz,l22f7 call l263b scf jr l22fa l22f7: call l24b3 l22fa: pop de l22fb: ld a,0 ret c ld a,69h ret nz ld a,67h ret l2304: push de push af call l25fa call l25e1 ex de,hl ld hl,(l7330) ex de,hl call l2335 call l2628 ld a,2 call l2320 pop af pop de ret l231f: xor a l2320: ld hl,(l7476) ld de,l0057 add hl,de ld d,a ld a,(hl) and 0fdh or d ld (hl),a ret l232e: ld hl,(l7489) ex de,hl ld hl,l748b l2335: push hl ld hl,(l7476) ld bc,l0028 add hl,bc ld a,d or e jr z,l2342 inc de l2342: ld (hl),e inc hl ld (hl),d pop de ret z ld bc,l0064 add hl,bc ex de,hl jp l29db ; ; Function : VARPTR (var) ; VARPTR (#file_number) ; l234f: call l2eef call l2396 ret nc call l3066 jr c,l2371 l235b: cp 'C' jr z,l2364 cp '=' jp nz,l1b03 l2364: jp l0eb0 ; ; Function : USR[digit] (expr) ; l2367: call l2f0c call l2396 ret nc call l30c7 l2371: call l28c1 jr nc,l235b call l232e ld bc,l2395 call l258c call l25d6 push hl ld de,l7453 ld hl,l748b call l29db pop de ld hl,(l7489) call l26a8 xor a ret l2395: ret l2396: ld a,(l748b) call l2e77 ld hl,l7483 and (hl) jr z,l23ad push de call l249e pop de ccf ld a,74h jp nc,l2304 l23ad: call l2e0c scf ret ; ; Function : HIMEM ; l23b2: call l2f0c call l22bc ret nc call l2e0c call l2457 push af call l30b0 l23c3: call l24b3 call l2606 call l25d9 push hl ld hl,l7488 ld a,(l747a) sub (hl) jr nz,l23dc pop hl call l269c pop af ret l23dc: ld hl,l732c ld b,(hl) l23e0: push af ld a,b call l25d9 call l2b4e ld b,1 l23ea: ld c,b ld a,b call l2609 ld b,a call l261e jr c,l23ea pop af dec a jr nz,l23e0 push hl push de ld a,c call l29ce ld de,l748b call l29d8 pop de ld a,c call l25d9 ld (l7489),hl push hl ld a,b call l25f4 pop de ld (hl),e inc hl ld (hl),d pop hl call l2b72 call l25fa call l25d6 pop de call l2697 jr l23c3 ; ; Function : <> ; l2426: call l2edc call l249e jr c,l2439 ld a,67h jr z,l243a call l29c2 ld a,66h jr nz,l243a l2439: xor a l243a: jr l249b ; ; Function : = ; l243c: call l2eef call l249e call l22fb jr l249b ; ; Function : <= ; l2447: call l2f0c call l22c4 jr l249b ; ; Function : >= ; l244f: call l2f0c call l22bc jr nc,l249b l2457: call l24d1 jr l2467 ; ; Function : < ; l245c: call l2f0c call l22bc jr nc,l249b call l2520 l2467: ld a,67h jr nc,l247a call l29c2 ld a,66h jr nz,l247a call l298a ld a,65h jr nz,l247a xor a l247a: jr l249b ; ; Function : + ; l247c: call l2f0c call l22bc jr nc,l249b l2484: call l24d1 jr c,l248d ld a,67h jr z,l249b l248d: call l29c2 ld a,66h jr nz,l249b call l298a ld a,65h jr z,l2484 l249b: jp l2304 l249e: ld bc,l24af call l258c call l250f ret nc call l298a scf ret z ccf ret l24af: ret c ret nz scf ret l24b3: call l249e ret nc l24b7: push de ld hl,(l7330) ex de,hl ld hl,(l7489) call l6f7f ; HL:DE pop de scf ret z call l24d1 ret nc call l298a jr z,l24b7 or 0ffh ret l24d1: call l231f call l25fa ld a,(l732c) ld b,a call l261e ret nc call l2606 ld (l732c),a ld hl,l732d ld (hl),b call l25d9 l24ec: push hl ld hl,l747a ld a,(l7488) cp (hl) jr z,l250b call l2628 pop hl call l2600 ld a,1 ld (l732c),a call l25d9 xor a ld (l732d),a jr l24ec l250b: pop hl ld (l7330),hl l250f: call l261b ret c ld a,(l7488) or a ret z call l263b call l25fa jr l250f l2520: call l231f ld hl,l0000 ld (l7330),hl call l25fa l252c: ld hl,l747a ld a,(l7488) cp (hl) jr z,l2548 call l25d6 push hl call l2628 pop hl call l2600 ld a,(de) sub 2 ld (l732c),a jr l252c l2548: ld a,(l732c) cp 1 jr nz,l2559 ld a,(l7488) or a ret z call l263b jr l2548 l2559: ld c,a call l25fa ld a,1 l255f: ld b,a call l2609 cp c jr c,l255f ld a,b ld (l732c),a ld a,(l747a) ld hl,l7488 sub (hl) ld b,a inc b call l25d6 jr l2581 l2578: call l2b4e ld a,(de) sub 2 call l25d9 l2581: dec b jr nz,l2578 ld (l7330),hl call l25fa scf ret l258c: call l231f ld hl,(l7478) ld (l7330),hl xor a ld (l7488),a ld a,(l747a) push af jr l25a3 l259f: push af call l2628 l25a3: ld hl,(l7330) call l2600 ld hl,l0001 ld (l732c),hl l25af: call l261b jr nc,l25ca call l298a call l6fb5 ; Execute ^BC jr c,l25ca ld a,(l732c) ld (l732d),a call l2609 ld (l732c),a jr l25af l25ca: call l25d6 ld (l7330),hl pop af dec a jp p,l259f ret l25d6: ld a,(l732c) l25d9: call l25f4 ld a,(hl) inc hl ld h,(hl) ld l,a ret l25e1: ld a,(l732c) l25e4: call l25f4 inc hl inc hl ld a,(hl) and 1fh inc a ld c,a ld b,0 ret l25f1: ld a,(l732c) l25f4: add a,e ld l,a adc a,d sub l ld h,a ret l25fa: ld hl,(l732e) jp l2b4e l2600: ld (l732e),hl jp l2b4e l2606: ld a,(l732c) l2609: push hl push bc ld b,a ld l,b ld h,0 add hl,de inc hl inc hl ld a,(hl) and 1fh add a,b add a,3 pop bc pop hl ret l261b: ld a,(l732c) l261e: push bc ld b,a ld a,(de) dec a dec a cp b pop bc ret z scf ret l2628: ld hl,l7488 ld a,(hl) cp 9 jr nc,l2637 inc (hl) call l2648 ex de,hl jr l2643 l2637: call l0eae ; Internal error db 51 l263b: ld hl,l7488 dec (hl) ld a,(hl) call l2648 l2643: ld a,4 jp l29df l2648: ld hl,(l7476) ld de,l0069 add hl,de add a,a add a,a ld e,a add hl,de ld de,l732c ret l2657: push de ex de,hl ld hl,(l7473) ex de,hl call l29df ex de,hl ld (l7473),hl pop de ret l2666: ld b,h ld c,l call l25fa ld hl,l7333 ld (l7473),hl ld h,d ld l,e inc hl ld a,(l732c) dec a call l2657 jr l268c l267d: push de call l2666 ld hl,l7453 ld a,(hl) and 1fh inc a call l2657 pop bc l268c: ld hl,(l7473) ld (hl),c inc hl ld (hl),b inc hl ld (l7473),hl ret l2697: call l267d jr l269f l269c: call l2666 l269f: call l2606 ld b,a call l25f4 jr l26b2 l26a8: call l267d call l25f1 ld a,(l732c) ld b,a l26b2: ld a,(de) sub b sub 2 inc hl inc hl call l2657 ld hl,(l7473) ld bc,l8cce add hl,bc ld (l7451),hl ld a,l cp 81h jr nc,l26d8 cp 'A' jr nc,l2704 cp 3 jr z,l26d8 ld a,(l7488) or a jr z,l2704 l26d8: ld a,(l7488) or a jp nz,l273d ld a,(l7451) cp 81h jr nc,l2709 cp 3 jp c,l273d ld hl,l747a ld a,(hl) or a jr z,l26ff dec (hl) ld hl,(l7333) ld (l7478),hl ld hl,(l732e) jp l295c l26ff: ld hl,(l7478) jr l2733 l2704: ld hl,(l732e) jr l2733 l2709: ld hl,l747a inc (hl) call l293f ex de,hl ld hl,(l7478) call l2885 push de ld (l7333),hl ld de,l7335 call l29d8 ex de,hl pop de ld (hl),e inc hl ld (hl),d ld de,l8ccf add hl,de ld (l7451),hl call l293f ld (l7478),hl l2733: ld a,(l7451) ld de,l7332 ld (de),a jp l2b5e l273d: ld hl,(l732e) push hl call l263b call l2836 jr c,l2763 call l283c jr c,l2768 call l27ec jr c,l277d call l280b jr c,l2783 call l293f ex de,hl pop hl call l2885 jp l26a8 l2763: call l2793 jr l276b l2768: call l27c1 l276b: call l2733 ex (sp),hl call l2b4e call l295c pop hl ld a,b ld (l732c),a jp l269c l277d: call l2793 pop de jr l2788 l2783: call l27c1 ex de,hl pop hl l2788: push bc call l2885 pop af ld (l732c),a jp l2697 l2793: push hl push bc push de push bc push hl ld bc,l7331 ex de,hl add hl,bc ex de,hl ld hl,(l7451) push hl add hl,bc pop bc dec bc call l6fb1 ; Move down pop hl call l2b4e ex de,hl ld c,(hl) dec c inc hl ld de,l7333 call l6fa8 ; Move up pop bc push de call l25fa ld a,b call l25e4 jr l27e1 l27c1: push hl push bc push de push hl ld hl,(l7451) ld de,l7332 add hl,de push hl call l25fa ld a,b call l25e4 pop de call l6fa8 ; Move up pop hl push de call l2b4e ex de,hl ld c,(hl) dec c inc hl l27e1: pop de call l6fa8 ; Move up pop hl ld (l7451),hl pop bc pop hl ret l27ec: call l284a ret nc ld a,(l7451) cp 81h ret c push de push bc sub 7fh ld b,a ld a,1 ld de,l7332 l2800: ld c,a call l2609 cp b jr c,l2800 ld a,c inc a jr l2828 l280b: call l2859 ret nc ld a,(l7451) cp 81h ret c push de push bc ld a,1 ld de,l7332 l281c: call l2609 cp 7fh jr c,l281c ld b,a ld a,(l7451) sub b l2828: pop bc push bc ld b,a call l2b4e ld a,(de) add a,c add a,b cp 81h pop bc pop de ret l2836: call l284a ret nc jr l2840 l283c: call l2859 ret nc l2840: push hl ld hl,l0080 call l6f7f ; HL:DE pop hl ccf ret l284a: ld a,(l732c) cp 1 ret z call l25fa ld a,(l732d) ld b,a jr l2867 l2859: call l25fa call l261b ret nc ld a,(l732c) ld b,a call l2609 l2867: call l25d9 ld a,b push af push hl call l25e4 pop hl call l2b4e push hl push bc ld hl,(l7451) add hl,bc ld a,(de) ld c,a add hl,bc dec hl ex de,hl pop bc pop hl pop af ld b,a scf ret l2885: push hl push de push hl ld hl,(l7451) ld a,h rra ld a,l rra ld c,a pop hl ld a,1 ld de,l7332 l2896: ld b,a call l2609 cp c jr c,l2896 ld c,a ld a,b add a,2 ld (de),a push de call l2b5e pop de ld a,b push de call l29ce pop de ld a,(l7451) sub c inc a ld b,a ld a,c call l25f4 dec hl ld (hl),b pop de ex de,hl call l2b5e ex de,hl pop hl ret l28c1: ld hl,(l7486) ex de,hl ld hl,(l747d) call l6f7f ; HL:DE jr nz,l28e5 ld hl,(l7484) ld a,h or l ex de,hl jr z,l28e5 call l2b4e inc de ld b,7eh l28db: inc de ld a,(de) or a jr nz,l28e5 dec b jr nz,l28db jr l2904 l28e5: ld (l7486),hl ex de,hl ld hl,l0000 ld (l7484),hl ex de,hl l28f0: ld a,h or l jr z,l2904 call l2b4e call l297a ex de,hl ld e,(hl) inc hl ld d,(hl) ex de,hl call l2970 jr l28f0 l2904: ld hl,(l7484) ex de,hl ld hl,(l747a) ld h,0 inc hl call l6f96 ; BC:=HL-DE ret c inc c ld hl,(l747b) l2916: inc hl ld a,h or l ld a,'=' ret z push bc push hl ld b,h ld c,l ld hl,(l7476) ex de,hl call l2c33 ld hl,l0080 call l213c ex de,hl pop hl pop bc ret nc call l2b5e call l295c ld (l747b),hl dec c jr nz,l2916 scf ret l293f: ld hl,(l747d) push hl push de call l2b4e ex de,hl ld a,(hl) inc hl ld h,(hl) ld l,a ld (l747d),hl ld (l7486),hl ld hl,(l7484) dec hl ld (l7484),hl pop de pop hl ret l295c: push hl ld hl,(l747d) ld a,l ld (de),a inc de ld a,h ld (de),a dec de pop hl call l297a ld (l747d),hl ld (l7486),hl l2970: push hl ld hl,(l7484) inc hl ld (l7484),hl pop hl ret l297a: push de push bc inc de ld b,7eh xor a l2980: inc de ld (de),a dec b jr nz,l2980 pop bc pop de jp l2b72 l298a: push de push bc call l25f1 inc hl inc hl ld de,l748b call l299a pop bc pop de ret l299a: ld a,(hl) and 0e0h ld b,a ld a,(de) and 0e0h cp b ret nz ld a,(hl) and 1fh ld b,a ld a,(de) and 1fh ld c,a push bc cp b jr nc,l29b0 ld b,a l29b0: inc b jr l29b9 l29b3: inc de inc hl ld a,(de) cp (hl) jr nz,l29c0 l29b9: dec b jr nz,l29b3 pop bc ld a,c cp b ret l29c0: pop bc ret l29c2: call l25f1 inc hl inc hl ld a,(l748b) xor (hl) and 0e0h ret l29ce: push bc call l25e4 ld de,l7453 ld a,c jr l29e0 l29d8: ld hl,l7453 l29db: ld a,(hl) and 1fh inc a l29df: push bc l29e0: call l6fa2 ; Move up pop bc ret l29e5: push af call l2ad3 pop af ld e,a ld d,0 ld hl,l0086 jp l4783 l29f3: ld hl,(l75c1) ld h,0 ld b,l add hl,hl ld d,h ld e,l add hl,hl add hl,de ex de,hl ld hl,(l75bf) ex de,hl add hl,de ex de,hl inc b jr l2a1b l2a08: ld (hl),0 inc hl ld (hl),7fh inc hl inc hl inc hl ld (hl),e inc hl ld (hl),d inc hl ld a,e add a,80h ld e,a jr nc,l2a1b inc d l2a1b: dec b jr nz,l2a08 ret l2a1f: ld hl,(l75bf) ld de,l0006 ld a,(l75c1) ld b,a or a ret l2a2b: call l2a1f ret nz call l0eae ; Memory full db 7 l2a33: call l2a4f ret nc ld (hl),'>' inc hl inc hl inc hl inc hl ld a,(hl) inc hl ld h,(hl) ld l,a ret l2a42: push hl call l2a4f ld (hl),'>' inc hl ld a,(hl) or 80h ld (hl),a pop hl ret l2a4f: push bc ld a,(l7475) ld c,a push de call l2a2b pop de l2a59: push hl inc hl ld a,(hl) and 7fh cp c jr nz,l2a69 inc hl ld a,(hl) cp e jr nz,l2a69 inc hl ld a,(hl) cp d l2a69: pop hl scf jr z,l2a77 push de ld de,l0006 add hl,de pop de dec b jr nz,l2a59 or a l2a77: pop bc ret l2a79: push bc push de call l2a2b ld c,(hl) push hl l2a80: ld a,(hl) cp c jr nc,l2a88 pop af ld a,(hl) push hl ld c,a l2a88: or a jr z,l2a8c dec (hl) l2a8c: add hl,de dec b jr nz,l2a80 pop hl inc hl ld a,(hl) dec hl rla call c,l2ae3 pop de ld (hl),'@' inc hl ld a,(l7475) ld (hl),a inc hl ld (hl),e inc hl ld (hl),d inc hl ld a,(hl) inc hl ld h,(hl) ld l,a pop bc ret l2aab: call l2a1f ret z l2aaf: inc hl ld a,c or 80h cp (hl) dec hl call z,l2ae3 add hl,de dec b jr nz,l2aaf l2abc: call l2a1f ret z l2ac0: inc hl ld a,(hl) and 7fh cp c dec hl jr nz,l2ace ld (hl),0 inc hl ld (hl),7fh dec hl l2ace: add hl,de dec b jr nz,l2ac0 ret l2ad3: call l2a1f ret z l2ad7: inc hl ld a,(hl) dec hl or a call m,l2ae3 add hl,de dec b jr nz,l2ad7 ret l2ae3: push bc push de push hl inc hl ld a,(hl) or 80h ld c,a inc hl ld e,(hl) inc hl ld d,(hl) l2aef: push de call l2a2b pop de push hl ld a,e or 7fh ld e,a l2af9: push hl inc hl ld a,(hl) cp c jr nz,l2b16 inc hl ld a,(hl) xor e and 80h jr nz,l2b16 inc hl ld a,(hl) xor d jr nz,l2b16 dec hl ld a,e cp (hl) jr c,l2b16 ld e,(hl) pop hl ex (sp),hl pop hl push hl push hl l2b16: pop hl push de ld de,l0006 add hl,de pop de dec b jr nz,l2af9 pop hl inc hl ld a,(hl) dec hl xor c call z,l2b2e jr z,l2aef pop hl pop de pop bc ret l2b2e: push af push bc push de push hl inc hl ld a,(hl) and 7fh ld c,a inc hl ld e,(hl) inc hl ld d,(hl) inc hl ld a,(hl) inc hl ld h,(hl) ld l,a call l2e94 pop hl inc hl ld a,(hl) and 7fh ld (hl),a dec hl pop de pop bc pop af ret l2b4e: push bc ex de,hl call l2a33 jr c,l2b5b call l2a79 call l2e85 l2b5b: ex de,hl pop bc ret l2b5e: push bc ex de,hl push hl call l2a33 call nc,l2a79 ex de,hl ex (sp),hl push de ld a,80h call l6fa2 ; Move up pop de pop hl pop bc l2b72: ex de,hl call l2a42 ex de,hl ret l2b78: ld a,(hl) cp 0ach ld a,0ffh jr nz,l2b83 call l4869 xor a l2b83: ld (l74ab),a call l1959 jp nz,l2c2b call l485a call l17c1 dec de call l485a push de call l2c33 ld bc,lffff call l1d53 jp nz,l2c2f call l2fbd call l4888 ld de,l0080 jr nc,l2bb4 ld a,',' cp (hl) call nz,l1357 l2bb4: push hl ld hl,(l722c) call l6f7f ; HL:DE jp c,l0eaa ld a,e dec a or d jp z,l0eaa pop hl push de call l4888 ld a,0 jr nc,l2bd7 call l137f ld a,b cp 'A' jr c,l2bd7 ld a,'@' l2bd7: pop bc ex (sp),hl push af push de push bc ex de,hl inc de ld a,(l74ab) ld b,a call l20ec dec de jp nc,l0eb0 push de call l2c33 ld a,b call l20ec pop de jr nc,l2c1f push de call l2d98 pop de call l2ea1 pop bc pop hl pop af push de call l2d73 pop de call l2cf7 call l2eab ld (hl),3 ld b,7fh l2c0e: inc hl ld (hl),0 dec b jr nz,l2c0e ld bc,l0001 call l2eae ld a,4 ld (de),a pop hl ret l2c1f: push af inc de call l2103 call l210b pop af jp l0eb0 l2c2b: call l0eae ; File already open db 55 l2c2f: call l0eae ; File name invalid db 64 l2c33: push hl ld hl,l0032 add hl,de ex de,hl pop hl ret l2c3b: dec de call l485a push de call l2c33 call l1d53 jp nz,l2c2f call l2fbd pop de call l2c8f call l4888 ret nc ld a,',' cp (hl) jr z,l2c69 push de push bc call l3f03 ex (sp),hl call l6e92 ex de,hl ld a,b call l3eb8 pop hl pop de l2c69: call l4888 ret nc push de call l3f03 ex (sp),hl push hl push de push bc ex de,hl call l2ec4 ld a,(l0097) ld b,a call l6ae4 ld hl,l0098 ld a,b call l6fa2 ; Move up pop af pop hl call l3eb8 pop de pop hl ret l2c8f: push hl ld hl,l000d add hl,de ld (hl),0 inc hl inc hl ld (hl),0 ld hl,l003e add hl,de ld (hl),0 inc hl inc hl ld (hl),0 push de call l2c33 call l2107 pop de jr z,l2cf4 inc de call l2107 dec de jr z,l2cee call l2eba push de call l2dae ex de,hl ex (sp),hl ex de,hl call l2ec4 ex de,hl ex (sp),hl push hl call l2db8 pop hl call l6f7f ; HL:DE pop de ld a,73h jr nz,l2ce8 call l2cf7 ld hl,(l0095) ld b,h ld c,l ld hl,(l722c) call l6f85 ; HL:BC ld a,'2' jr c,l2ce8 ld a,4 ld (de),a pop hl ret l2ce8: push af call l2d63 jr l2cf3 l2cee: push af inc de call l2103 l2cf3: pop af l2cf4: jp l0eb0 l2cf7: ld hl,(l0095) ld b,h ld c,l ld hl,l0026 add hl,de ld (hl),c inc hl ld (hl),b scf l2d04: sbc a,a push de ld hl,l0063 add hl,de ld de,l00d8 jr z,l2d10 ex de,hl l2d10: ld a,(hl) ld (de),a pop de push de ld hl,l0058 add hl,de ld de,l008a jr z,l2d1e ex de,hl l2d1e: ld a,0bh push af call l6fa2 ; Move up pop af pop de push de ld hl,l0064 add hl,de ld de,l00e4 jr z,l2d31 ex de,hl l2d31: ld a,4 call l6fa2 ; Move up pop de ret l2d38: push de call l2aab pop de call l2e05 ret nc call l2ec4 or a call l2d04 jp l2eab l2d4b: push de call l2abc pop de jr l2d63 l2d52: push hl push bc call l2d38 call l2e21 jr l2d61 l2d5c: push hl push bc call l2d38 l2d61: pop bc pop hl l2d63: inc de call l2103 dec de push de call l2c33 call l2103 pop de xor a ld (de),a ret l2d73: push af push hl push bc ld de,l2de3 ld a,0fh call l2d9d pop hl ld (l0095),hl ex de,hl ld hl,l007f call l47af ld (l0091),hl pop hl pop af or a ret z ld de,l0097 ld (de),a inc de jp l6fa2 ; Move up l2d98: ld de,l2ddb ld a,8 l2d9d: ld hl,l0080 push hl ld b,80h l2da3: ld (hl),0 inc hl dec b jr nz,l2da3 pop hl ex de,hl jp l6fa2 ; Move up l2dae: ld hl,l2ddb ld b,6 call l2dca jr l2dc5 l2db8: ld hl,l2de3 ld b,7 call l2dca ld a,(de) cp (hl) jr c,l2dd7 inc de l2dc5: ex de,hl ld e,(hl) inc hl ld d,(hl) ret l2dca: ld de,l0080 l2dcd: ld a,(de) cp (hl) jr nz,l2dd7 inc de inc hl dec b jr nz,l2dcd ret l2dd7: call l0eae ; Not a keyed file db 113 l2ddb: db 'MIOPEN' db 1,0 l2de3: db 'Jetsam0' db 0,1 db 0,1,0,0,1,0 ; ; Statement : TO ; l2df2: call l2f96 push hl call l2e05 jr nc,l2e01 call l2d52 call l2c8f l2e01: pop hl jp l6e78 l2e05: ld hl,l0057 add hl,de ld a,(hl) rra ret l2e0c: call l2e05 ret c inc (hl) call l2ec4 ld hl,(l0088) inc hl inc hl ld (l0088),hl call l2eab jr l2e26 l2e21: call l2e05 ret nc dec (hl) l2e26: call l2eba ld hl,(l0086) inc hl ld (l0086),hl jp l2ea1 ; ; Function : > ; l2e33: call l2fba call l485a call l2ff5 call l4856 jp l6e78 ; ; Function : USING ; l2e42: call l2fe2 push de call l485a call l2fc8 call l2e77 push af call l485a call l1341 cp 2 jp nc,l0eaa ld b,a call l4856 pop af pop de push hl ld hl,l0063 add hl,de dec b jr z,l2e6e cpl and (hl) ld (hl),a jr l2e70 l2e6e: or (hl) ld (hl),a l2e70: call l2e0c pop hl jp l6e78 l2e77: and 0e0h rlca rlca rlca ld b,a ld a,1 ret z l2e80: rlca dec b jr nz,l2e80 ret l2e85: push de push bc ld b,d ld c,e ex de,hl ld hl,(l7476) ex de,hl call l2eca pop bc pop de ret l2e94: push de push bc push de call l1963 pop bc call l2eb1 pop bc pop de ret l2ea1: ld bc,l0000 l2ea4: ld hl,l0080 push de inc de jr l2eb5 l2eab: ld bc,l0000 l2eae: ld hl,l0080 l2eb1: push de call l2c33 l2eb5: call l213c jr l2ed3 l2eba: ld bc,l0000 l2ebd: ld hl,l0080 push de inc de jr l2ece l2ec4: ld bc,l0000 ld hl,l0080 l2eca: push de call l2c33 l2ece: call l2154 ld a,'D' l2ed3: pop de ret c ex de,hl ld (hl),4 ex de,hl jp l1b03 l2edc: call l2ee1 jr l2ef2 l2ee1: call l2fba push bc push de call l485a call l2fc8 jp l2f76 l2eef: call l2ef8 l2ef2: ex (sp),hl ld bc,l2fa5 push bc jp (hl) l2ef8: call l2fba push bc push de call l485a call l2fc8 push af call l485a call l2fd3 jr l2f64 l2f0c: call l2f20 push hl ld hl,(l7489) inc hl ld a,h or l pop hl jr nz,l2ef2 pop af ld a,73h push hl jp l2fa5 l2f20: call l2fba push bc push de call l4888 jr c,l2f48 push hl ld hl,l0028 add hl,de ld a,(hl) inc hl ld h,(hl) ld l,a dec hl ld (l7489),hl ld hl,l008d add hl,de ld de,l748b ld a,(hl) and 1fh inc a call l6fa2 ; Move up pop hl jr l2f79 l2f48: call l2fc8 push af push de call l485a call l2fd3 ex de,hl ex (sp),hl ex de,hl call l485a call l2ff5 push hl ld h,b ld l,c ld (l7489),hl pop hl pop de l2f64: push hl ex de,hl call l6b15 ex de,hl ld de,l748c push bc ld a,b call l6fa2 ; Move up pop bc pop hl pop af or b l2f76: ld (l748b),a l2f79: pop de pop bc push hl ld a,c ld (l7475),a push de ex de,hl ld (l7476),hl ld de,l0058 add hl,de ld de,l7478 ld a,11h call l6fa2 ; Move up pop de pop hl jp l4856 l2f96: call l2fe2 ld a,c ld (l7475),a ex de,hl ld (l7476),hl ex de,hl jp l4856 l2fa5: call l6e8f ld hl,(l7476) ld de,l0058 add hl,de ex de,hl ld hl,l7478 ld a,11h call l6fa2 ; Move up pop hl ret l2fba: call l2fe2 l2fbd: call l485a call l1341 cp 3 ret c jr l2fdf l2fc8: call l1341 cp 8 jr nc,l2fdf rrca rrca rrca ret l2fd3: call l1385 ex de,hl ld hl,(l7602) ex de,hl ld a,(de) cp ' ' ret c l2fdf: jp l0eaa l2fe2: call l4852 call l1959 jr z,l2ff1 cp 4 ret z call l0eae ; File type error db 54 l2ff1: call l0eae ; File number error db 52 l2ff5: push de call l1371 ld a,d or e jp z,l0eaa ld b,d ld c,e dec bc pop de l3002: push hl push de ld hl,l005f add hl,de ld a,(hl) inc hl ld h,(hl) ld l,a call l6f85 ; HL:BC jr c,l3026 ld hl,l0026 add hl,de ld e,(hl) inc hl ld d,(hl) ld hl,l007f call l47af call l6f85 ; HL:BC jr nc,l3026 pop de pop hl ret l3026: call l0eae ; Record number error db 63 ; ; Token 0xe9 : ?? ; l302a: call l2f96 push hl ld hl,l008d add hl,de ld a,(hl) and 0e0h rlca rlca rlca call l6e8f pop hl ret ; ; Token 0xea : ??? ; l303d: call l2f96 push hl ld hl,l0028 add hl,de ld a,(hl) inc hl ld h,(hl) ld l,a call l6dd0 pop hl ret ; ; Function : OSERR ; l304e: call l2f96 push hl ld hl,l008d add hl,de ld a,(hl) inc hl push hl and 1fh ld b,a call l6ae4 pop hl ld a,b call l6fa2 ; Move up pop hl ret l3066: ld hl,(l7481) ld a,h or l jr z,l307c ld b,h ld c,l call l3002 push hl call l30f7 ld (l7481),hl pop hl jr l3099 l307c: ld hl,(l747f) inc hl inc hl ld a,l or h ld a,'?' dec hl push hl call nz,l3099 pop hl ret nc ld (l747f),hl ex de,hl ld bc,l005f add hl,bc ld (hl),e inc hl ld (hl),d scf ret l3099: push hl ld hl,l0030 add hl,de ld a,(hl) inc hl ld h,(hl) ld l,a ld (hl),1 inc hl ld (hl),0 pop hl ld (l7489),hl ld b,h ld c,l jp l1bdb l30b0: call l30f0 push af dec hl ld a,h or l jr nz,l30c4 ld hl,(l7481) push hl ld hl,(l7489) ld (l7481),hl pop hl l30c4: pop af jr l30cb l30c7: call l30f0 inc hl l30cb: cp 7fh jr z,l30dc push de ex de,hl add a,80h ld l,a ld h,0 ld (hl),e inc hl ld (hl),d pop de jr l30ed l30dc: push hl ld a,h ld (l0080),a call l2ea4 dec bc call l2ebd pop hl ld a,l ld (l00ff),a l30ed: jp l2ea4 l30f0: ld hl,(l7476) ex de,hl ld hl,(l7489) l30f7: push de ex de,hl ld bc,l0026 add hl,bc ld a,(hl) inc hl ld h,(hl) ld l,a call l4820 ld b,h ld c,l ld a,e pop de push af cp 7fh jr z,l3118 call l2ebd pop af push af add a,l ld l,a ld a,(hl) inc hl jr l3124 l3118: call l2ebd ld a,(l00ff) push af inc bc call l2ebd pop af l3124: ld h,(hl) ld l,a pop af ret l3128: ld a,b cp c jr c,l3165 jr z,l3156 push de ld a,b sub c dec a add a,e ld e,a adc a,d sub e ld d,a ld a,(de) ld b,a inc de call l3156 cp 1 pop de ret c ld a,b cp 80h ret c inc (hl) scf ret nz dec (hl) call l39cd call l39bf ld b,a call l39dc jp l39f1 l3156: push hl push de push bc ex de,hl ld b,0 ldir dec de ld a,(de) pop bc pop de pop hl scf ret l3165: push de ld a,b ld b,0 add hl,bc ld b,a add a,e ld e,a adc a,d sub e ld d,a push bc l3171: dec de dec hl ld a,(de) ld (hl),a dec b jp nz,l3171 pop bc ld a,c sub b l317c: dec hl ld (hl),0 dec a jp nz,l317c scf pop de ret l3186: push de push bc or 7fh ld b,a dec c dec c dec c xor a l318f: ld (de),a inc de dec c jr nz,l318f ld c,90h or h jr nz,l31a1 ld c,a ld h,l ld l,a or h jr z,l31ac ld c,88h l31a1: jp m,l31ab l31a4: add hl,hl dec c or h jp p,l31a4 ld a,h l31ab: and b l31ac: ex de,hl ld (hl),e inc hl ld (hl),a inc hl ld (hl),c pop bc pop hl ret l31b5: push de push bc call l39cd ld b,a call l39ad ld (hl),a ld d,0 call l342d call l39f1 pop bc pop de ret l31ca: push de push bc dec c ld b,0 add hl,bc ld a,90h sub (hl) jr c,l31ea dec hl push hl add a,8 ld b,a call l397e ex de,hl pop bc ld a,d add a,a jr nc,l31e4 inc hl l31e4: ld a,h or l jr z,l31ee ld a,(bc) or a l31ea: ccf pop bc pop de ret l31ee: ld a,d add a,a sbc a,a jr l31ea l31f3: push de call l38ef ld a,d pop de ret nc cp 80h ret c l31fd: push hl ld a,c l31ff: inc (hl) jr nz,l3208 inc hl dec a jr nz,l31ff inc (hl) inc c l3208: pop hl scf ret l320b: push de call l38ef jr nc,l3214 ld a,d or e scf l3214: pop de ret l3216: call l320b ret nc ret z ld a,b cp 80h ret c jr l31fd l3221: call l38cf ld b,a call m,l38e0 push hl push bc ex de,hl ld hl,l74b9 ld (hl),0 inc hl call l3156 inc c dec hl or a jr z,l328b push hl sub 80h ld e,a sbc a,a ld d,a ld l,e ld h,d add hl,hl add hl,hl add hl,hl add hl,de add hl,hl add hl,de add hl,hl add hl,hl add hl,de ld a,c cp 5 ld d,7 jr z,l3253 ld d,10h l3253: ld a,h sub d pop hl push af call nz,l32c0 l325a: ld a,c cp 5 ld de,l32a2 jr z,l3265 ld de,l32ac l3265: call l3898 jr nc,l3272 call l359d pop af dec a push af jr l325a l3272: ld a,c cp 5 ld de,l32a7 jr z,l327d ld de,l32b5 l327d: call l3898 jr c,l328a call l36ae pop af inc a push af jr l3272 l328a: pop af l328b: ld e,a call l31f3 ld a,c pop bc pop hl ld c,a push bc ld bc,l74b9 ld d,a l3298: ld a,(bc) ld (hl),a inc bc inc hl dec d jr nz,l3298 dec hl pop bc ret l32a2: db 00h,0f8h,23h,74h,94h l32a7: db 80h,7fh,96h,18h,98h l32ac: db 00h,0e0h,0ffh,9fh,31h,0a9h,5fh db 63h,0b2h l32b5: db 00h,0feh,0ffh,03h,0bfh,0c9h,1bh db 0eh,0b6h l32be: cpl inc a l32c0: or a scf ret z jp p,l32d4 cp 0dah jr nc,l32e0 add a,'&' call l32c0 ret nc ld a,0dah jr l32e0 l32d4: cp '''' jr c,l32e0 sub '&' call l32c0 ret nc ld a,'&' l32e0: ld de,l74c2 or a push af jp p,l32ea cpl inc a l32ea: call l3307 jr z,l3300 push hl ex de,hl l32f1: ld de,l74cb call l3307 push af call l35a0 pop af jr nz,l32f1 ex de,hl pop hl l3300: pop af jp p,l36b1 jp l35a0 l3307: push hl cp 0ch jr nc,l3320 ld b,4 ld hl,l3368 sub 8 jr nc,l3335 add a,a add a,a add a,l ld l,a ld a,0ffh adc a,h ld h,a xor a jr l3335 l3320: ld b,7 ld hl,l336c sub 10h jr c,l3333 ld hl,l337a sub 4 jr nc,l3335 ld hl,l3373 l3333: add a,4 l3335: push af ex de,hl call l3128 ex de,hl pop af pop hl ret l333e: ld a,'P' sub c ld e,a sbc a,a add a,'3' ld d,a ret db 00h,00h,00h,00h,00h,00h,00h db 20h,84h,00h,00h,48h,87h,00h db 00h,7ah,8ah,00h,40h,1ch,8eh db 00h,50h,43h,91h,00h,24h,74h db 94h,80h,96h,18h,98h l3368: db 20h,0bch,3eh,9bh l336c: db 00h,00h,10h,0a5h,0d4h,68h,0a8h l3373: db 00h,04h,0bfh,0c9h,1bh,0eh,0b6h l337a: db 62h,0ach,0c5h,0ebh,78h,2dh,0c3h l3381: ld b,1 jr l338b l3385: ld b,80h jr l338b l3389: ld b,0 l338b: ld a,c cp 4 ld a,b jp z,l3493 call l39cd ld b,a call l39bf jr z,l33cb xor b ld b,a ld hl,l74ac call l39b4 ex de,hl scf jr z,l33c8 rlca xor b ld b,a ld hl,(l74b7) ld a,(de) cp (hl) jr c,l33ba ld d,0 call nz,l391c ld e,0 jr l33c2 l33ba: ex de,hl ld a,(de) call l391c ld e,d ld d,0 l33c2: call l33d8 call c,l39d8 l33c8: jp l39f1 l33cb: ld hl,(l74b5) call l39b4 rlca xor b rrca ld b,a scf jr l33c8 l33d8: push bc ld hl,(l74b5) ld a,b rrca xor b jp m,l3405 ld a,d add a,e ld b,a ld de,l74ac l33e8: ld a,(de) adc a,(hl) ld (hl),a inc de inc hl dec c jp nz,l33e8 ld d,b pop bc ccf ret c call l39eb ret nc ld e,c l33fa: dec hl rr (hl) dec e jp nz,l33fa rr d scf ret l3405: ld a,d sub e ld b,a ld de,l74ac ex de,hl l340c: ld a,(de) sbc a,(hl) ld (de),a inc de inc hl dec c jp nz,l340c ex de,hl ld d,b pop bc jr nc,l342d ld a,b cpl ld b,a ld hl,(l74b5) ld e,c xor a sub d ld d,a l3424: ld a,0 sbc a,(hl) ld (hl),a inc hl dec e jp nz,l3424 l342d: ld e,(hl) dec hl ld a,(hl) add a,a ret c push bc ld b,(hl) ld hl,(l74b5) ld a,d jr l343e l343a: inc hl dec c jr z,l348e l343e: or (hl) jr z,l343a ld a,b or a jr nz,l3465 or d jr nz,l344d l3448: ld a,(hl) ld (hl),0 inc hl dec c l344d: push hl ld d,c l344f: ld b,a ld a,(hl) ld (hl),b inc hl dec d jp nz,l344f pop hl ld a,e add a,0f8h ld e,a jr nc,l348e ld a,b or a jr z,l3448 jp m,l347d l3465: dec c jr z,l3484 l3468: dec e jr z,l348e push hl ld b,c ld a,d add a,a ld d,a l3470: rl (hl) inc hl dec b jp nz,l3470 rl (hl) pop hl jp p,l3468 l347d: ld hl,(l74b7) ld (hl),e pop bc scf ret l3484: dec e jr z,l348e add a,a jp p,l3484 ld (hl),a jr l347d l348e: ld e,0 ld d,e jr l347d l3493: push hl inc hl inc hl or a ex de,hl ld a,(hl) inc hl ld c,(hl) inc hl ld b,(hl) inc hl ld l,(hl) ld h,a ex de,hl jr z,l34ae ld a,80h jp p,l34ac xor (hl) ld (hl),a jr l34af l34ac: xor b ld b,a l34ae: ld a,(hl) l34af: xor b push af inc hl xor a sub e jp z,l3537 add a,(hl) jr c,l34ce ld (hl),e ld e,a add a,(hl) dec hl ld a,b ld b,(hl) ld (hl),a dec hl ld a,c ld c,(hl) ld (hl),a dec hl ld a,d ld d,(hl) ld (hl),a jp z,l3537 xor a sub e l34ce: rl b rrc b ld e,0 cp 8 jr c,l34e7 cp 1ah jr nc,l3537 l34dc: sub 8 ld e,d ld d,c ld c,b ld b,0 cp 8 jr nc,l34dc l34e7: or a jr z,l34f5 l34ea: srl b rr c rr d rr e dec a jr nz,l34ea l34f5: pop af pop hl jp m,l3540 ld a,(hl) inc hl add a,d ld d,a ld a,(hl) inc hl adc a,c ld c,a ld a,(hl) rla scf rra adc a,b ld b,a ld a,e jr nc,l3517 rr b rr c rr d rra inc hl inc (hl) jr z,l353b dec hl l3517: add a,a jr nc,l352a inc d jp nz,l352a inc bc ld a,b or c jr nz,l352a ld b,80h inc hl inc (hl) jr z,l353b dec hl l352a: ld a,(hl) or 7fh and b ld (hl),a dec hl ld (hl),c dec hl ld (hl),d l3533: ld c,4 scf ret l3537: pop af pop hl jr l3533 l353b: ld c,3 jp l3a04 l3540: xor a sub e ld e,a ld a,(hl) inc hl sbc a,d ld d,a ld a,(hl) inc hl sbc a,c ld c,a ld a,(hl) rla scf rra sbc a,b ld b,a jr nc,l3565 ld a,(hl) cpl ld (hl),a xor a sub e ld e,a ld a,0 sbc a,d ld d,a ld a,0 sbc a,c ld c,a ld a,0 sbc a,b ld b,a l3565: ld a,e jp m,l3517 inc hl push hl ld a,(hl) ex de,hl jr nz,l3586 ld e,a ld a,c or h or l jr z,l3591 ld a,e l3576: add a,0f8h jr nc,l3599 ld b,c ld c,h ld h,l ld l,0 inc b dec b jr z,l3576 jp m,l3591 l3586: dec a jr z,l3599 add hl,hl rl c rl b jp p,l3586 l3591: ex de,hl pop hl ld (hl),a dec hl ld a,e jp l3517 l3599: xor a ld l,a jr l3591 l359d: call l333e l35a0: push de call l39cd call l381f ld a,(de) or a jr z,l35db dec a call l382a pop de jr nc,l35d8 jr z,l35d8 push bc call l35e0 pop bc ld hl,(l74b7) dec hl ld a,(hl) inc hl add a,a jr c,l35d3 dec (hl) jr z,l35dd ld hl,(l74b5) ld e,c ld a,d add a,a ld d,a l35cc: rl (hl) inc hl dec e jp nz,l35cc l35d3: ld a,(hl) or a call nz,l39d8 l35d8: jp l39f1 l35db: pop de ld (hl),a l35dd: scf jr l35d8 l35e0: ld a,c cp 3 jp z,l365c push de ex de,hl ld hl,(l74b5) ld b,c jr l35f1 l35ee: inc de inc hl dec b l35f1: ld a,(de) or a jr z,l35ee ld (l74d5),hl ex de,hl ld (l74d7),hl ld a,b ld (l74d4),a pop hl ld b,c xor a l3603: dec b jr nz,l3608 ld a,80h l3608: or (hl) inc hl jr z,l3603 inc b ld e,9 l360f: dec e rrca jr nc,l360f rlca l3614: push hl push bc rra ld d,a l3618: jr nc,l362f push de ld hl,(l74d5) ex de,hl ld hl,(l74d7) ld a,(l74d4) ld b,a or a l3627: ld a,(de) adc a,(hl) ld (de),a inc de inc hl djnz l3627 pop de l362f: ld hl,(l74b7) ld b,c l3633: dec hl rr (hl) djnz l3633 rr d dec e jp nz,l3618 pop bc l363f: pop hl dec b ret z ld e,8 ld a,1 cp b ccf rra or (hl) inc hl jr nz,l3614 push hl ld hl,(l74b7) ld e,c l3652: dec hl ld d,(hl) ld (hl),a ld a,d dec e jp nz,l3652 jr l363f l365c: ld a,(hl) ld (l3697),a inc hl ld a,(hl) ld (l369b),a ld hl,l0000 ld c,l call l3680 call l3680 ld a,(de) or 80h call l3689 ex de,hl ld hl,(l74b5) ld (hl),e inc hl ld (hl),d inc hl ld (hl),c ld d,b ret l3680: ld a,(de) inc de or a jr nz,l3689 ld l,h ld h,c ld c,a ret l3689: push de ld d,8 rra ld b,a ld a,(l74b3) ld e,a ld a,c l3693: jr nc,l36a0 ld c,a ld a,0 add a,l ld l,a ld a,0 adc a,h ld h,a ld a,c adc a,e l36a0: rra rr h rr l rr b dec d jp nz,l3693 ld c,a pop de ret l36ae: call l333e l36b1: push de call l39cd call l381f ld a,(de) or a jr z,l36da cpl inc a call l382a jr nc,l36d7 jr z,l36d7 ex de,hl dec hl ld a,(hl) pop hl push bc or 80h ld b,a call l36e0 pop bc call nz,l39dc l36d4: jp l39f1 l36d7: pop de jr l36d4 l36da: pop de call l3a04 xor a ret l36e0: ld a,c cp 3 jp z,l37b1 push bc jr l36ec l36e9: inc hl inc de dec c l36ec: ld a,(de) or (hl) jr z,l36e9 ld (l74d5),hl ex de,hl ld (l74d7),hl ld a,c ld (l74d4),a pop bc ld d,b call l378d ld hl,(l74b7) jr nc,l370f dec (hl) push hl ld e,1 call l3756 pop hl jr l3712 l370f: ld a,(hl) or a ret z l3712: push bc push hl ld hl,l74b3 ld e,8 call l372b pop hl dec hl ld (hl),c pop bc dec c jr nz,l3712 ccf call c,l378d ccf sbc a,a scf ret l372b: jr c,l3734 ld a,(hl) cp d call z,l3793 jr c,l3753 l3734: ld a,(l74d4) sub 1 jr z,l374f push de ld b,a ld hl,(l74d7) ex de,hl ld hl,(l74d5) l3744: ld a,(de) sbc a,(hl) ld (de),a inc de inc hl dec b jp nz,l3744 ex de,hl pop de l374f: ld a,(hl) sbc a,d ld (hl),a or a l3753: ccf rl c l3756: ld hl,(l74d7) ld a,(l74d4) ld b,a ld a,(hl) add a,a ld (hl),a jp nz,l3784 jr nc,l3784 dec b jr z,l3788 push hl ld hl,(l74d5) ld a,(hl) or a jr nz,l377e inc hl ld (l74d5),hl ld a,b ld (l74d4),a pop hl push hl inc hl ld (l74d7),hl l377e: pop hl scf l3780: inc hl ld a,(hl) adc a,a ld (hl),a l3784: dec b jp nz,l3780 l3788: dec e jp nz,l372b ret l378d: ld hl,l74b3 ld a,(hl) cp d ret nz l3793: ld a,(l74d4) sub 1 ret z push hl push de ld b,a ex de,hl ld hl,(l74d5) add a,l ld l,a adc a,h sub l ld h,a l37a5: dec de dec hl ld a,(de) cp (hl) jr nz,l37ae dec b jr nz,l37a5 l37ae: pop de pop hl ret l37b1: ld (l74d5),hl ld a,(hl) ld (l37f6),a inc hl ld a,(hl) ld (l37fa),a ex de,hl ld e,(hl) inc hl ld d,(hl) inc hl ld c,(hl) ld hl,(l74b7) ex de,hl call l380f ld a,(de) jr nc,l37d5 dec a ld (de),a add hl,hl ld a,c adc a,a ld c,a jr l37d7 l37d5: or a ret z l37d7: call l37e8 call l37e8 call l37e8 ccf call c,l380f ccf sbc a,a scf ret l37e8: push de ld e,8 l37eb: jr c,l37f4 ld a,c cp b call z,l3812 jr c,l3800 l37f4: ld a,l sub 0 ld l,a ld a,h sbc a,0 ld h,a ld a,c sbc a,b ld c,a or a l3800: ccf rl d add hl,hl rl c dec e jp nz,l37eb ld a,d pop de dec de ld (de),a ret l380f: ld a,c cp b ret nz l3812: push de ex de,hl ld hl,(l74d5) ld a,e sub (hl) inc hl ld a,d sbc a,(hl) ex de,hl pop de ret l381f: ex de,hl add hl,bc ex de,hl dec hl dec de ld a,(de) xor (hl) ld b,a inc de inc hl ret l382a: push de push bc ld b,a ld a,(hl) or a jr z,l3855 add a,b ld b,a rra xor b ld a,b jp p,l3851 sub 7fh ld (hl),a ld de,l74b4 ld a,80h l3841: dec de dec hl or (hl) ld (de),a xor a ld (hl),a dec c jp nz,l3841 ex de,hl inc a l384d: scf l384e: pop bc pop de ret l3851: or a jp m,l384e l3855: xor a ld (hl),a jr l384d l3859: push hl push bc call l39cd ld a,(hl) pop bc pop hl or a ret z sub 80h scf ret l3867: push hl push bc call l39cd add a,80h ld (hl),a pop bc pop hl ret l3872: push hl push bc call l39cd call l387d pop bc pop hl ret l387d: or a jp m,l3888 add a,(hl) ld (hl),a ccf ret c jp l3a04 l3888: add a,(hl) ld (hl),a ret c ld (hl),0 scf ret l388f: push bc call l39cd call l3a04 pop bc ret l3898: push hl ld b,0 dec c add hl,bc ex de,hl add hl,bc inc c ld a,(de) cp (hl) jr c,l38c6 jr nz,l38c2 or a jr z,l38c0 dec hl dec de ld a,(de) xor (hl) jp m,l38c3 ld b,c dec b or (hl) jp p,l38b7 ex de,hl l38b7: ld a,(de) sub (hl) jr nz,l38ca dec hl dec de dec b jr nz,l38b7 l38c0: pop hl ret l38c2: dec de l38c3: ld a,(de) jr l38c9 l38c6: dec hl ld a,(hl) cpl l38c9: add a,a l38ca: pop hl sbc a,a ret c inc a ret l38cf: push hl ld a,c dec a add a,l ld l,a adc a,h sub l ld h,a ld a,(hl) or a dec hl ld a,(hl) jr nz,l38c9 xor a pop hl ret l38e0: push hl ld a,c dec a dec a add a,l ld l,a adc a,h sub l ld h,a ld a,(hl) xor 80h ld (hl),a pop hl ret l38ef: push hl ld b,0 dec c add hl,bc call l39ad cp (hl) jr c,l3919 ld e,a call l39bf ld b,a jr nz,l390a ld d,a ld e,a l3903: dec hl ld (hl),a dec c jr nz,l3903 jr l3918 l390a: push hl ld a,e call l391c pop hl xor a l3911: dec hl or (hl) jr nz,l3919 dec c jr nz,l3911 l3918: inc c l3919: pop hl ccf ret l391c: push bc ld b,a sub (hl) ld (hl),b ld b,a ld a,c cp 3 jr z,l3963 ld a,b ld de,l0000 jr l3943 l392c: push hl push af ld b,c xor a l3930: dec hl ld d,(hl) ld (hl),a ld a,d dec b jp nz,l3930 or e ld e,a pop af pop hl sub 8 dec hl dec c call z,l3971 l3943: cp 8 jr nc,l392c or a jr z,l3961 push de ld e,a l394c: push hl ld b,c or a l394f: dec hl ld a,(hl) rra ld (hl),a dec b jp nz,l394f ld a,d rra ld d,a pop hl dec e jp nz,l394c pop de ld d,a l3961: pop bc ret l3963: dec hl push hl call l397e ex (sp),hl ld (hl),c dec hl ld (hl),d dec hl ld (hl),e pop de pop bc ret l3971: or a ret z ld b,a ld a,d l3975: rra or a ld d,a ret z dec b jr nz,l3975 xor a ret l397e: ld a,(hl) dec hl or 80h ld c,a ld d,(hl) dec hl ld e,(hl) ld hl,l0000 jr l3998 l398b: ld b,a ld a,l or e ld l,a ld h,e ld e,d ld d,c ld c,0 ld a,d or e or h ret z l3998: ld a,b sub 8 jr nc,l398b add a,8 ret z l39a0: or a rr c rr d rr e rr h dec b jr nz,l39a0 ret l39ad: ld a,c add a,a add a,a add a,a add a,80h ret l39b4: push bc l39b5: ld a,(de) ld (hl),a inc de inc hl dec c jr nz,l39b5 ld a,(de) ld (hl),a pop bc l39bf: ld a,(hl) or a ret z dec hl ld a,(hl) rlca scf rra ld (hl),a inc hl ld a,0 rra ret l39cd: ld (l74b5),hl ld b,0 dec c add hl,bc ld (l74b7),hl ret l39d8: ld a,d cp 80h ret c l39dc: ld hl,(l74b5) ld a,c scf l39e1: inc (hl) ret nz inc hl dec a jr nz,l39e1 dec hl ld (hl),80h inc hl l39eb: inc (hl) scf ret nz dec (hl) ccf ret l39f1: ld hl,(l74b7) dec hl jr nc,l3a02 ld a,b or 7fh and (hl) ld (hl),a scf inc c ld hl,(l74b5) ret l3a02: ld (hl),b inc hl l3a04: ld (hl),0ffh dec hl ld a,(hl) or 7fh ld (hl),a ld a,c dec a l3a0d: dec hl ld (hl),0ffh dec a jr nz,l3a0d inc c ret ; ; Function : SQR(expr) ; l3a15: call l6e5d ld de,l3af2 jr l3a2c l3a1d: push hl push bc call l3cda pop bc ex (sp),hl ld a,c call l6efc call l6e5d pop de l3a2c: ex de,hl call l38cf ex de,hl jp z,l3cf6 push af call l38cf jr z,l3a55 ld b,a call m,l38e0 call l3a97 jr c,l3a5d push af push de call l3b3d pop de call l35a0 call l3ac1 pop af call m,l38e0 pop af ret l3a55: pop af ret p call l388f jp l0f12 l3a5d: push af l3a5e: adc a,a jr nc,l3a5e ld b,a call l3cdd ex de,hl ld a,b l3a67: add a,a jr z,l3a7f push af call l3ceb jr nc,l3a8b pop af jr nc,l3a67 push af ld de,l74d9 call l35a0 jr nc,l3a8b pop af jr l3a67 l3a7f: pop af call m,l38e0 pop af ret p call l3cc6 ret c jr l3a94 l3a8b: pop af pop af call m,l38e0 pop af jp m,l6e78 l3a94: jp l0f1b l3a97: push hl push bc call l3ce5 call l320b ld a,c pop bc jr nc,l3aa5 jr z,l3aac l3aa5: pop hl ld a,b or a ret p jp l0eaa l3aac: push af ld a,(hl) rra sbc a,a and b ld b,a pop af cp 2 jr nc,l3aba ld a,(hl) cp '''' l3aba: inc b dec b pop hl ret ; ; Function : EXP(expr) ; l3abe: call l6e5d l3ac1: ld b,0e9h call l3cd2 jp nc,l3cf6 ld de,l3b2a call l3898 jp p,l6f20 ld de,l3b2e call l3898 jp m,l6e78 ld de,l3b25 call l3c88 ld a,e push af call l3ceb call l3cdd push de call l3c63 db 2 db 36h,0beh,44h,7bh l3af2: db 00h,00h,00h,80h ex (sp),hl call l3c63 db 2 db 0f3h,98h,35h,77h,18h,72h,31h db 7eh call l35a0 pop de push hl ex de,hl call l3381 ex de,hl pop hl call l36b1 ld de,l3af2 call l3389 ld a,1 call l3872 pop af jp p,l3872 cpl inc a jp l3872 l3b25: db 29h,3bh,0aah,38h,81h l3b2a: db 34h,0fh,30h,87h l3b2e: db 18h,72h,0b1h,87h ; ; Function : LOG10(expr) ; l3b32: call l6e5d ld de,l3ba2 jr l3b40 ; ; Function : LOG(expr) ; l3b3a: call l6e5d l3b3d: ld de,l3b9e l3b40: call l38cf dec a jp m,l0eaa push de call l3859 push af xor a call l3867 ld de,l3b9a call l3898 jr nc,l3b60 ld a,1 call l3867 pop af dec a push af l3b60: call l3ce4 push de ld de,l3c4d push de call l3389 pop de ex (sp),hl call l3381 pop de call l36b1 call l3c60 db 4 db 4bh,57h,5eh,7fh,08h,9bh,13h db 80h,93h,38h,76h,80h,3bh,0aah db 38h,82h push de call l35a0 pop de pop af ex de,hl call l6dc5 ex de,hl call l3389 pop de jp l35a0 l3b9a: db 0f3h,04h,35h,80h l3b9e: db 18h,72h,31h,80h l3ba2: db 9bh,20h,1ah,7fh ; ; Function : COS(expr) ; l3ba6: call l6e5d l3ba9: call l3cd0 jp nc,l3cf6 call l38cf call m,l38e0 or 1 jr l3bc1 ; ; Function : SIN(expr) ; l3bb9: call l6e5d l3bbc: call l3cd0 ret nc xor a l3bc1: ld de,l3bf9 call l3c89 ld a,e rra call c,l38e0 ld b,0eah call l3cd2 ld a,0 jp nc,l6dc5 inc a call l3872 call l3c60 db 6 db 2dh,1ah,0e6h,6eh,0fch,07h,28h db 74h,89h,68h,99h,79h,0e0h,35h db 23h,7dh,0e7h,5dh,0a5h,80h l3bf2: db 0dbh,0fh,49h,81h jp l35a0 l3bf9: db 6eh,83h,0f9h,22h,7fh ; ; Function : TAN(expr) ; l3bfe: call l3cda push de call l3ba9 ex (sp),hl call l3bbc pop de call l36b1 ret c jp l0f1b ; ; Function : ATN(expr) ; l3c11: call l6e5d call l38cf push af call m,l38e0 call l3cd0 jr nc,l3c5b dec a push af call p,l3cc6 call l3c60 db 0ah db 21h,0e4h,0e5h,77h,10h,0c0h,2fh db 7ah,0ech,59h,0fch,7bh,0c1h,0bbh db 6bh,7ch,42h,91h,0abh,7dh,0c1h db 17h,60h,7dh,0cdh,0ah,92h,7eh db 41h,0c8h,4ch,7eh,9ah,0aah,0aah db 7fh l3c4d: db 00h,00h,00h,81h call l35a0 pop af ld de,l3bf2 call p,l3385 l3c5b: pop af jp m,l38e0 ret l3c60: call l3ceb l3c63: call l3ce4 pop hl ld b,(hl) inc hl call l3ce0 l3c6c: inc de inc de inc de inc de push de ld de,l74dd dec b ret z push bc ld de,l74e2 call l35a0 pop bc pop de push de push bc call l3389 pop bc pop de jr l3c6c l3c88: xor a l3c89: push hl push af push de ex de,hl ld hl,l74dd ld b,c inc c call l3128 pop de call l35a0 pop af ld de,l3cc1 call nz,l3389 call l31ca jp nc,l0eaa pop de push hl push af push de ld de,l74e2 call l3186 ex de,hl ld hl,l74dd call l3381 ex de,hl ld b,c dec c pop hl call l3128 pop af pop de ret l3cc1: db 00h,00h,00h,00h,80h l3cc6: call l3ce4 ex de,hl call l3cf6 jp l36b1 l3cd0: ld b,0f4h l3cd2: call l3859 ret p cp b ret z ccf ret l3cda: call l6e5d l3cdd: ld de,l74d9 l3ce0: ex de,hl jp l3156 l3ce4: ex de,hl l3ce5: ld hl,l74e2 jp l3156 l3ceb: ex de,hl ld hl,l74dd call l3156 ex de,hl jp l35a0 l3cf6: ld a,1 jp l6dc5 l3cfb: jr z,l3d02 call l13f2 jr l3d1e l3d02: push hl l3d03: ld hl,l3d20 call l0465 call l0964 call l0472 call l6e95 call l5a04 jr nc,l3d03 call l4894 or a jr nz,l3d03 pop hl l3d1e: jr l3d5b l3d20: db 'Random number seed ? ',0 ; ; Function : NOT ; l3d36: ld a,(hl) cp '(' jr nz,l3d4c call l4869 call l13f2 call l4856 call l6ce3 jr z,l3d9d call m,l3d5b l3d4c: jr l3d78 l3d4e: ld hl,l8965 ld (l74e9),hl ld hl,l6c07 ld (l74e7),hl ret l3d5b: push hl call l6ce3 jr nz,l3d66 call l3d4e jr l3d76 l3d66: call l6e5d ld hl,l74e7 call l6f13 dec hl ld a,(hl) ld hl,l74e7 xor (hl) ld (hl),a l3d76: pop hl ret l3d78: push hl ld hl,(l74e9) call l3da6 push hl ld hl,(l74e7) call l3da6 ex (sp),hl add hl,de ex de,hl pop hl ld bc,l8965 add hl,bc ld (l74e7),hl jr nc,l3d94 inc de l3d94: ld bc,l6c07 ex de,hl add hl,bc ld (l74e9),hl pop hl l3d9d: push hl ld hl,l74e7 call l6e9b pop hl ret l3da6: ld b,h ld c,l ld de,l0000 ld l,e ld h,d ld a,6ch call l3dbe ld a,7 call l3dbe ld a,89h call l3dbe ld a,65h l3dbe: ex de,hl add hl,hl ex de,hl add hl,hl jr nc,l3dc5 inc de l3dc5: scf l3dc6: adc a,a jr nc,l3dcd add hl,bc jr nc,l3dcd inc de l3dcd: cp 80h ret z ex de,hl add hl,hl ex de,hl add hl,hl jr nc,l3dc6 inc de or a jr l3dc6 l3dda: call l3dea ld hl,(l75c9) ld (l75cb),hl ld (l75cd),hl ld (l75cf),hl ret l3dea: ld hl,l74eb ld a,'6' call l3df7 l3df2: ld hl,l7521 ld a,0ah l3df7: ld (hl),0 inc hl dec a jr nz,l3df7 ret l3dfe: ld a,5bh l3e00: ld hl,(l75cb) dec hl ld b,h ld c,l add a,a add a,69h ld l,a adc a,74h sub l ld h,a ret ; ; Build type pointer ; l3e0f: ld hl,(l75cd) dec hl ld b,h ld c,l and LOMASK ; Mask type add a,a ; Double index add a,LOW l7521 ld l,a ; Build address adc a,HIGH l7521 sub l ld h,a ret l3e20: call l3e8f jr nz,l3e2c xor a ld (l752b),a ld (l752c),a l3e2c: ld bc,l415a ld e,4 l3e31: push hl ld a,c sub b jr c,l3e9c inc a ld hl,l74ec ld b,0 add hl,bc l3e3d: ld (hl),e dec hl dec a jr nz,l3e3d pop hl ret l3e44: ld e,3 jr l3e52 l3e48: ld e,2 jr l3e52 l3e4c: ld e,4 jr l3e52 l3e50: ld e,8 l3e52: ld a,(hl) call l6f2f ; Test a letter jr nc,l3e9c ; Nope ld c,a ld b,a call l4869 cp '-' jr nz,l3e6d call l4869 call l6f2f ; Test a letter jr nc,l3e9c ; Nope ld c,a call l4869 l3e6d: call l3e31 call l4888 jr c,l3e52 ret l3e76: ld a,(l752c) or a call z,l3e8f jr nz,l3ea3 call l1341 cp 2 jr nc,l3e9c ld (l752b),a ld a,0ffh ld (l752c),a ret l3e8f: push hl ld hl,(l75cd) ex de,hl ld hl,(l75cf) call l6f7f ; HL:DE pop hl ret l3e9c: jp l0ea6 l3e9f: call l0eae ; Subscript out of range db 9 l3ea3: call l0eae ; Array already dimensioned db 10 l3ea7: call l3f03 push de call l485e call l13f2 ld a,b ex (sp),hl call l3eb8 pop hl ret l3eb8: ld b,a call l6ec7 cp b ld a,b call nz,l6e45 l3ec1: call l6ef6 jp nz,l6f13 push hl call l6a87 pop de jp l6f17 l3ecf: call l3f03 push de push bc call l485a call l3f03 ld a,b pop bc cp b ld a,0dh jp nz,l0eb0 ex (sp),hl push de push hl ld de,l7547 call l6f17 pop de pop hl push hl call l6f17 pop de ld hl,l7547 call l6f17 pop hl ret l3efa: call l402b call l4888 jr c,l3efa ret l3f03: call l4199 call l4051 jr c,l3f4d jr l3f35 l3f0d: call l4199 call l4051 jr c,l3f4d push hl ld a,c call l3e00 call l3f5b jr l3f4c l3f1f: call l4199 jr c,l3f45 push hl call l3dfe call l3f76 call nc,l3fb6 jr l3f4c l3f30: call l4199 jr c,l3f45 l3f35: push hl ld a,c call l3e00 call l3f5b ld a,(l7601) call nc,l3fc2 jr l3f4c l3f45: push hl ld hl,(l75cb) dec hl add hl,de ex de,hl l3f4c: pop hl l3f4d: ld a,(l7601) ld b,a ld c,a ret l3f53: call l4199 call l553a jr l3f4d l3f5b: push de push hl ld hl,(l7555) ld a,h or l jr z,l3f74 inc hl inc hl push bc ld bc,l0000 call l3f84 pop bc jr nc,l3f74 pop af pop af scf ret l3f74: pop hl pop de l3f76: push de push hl call l3f84 pop hl jr c,l3f80 pop de ret l3f80: pop hl jp l3fe6 l3f84: ld a,(hl) inc hl ld h,(hl) ld l,a or h ret z add hl,bc push hl inc hl inc hl ex de,hl ld hl,(l7550) l3f92: ld a,(de) cp (hl) jr nz,l3fa4 inc hl inc de rla jr nc,l3f92 ex de,hl ld a,(l7601) dec a xor (hl) and 7 ex de,hl l3fa4: pop hl jr nz,l3f84 inc de scf ret l3faa: push af ld d,h ld e,l inc hl inc hl l3faf: ld a,(hl) inc hl rla jr nc,l3faf pop af ret l3fb6: ld a,2 call l3fc2 dec de ld a,(de) or '@' ld (de),a inc de ret l3fc2: push de push hl push bc push af call l3ff0 push af ld hl,(l75cd) ex de,hl call l65fa call l64c0 pop af call l4003 pop bc xor a l3fda: dec hl ld (hl),a dec b jr nz,l3fda pop bc ex (sp),hl call l401b pop de pop hl l3fe6: inc hl ld a,e sub c ld (hl),a inc hl ld a,d sbc a,b ld (hl),a scf ret l3ff0: add a,3 ld c,a ld hl,(l7550) ld b,0 l3ff8: inc c inc b ld a,(hl) inc hl rla jr nc,l3ff8 ld a,b ld b,0 ret l4003: ld h,d ld l,e add hl,bc push hl push de inc de inc de ld hl,(l7550) call l6fa2 ; Move up ld a,(l7601) dec a ld (de),a inc de ld b,d ld c,e pop de pop hl ret l401b: ld a,(hl) ld (de),a ld a,e sub c ld (hl),a inc hl ld a,(hl) push af ld a,d sbc a,b ld (hl),a pop af inc de ld (de),a inc de ret l402b: call l4199 ld a,(hl) cp '(' jr z,l4038 xor 5bh jp nz,l0ea6 l4038: call l40d6 push hl push bc ld a,(l7601) call l3e0f call l3f84 jp c,l3ea3 pop bc ld a,0ffh call l4108 pop hl ret l4051: push af ld a,(hl) cp '(' jr z,l4067 xor 5bh jr z,l4067 pop af ret nc push hl ld hl,(l75cb) dec hl add hl,de ex de,hl pop hl scf ret l4067: call l40d6 pop af push hl jr nc,l4075 ld hl,(l75cd) dec hl add hl,de jr l408a l4075: push bc push de ld a,(l7601) call l3e0f call l3f84 jr nc,l4091 inc de inc de pop hl call l3fe6 pop bc ex de,hl l408a: ld a,b sub (hl) jp nz,l3e9f jr l409b l4091: pop hl pop bc xor a call l4108 call l3fe6 ex de,hl l409b: ld de,l0000 ld b,(hl) inc hl l40a0: push hl push de ld e,(hl) inc hl ld d,(hl) call l4186 call l6f7f ; HL:DE jp nc,l3e9f ex (sp),hl call l4783 pop de add hl,de ex de,hl pop hl inc hl inc hl dec b jr nz,l40a0 push hl ld h,d ld l,e add hl,hl ld a,(l7601) sub 4 jr z,l40cf jr nc,l40ce inc a jr nz,l40d0 add hl,de jr l40d0 l40ce: add hl,hl l40cf: add hl,hl l40d0: pop de add hl,de ex de,hl pop hl scf ret l40d6: push de call l4869 ld a,(l7601) push af ld b,0 l40e0: call l135d ld a,(l752b) or a jr z,l40ef ld a,d or e jp z,l3e9f dec de l40ef: push hl ld a,2 call l65af ld (hl),e inc hl ld (hl),d pop hl inc b call l4888 jr c,l40e0 call l4190 pop af ld (l7601),a pop de ret l4108: push hl ld (l754f),a push bc ld a,b add a,a add a,3 call l3ff0 push af ld hl,(l75cf) ex de,hl call l65fa pop af call l4003 ld h,b ld l,c pop bc push de inc hl inc hl ld a,(l7601) ld e,a ld d,0 ld (hl),b push hl inc hl l412f: push de ld a,(l754f) or a jr nz,l4140 ld a,(l752b) xor 0bh ld e,a ld d,0 jr l4146 l4140: ex de,hl call l4186 ex de,hl inc de l4146: ld (hl),e inc hl ld (hl),d inc hl ex (sp),hl call l4783 jp c,l3e9f ex de,hl pop hl dec b jr nz,l412f ld b,d ld c,e ld d,h ld e,l l415a: call l65fd ld (l75cf),hl push bc l4161: dec hl ld (hl),0 dec bc ld a,b or c jr nz,l4161 pop bc pop hl ld e,(hl) ld d,a ex de,hl add hl,hl inc hl add hl,bc ex de,hl dec hl dec hl ld (hl),e inc hl ld (hl),d inc hl ex (sp),hl ex de,hl ld a,(l7601) call l3e0f call l401b pop de pop hl ret l4186: ld a,2 call l659f ld a,(hl) inc hl ld h,(hl) ld l,a ret l4190: ld a,(hl) cp 5dh jp z,l4869 jp l4856 l4199: call l4219 inc hl ld e,(hl) inc hl ld d,(hl) ld a,d or e jr z,l41ae l41a4: inc hl ld a,(hl) rla jr nc,l41a4 call l4869 scf ret l41ae: dec hl dec hl ex de,hl pop bc ld hl,(l7550) push hl ld hl,l41c7 push hl push bc ex de,hl push hl call l41d5 ex de,hl ld (l7550),hl ex de,hl pop de ret l41c7: push hl ld hl,(l7550) call l65ab pop hl ex (sp),hl ld (l7550),hl pop hl ret l41d5: push hl inc hl inc hl inc hl ld a,(hl) and 0dfh ld c,a ex (sp),hl ld a,(hl) cp 6 jr c,l41fa ld a,c and 1fh add a,',' ld e,a adc a,75h sub e ld d,a ld a,(de) ld (l7601),a ld (hl),6 cp 8 jr z,l41fa add a,9 ld (hl),a l41fa: pop de ld a,'(' call l65af push hl ld b,')' l4203: dec b jp z,l0ea6 ld a,(de) inc de and 0dfh ld (hl),a inc hl rla jr nc,l4203 call l65ab ex de,hl dec hl pop de jp l4869 l4219: ld a,(hl) cp 0eh jr nc,l4239 sub 9 jr c,l4226 cp 2 jr nc,l4235 l4226: ld a,(hl) cp 2 jr c,l4239 cp 5 jr c,l4235 cp 7 ld a,8 jr nc,l4239 l4235: ld (l7601),a ret l4239: jp l0ea6 l423c: xor 0bch jp nz,l5564 push hl call l4252 pop hl jp l4869 l4249: call l3dfe ld a,(hl) inc hl or (hl) ret z ld a,0ffh l4252: ld (l7552),a ld bc,l432d or a call z,l5574 call l5601 call l658c ld hl,(l75cd) ld b,h ld c,l ld hl,(l75cb) ld d,h ld e,l l426c: call l6f85 ; HL:BC jr z,l4284 push bc push de ld c,7 call l4302 call c,l6fa8 ; Move up add hl,bc ex (sp),hl ld (hl),e inc hl ld (hl),d pop hl pop bc jr l426c l4284: ex de,hl ld (l75cd),hl ex de,hl push hl ld hl,(l75cf) ld b,h ld c,l pop hl l4290: call l6f85 ; HL:BC jr z,l42b4 push bc ld c,0 call l4302 jr c,l42a5 add hl,bc ld c,(hl) inc hl ld b,(hl) inc hl add hl,bc jr l42b1 l42a5: call l6fa8 ; Move up ld c,(hl) inc hl ld b,(hl) dec hl inc bc inc bc call l6fa8 ; Move up l42b1: pop bc jr l4290 l42b4: ex de,hl ld (l75cf),hl call l3dea ld hl,(l75cb) l42be: ex de,hl ld hl,(l75cd) ex de,hl call l6f7f ; HL:DE jr z,l42db ld e,(hl) inc hl ld d,(hl) dec hl push de push hl inc hl inc hl ld a,(hl) pop de call l3e00 call l401b pop hl jr l42be l42db: call l3df2 ld hl,(l75cf) ex de,hl ld hl,(l75cd) l42e5: call l6f7f ; HL:DE ret z push de call l3faa ld a,(hl) inc hl and 7 inc a push hl call l3e0f call l401b pop hl ld e,(hl) inc hl ld d,(hl) inc hl add hl,de pop de jr l42e5 l4302: push de call l3faa ld b,(hl) ld a,b and '@' ld a,2 jr nz,l4313 ld a,b and c jr z,l4313 inc a l4313: ld c,a ld a,b push af and 7fh ld (hl),a inc hl ld b,0 add hl,bc call l6f96 ; BC:=HL-DE ex de,hl pop af pop de rla ret c rla ccf ret nc ld a,(l7552) rla ret l432d: call l4869 cp 85h ret nz call l4869 cp 0bch ret z l4339: call l4344 call l4888 jr c,l4339 jp l487e l4344: call l4199 ld a,(hl) cp '(' jr z,l4350 cp 5bh jr nz,l435f l4350: call l4869 call l4190 push hl ld a,(l7601) call l3e0f jr l4367 l435f: push hl ld hl,(l7550) ld a,(hl) call l3e00 l4367: call l3f84 jr nc,l4371 dec de ld a,(de) or 80h ld (de),a l4371: pop hl ret l4373: call l5601 l4376: call l437f call l4888 jr c,l4376 ret l437f: call l4199 push hl ld a,(l7601) call l3e0f call l3f84 jp nc,l0eaa ex de,hl ld c,(hl) inc hl ld b,(hl) inc hl add hl,bc call l6f96 ; BC:=HL-DE call l6627 call l64c7 call l42db pop hl ret l43a3: ld hl,l0000 ld (l7555),hl ld (l7553),hl ret l43ad: push hl ld hl,(l7553) ex de,hl ld a,6 call l65af ld (l7553),hl ld (hl),e inc hl ld (hl),d inc hl xor a ld (hl),a inc hl ld (hl),a inc hl ex de,hl ld hl,(l7555) ex de,hl ld (hl),e inc hl ld (hl),d pop hl ret l43cd: push hl ld hl,(l7553) ld (l7555),hl pop hl ret l43d6: ld hl,(l7553) call l65ab ld e,(hl) inc hl ld d,(hl) inc hl ex de,hl ld (l7553),hl ex de,hl inc hl inc hl ld e,(hl) inc hl ld d,(hl) ex de,hl ld (l7555),hl ret l43ef: push hl ld a,2 call l65af ex (sp),hl call l4219 call l41d5 ex (sp),hl ex de,hl ld hl,(l7553) inc hl inc hl ld bc,l0000 call l401b ld a,(l7601) ld b,a inc a call l65af ld a,b dec a ld (hl),a inc hl ld (hl),0 ex de,hl pop hl ret l441a: ld hl,(l7553) l441d: ld a,h or l jr z,l442f ld c,(hl) inc hl ld b,(hl) inc hl push bc ld bc,l0000 call l4472 pop hl jr l441d l442f: ld bc,l1a41 l4432: push bc ld a,c call l3e00 call l4472 pop bc inc c dec b jr nz,l4432 ld a,3 call l3e0f l4444: ld c,(hl) inc hl ld b,(hl) ld a,b or c ret z ld hl,(l75cd) dec hl add hl,bc push hl push de call l3faa pop de inc hl ld c,(hl) inc hl ld b,(hl) inc hl push hl add hl,bc ex (sp),hl ld c,(hl) inc hl ld b,0 add hl,bc add hl,bc pop bc l4464: call l6f85 ; HL:BC jr z,l446f call l448b inc hl jr l4464 l446f: pop hl jr l4444 l4472: ld a,(hl) inc hl ld h,(hl) ld l,a or h ret z add hl,bc push hl push de call l3faa pop de ld a,(hl) inc hl and 7 cp 2 call z,l448b pop hl jr l4472 l448b: push bc push de ld a,(hl) inc hl ld c,(hl) inc hl ld b,(hl) push hl ex de,hl or a call nz,l6fb4 ; Execute ^HL pop hl pop de pop bc ret l449c: cp 9fh jr z,l44b4 call l4862 db 09eh call l4554 call l3f03 call l6eee push hl push de call l4570 jr l44ca l44b4: call l4869 call l457c call l3f03 call l6eee push hl push de ld hl,l7115 push hl call l45f0 pop hl l44ca: call l6710 pop hl call l3ec1 pop hl ld a,2 jp l03ca l44d7: push hl call l4554 ld a,'?' call nc,l0478 ld a,' ' call nc,l0478 push hl call l4570 ex de,hl pop hl call l4597 jr c,l44f9 ld hl,l450d call l0465 pop hl jr l44d7 l44f9: push de l44fa: call l3f03 ex (sp),hl ld a,0 call l4587 inc hl ex (sp),hl call l4888 jr c,l44fa pop de pop de ret l450d: db '?Redo from start',0ah,0 l451f: call l457c l4522: call l3f03 push hl push de call l6ef6 push af ld hl,l7115 push hl jr nz,l453a call l4620 pop hl call l6710 jr l4544 l453a: call l4609 pop hl call l5a04 jp nc,l4593 l4544: pop af pop hl call l3eb8 pop hl call l4888 jr c,l4522 ld a,2 jp l03ca l4554: ld a,(hl) cp ';' ld (l7557),a call z,l4869 xor '"' ret nz call l66ff call l674d call l4888 ret c call l4862 db 03bh or a ret l4570: call l0964 ld a,(l7557) cp ';' call nz,l0472 ret l457c: call l193a call l485a ld a,1 jp l03ca l4587: push de call l45c1 jr nc,l4593 ex (sp),hl call l3eb8 pop hl ret l4593: call l0eae ; Type mismatch db 13 l4597: push de push hl push de l459a: call l3f53 ex (sp),hl xor a call l45c1 jr nc,l45bd cp 3 call z,l6b07 ex (sp),hl call l4888 ex (sp),hl ld a,(hl) jr nc,l45b9 xor ',' jr nz,l45bd inc hl ex (sp),hl jr l459a l45b9: or a jr nz,l45bd scf l45bd: pop hl pop hl pop de ret l45c1: ld e,a call l6ef6 push af jr nz,l45cd call l45e4 jr l45dd l45cd: call l5a04 jr nc,l45e1 pop de push de ld a,d cp 2 call z,l6ec7 xor d jr nz,l45e1 l45dd: call l4894 scf l45e1: pop de ld a,d ret l45e4: call l4894 cp '"' jp z,l66ff ld a,e jp l671a l45f0: call l4671 jr nc,l4605 ld (hl),0 ld b,0ffh l45f9: cp 0dh ret z call l4668 call c,l4671 ret nc jr l45f9 l4605: call l0eae ; EOF met db 62 l4609: call l465d jr nc,l4605 ld (hl),0 ld b,0ffh l4612: call l4692 jr z,l4649 call l4668 call c,l4671 ret nc jr l4612 l4620: ld (hl),0 ld b,0ffh call l465d jr nc,l4605 cp '"' jr nz,l463b l462d: call l4671 ret nc cp '"' jr z,l4649 call l4668 ret nc jr l462d l463b: call l4696 jr z,l4649 call l4668 call c,l4671 ret nc jr l463b l4649: cp 0dh ret z cp '"' call nz,l6f51 ; Test delimiter blank, tab or new line ret nz ; Neither call l465d ret nc call l4696 call nz,l1a21 ret l465d: call l4671 ret nc call l6f51 ; Test delimiter blank, tab or new line jr z,l465d ; Yeap scf ret l4668: ld (hl),a inc hl ld (hl),0 dec b scf ret nz or a ret l4671: call l03f3 ret nc or a jr z,l4671 push bc cp 0dh ld b,0ah jr z,l4684 cp b jr nz,l468f ld b,0dh l4684: ld c,a call l03f3 jr nc,l468e cp b call nz,l1a21 l468e: ld a,c l468f: pop bc scf ret l4692: call l6f51 ; Test delimiter blank, tab or new line ret z ; Yeap l4696: cp ',' ret z cp 0dh ret ; ; Statement : \ ; l469c: call l4852 call l134e push af call l4888 ld a,2 jr nc,l46b5 ld a,(hl) cp '#' call z,l4869 call l193a ld a,1 l46b5: pop bc call l03ca push af call l4856 push hl call l6ae4 l46c1: call l03ea jp nc,l4605 ld (de),a inc de dec b jr nz,l46c1 pop hl pop af jp l03ca l46d1: jr z,l46dd call l13d1 push hl call l540b dec hl jr l4713 l46dd: push hl ld hl,(l75c7) jr l4713 l46e3: push hl ld hl,(l755a) ex de,hl ld hl,(l75c7) add hl,de l46ec: call l471b ex (sp),hl call l3f03 ex (sp),hl inc hl ld a,1 call l4587 ld a,(hl) cp 2 jr c,l470c cp ',' jr z,l470c ld hl,(l7558) call l4911 jp l0ea6 l470c: ex (sp),hl call l4888 ex (sp),hl jr c,l46ec l4713: call l64cf ld (l755a),hl pop hl ret l471b: ld a,(hl) cp ',' ret z l471f: call l5564 or a jr nz,l4733 inc hl ld a,(hl) inc hl or (hl) inc hl ld a,4 jp z,l0eb0 ld (l7558),hl inc hl l4733: call l4869 cp 87h jr nz,l471f ret l473b: ld b,h call l47f4 jr l4743 l4741: ld b,0 l4743: ld e,0 ld c,2 ret l4748: ld a,h or a jp m,l4753 or b jp m,l47f7 scf ret l4753: xor 80h or l ret nz ld a,b scf adc a,a ret l475b: or a adc hl,de scf ret po or 1 ret l4763: ex de,hl or a sbc hl,de scf ret po or 1 ret l476c: call l4778 call l4783 jp nc,l4748 or 1 ret l4778: ld a,h xor d ld b,a ex de,hl call l47f4 ex de,hl jp l47f4 l4783: xor a cp h jr z,l478a cp d ret c ex de,hl l478a: or l ret z ld h,d ld l,e dec a l478f: rra jr nc,l4794 add hl,de ret c l4794: or a ret z sla e rl d jr nc,l478f ret l479d: call l47ac l47a0: jp c,l4748 ret l47a4: ld c,h call l47ac ex de,hl ld b,c jr l47a0 l47ac: call l4778 l47af: ld a,d or e ret z push bc ex de,hl ld b,1 ld a,h or a jr nz,l47c3 ld a,d cp l jr c,l47c3 ld h,l ld l,0 ld b,9 l47c3: ld a,e sub l ld a,d sbc a,h jr c,l47ce inc b add hl,hl jr nc,l47c3 ccf l47ce: ccf ld a,b ld b,h ld c,l ld hl,l0000 dec a jr nz,l47db jr l47f1 l47da: add hl,hl l47db: push af ld a,b rra ld b,a ld a,c rra ld c,a ld a,e sub c ld a,d sbc a,b jr c,l47ed ld d,a ld a,e sub c ld e,a inc l l47ed: pop af dec a jr nz,l47da l47f1: scf pop bc ret l47f4: ld a,h or a ret p l47f7: xor a sub l ld l,a sbc a,h sub l cp h ld h,a scf ret nz cp 1 ret ; ; A= 0 if HL=0 ; A= 1 if HL>0 ; A=-1 if HL<0 ; l4803: ld a,h or l ret z l4806: ld a,h add a,a sbc a,a ret c inc a ret l480c: ld a,h xor d jp m,l4806 jr nz,l481a ld a,l sub e ret z sbc a,a ret c inc a ret l481a: ld a,h cp d sbc a,a ret c inc a ret l4820: add hl,hl ld a,l or a jr nz,l482e ld l,h ld h,a call l4783 ld de,l0000 ret l482e: ld a,10h l4830: add hl,hl dec a jr nc,l4830 ex de,hl ld c,l ld b,h l4837: add hl,hl ex de,hl jr c,l483e add hl,hl jr l4840 l483e: add hl,hl inc hl l4840: ex de,hl jr nc,l4847 add hl,bc jr nc,l4847 inc de l4847: dec a jr nz,l4837 cp d ret c ld a,l rrca ld l,h ld h,e ld e,a ret l4852: ld a,'(' jr l4866 l4856: ld a,')' jr l4866 l485a: ld a,',' jr l4866 l485e: ld a,0ech jr l4866 ; ; Verify immediate token found ; l4862: ex (sp),hl ld a,(hl) inc hl ex (sp),hl l4866: cp (hl) jr nz,l48a4 l4869: inc hl ld a,(hl) cp ' ' jr z,l4869 ret nc cp 0ah jr z,l4869 ret nc cp 9 jr z,l4869 cp 1 ret nc or a ret l487e: ld a,(hl) cp 2 ret c jr l48a4 l4884: ld a,(hl) cp 2 ret l4888: dec hl call l4869 xor ',' ret nz call l4869 scf ret l4894: ld a,(hl) inc hl cp ' ' jr z,l4894 cp 9 jr z,l4894 cp 0ah jr z,l4894 dec hl ret l48a4: jp l0ea6 l48a7: ld (l755e),hl call l041c call c,l0fb3 call l4869 call nz,l48dd ld a,(hl) cp 1 jp z,l48a7 jr nc,l48a4 inc hl l48bf: ld a,(hl) inc hl or (hl) inc hl jr z,l48d5 ld (l7560),hl inc hl ld a,(l7562) or a jp z,l48a7 call l4960 jr l48a7 l48d5: jp l0fbe l48d8: dec hl ld (l755e),hl inc hl l48dd: add a,a jp nc,l3ea7 cp 0b1h jr nc,l48a4 add a,LOW l4976 ld e,a adc a,HIGH l4976 l48ea: sub e ld d,a ex de,hl ld c,(hl) inc hl ld b,(hl) ex de,hl push bc jp l4869 l48f5: sub 'A' jr c,l48a4 cp 6 jr nc,l48a4 add a,a add a,LOW l4a28 ld e,a adc a,HIGH l4a28 jr l48ea l4905: ld hl,l0000 jr l4911 l490a: push de ex de,hl ld hl,(l75c7) add hl,de pop de l4911: ld (l7560),hl ret l4915: ld hl,(l7560) ret l4919: ld hl,(l7560) jp l64cf l491f: ld hl,(l7560) l4922: ld a,h or l ret z ld a,(hl) inc hl ld h,(hl) ld l,a scf ret l492b: push hl ld hl,l4936 call l6f5a ex (sp),hl jp l4869 l4936: db 0ah dw l0ea6 db 0dbh dw l3e76 db 97h dw l1b81 db 98h dw l1eca db 9eh dw l225b db 0a6h dw l224f db 0fdh dw l045c db 0b3h dw l2243 db 0c2h dw l03e1 db 0c4h dw l03e4 db 0e1h dw l0458 l4957: ld a,0ffh jr l495c l495b: xor a l495c: ld (l7562),a ret l4960: ld a,5bh call l0478 push hl ld hl,(l7560) ld a,(hl) inc hl ld h,(hl) ld l,a call l5c17 pop hl ld a,5dh jp l0478 l4976:: dw l0237 dw l5fce dw l569c dw l6661 dw l18af dw l423c dw l0fea dw l5564 dw l15dc dw l3e50 dw l3e48 dw l5564 dw l3e4c dw l3e44 dw l5391 dw l3efa dw l1eef dw l01bd dw l5568 dw l0f8e dw l1fbc dw l4373 dw l0ea1 dw l1b2a dw l1efc dw l05c3 dw l1b8a dw l079c dw l0796 dw l0772 dw l44d7 dw l451f dw l1fc7 dw l3ea7 dw l449c dw l4c96 dw l4c91 dw l5672 dw l603d dw l68b6 dw l5717 dw l6923 dw l1f6f dw l06a6 dw l0283 dw l089e dw l102b dw l1800 dw l492b dw l5f51 dw l5f23 dw l6047 dw l6044 dw l1baf dw l5568 dw l3cfb dw l46e3 dw l5568 dw l1f61 dw l544f dw l21f5 dw l46d1 dw l103e dw l1036 dw l07bf dw l68b3 dw l5634 dw l58e7 dw l0f86 dw l3ecf dw l21b2 dw l495b dw l4957 dw l5f31 dw l0829 dw l07ee dw l059b dw l604f dw l604c dw l667c dw l1fdc dw l2b78 dw l0eaa dw l1fd8 dw l0eaa dw l6066 dw l66d5 dw l0eaa dw l48f5 l4a28:: dw l5564 dw l5564 dw l5564 dw l5568 dw l5568 dw l5568 l4a34: push de ex de,hl ld hl,(l75c5) ex de,hl push de xor a ld (l7563),a ld bc,l012c l4a42: call l4a5a ld a,(hl) or a jr nz,l4a42 ld a,'-' sub c ld c,a ld a,1 sbc a,b ld b,a xor a ld (de),a inc de ld (de),a inc de ld (de),a pop hl pop de ret l4a5a: ld a,(hl) or a ret z call l6f2f ; Test a letter jr c,l4a81 ; Yeap call l6f3d ; Test digit or dot jp c,l4bb4 ; Yeap cp '&' jp z,l4c15 inc hl or a ret m call l4adc jp nz,l4c3b push bc ld b,a ld a,(l0120) or a ld a,b pop bc jr z,l4aa3 ret l4a81: call l4ae7 ret c push hl ld hl,l4aad call l6f71 pop hl jp c,l4c82 push hl ld hl,l4ab6 call l6f71 pop hl jr c,l4abc push af cp 92h ld a,1 call z,l4aa3 pop af l4aa3: ld (de),a inc de dec bc ld a,c or b ret nz call l0eae ; Line too long db 23 l4aad: db 0b9h,90h,94h,0bah,0d3h,44h,45h db 46h,00h l4ab6: db 87h,8ah,8dh,8ch,89h,00h l4abc: call l4aa3 l4abf: ld a,(hl) or a ret z cp ':' jr z,l4ad7 inc hl or a jp m,l4abf call l4adc cp '"' jr nz,l4abc call l4c6d jr l4abf l4ad7: xor a ld (l7563),a ret l4adc: call l6f51 ; Test delimiter blank, tab or new line ret z ; Yeap cp ' ' ret nc xor a ld a,' ' ret l4ae7: push bc push de push hl ld a,(hl) inc hl call l6f48 ; Convert to upper case call l4e96 call l4eda jr nc,l4b38 ld a,c and 7fh call l6f39 ; Test digit, letter or dot jr nc,l4b11 ; Nope ld a,(de) cp 0deh jr z,l4b11 cp 0e5h jr z,l4b11 ld a,(hl) call l4b9e call nc,l6f39 ; Test digit, letter or dot jr c,l4b38 ; Yeap l4b11: pop af ld a,(de) or a jp m,l4b7b pop de pop bc push af cp 'A' jr c,l4b2c cp 'G' jr nc,l4b2c ld a,0d8h call l4aa3 pop af push bc push de jr l4b7b l4b2c: ld a,0ffh call l4aa3 pop af call l4aa3 xor a jr l4b76 l4b38: pop hl pop de pop bc push hl dec hl l4b3d: inc hl ld a,(hl) call l6f39 ; Test digit, letter or dot jr c,l4b3d ; Yeap call l4b9e jr c,l4b4d ld a,6 jr l4b54 l4b4d: inc hl cp 8 jr nz,l4b54 ld a,5 l4b54: call l4aa3 xor a call l4aa3 xor a call l4aa3 ex (sp),hl l4b60: ld a,(hl) call l6f39 ; Test digit, letter or dot jr nc,l4b6d ; Nope ld a,(hl) call l4aa3 inc hl jr l4b60 l4b6d: dec de ld a,(de) or 80h ld (de),a inc de pop hl ld a,0ffh l4b76: ld (l7563),a scf ret l4b7b: push hl ld c,a ld hl,l4b8f call l6f71 sbc a,a and 1 ld (l7563),a ld a,c pop hl pop de pop bc or a ret l4b8f: db 0bdh,80h,0bbh,8eh,91h,0beh,0dch db 92h,0c2h,0a3h,0a4h,9ch,0e2h,9bh db 00h l4b9e: cp '&' ret nc cp '!' ccf ret nc cp '"' ret z xor '''' cp 4 ret c jr z,l4bb1 sub 4 l4bb1: add a,a scf ret l4bb4: ld a,(l7563) or a jr z,l4bcf ld a,(hl) inc hl jp m,l4aa3 cp '.' jp z,l4aa3 dec hl push de call l5bbb jr nc,l4c05 ld a,1dh jr l4c24 l4bcf: push de push bc call l6e92 call l5a1c pop bc jr nc,l4c05 call l6ecb jr nc,l4bfd ex de,hl ld hl,(l7602) ex de,hl ld a,d or a ld a,19h jr nz,l4c24 ld a,e pop de cp 0ah jr nc,l4bf3 add a,0eh scf l4bf3: push af ld a,18h call nc,l4aa3 pop af jp l4aa3 l4bfd: ld a,1eh jr z,l4c03 ld a,1fh l4c03: jr l4c24 l4c05: ld a,(hl) inc hl ex (sp),hl ex de,hl call l4aa3 ex de,hl ex (sp),hl call l6f7f ; HL:DE jr nz,l4c05 pop de ret l4c15: push de push bc call l5a1c pop bc jr nc,l4c05 cp 8 ld a,1ah jr z,l4c24 inc a l4c24: pop de call l4aa3 push hl ld hl,l7602 call l6ec7 l4c2f: push af ld a,(hl) inc hl call l4aa3 pop af dec a jr nz,l4c2f pop hl ret l4c3b: cp '"' jr z,l4c6d push bc push de xor '?' ld b,0b3h jr z,l4c57 dec hl ld de,l52cc call l4eda ld a,(de) jr c,l4c53 ld a,(hl) inc hl l4c53: ld b,a call l4c64 l4c57: ld (l7563),a ld a,b pop de pop bc cp 0b6h jr z,l4c7b jp l4aa3 l4c64: dec a ret z ld a,(l7563) inc a ret z dec a ret l4c6d: call l4aa3 ld a,(hl) or a ret z inc hl cp '"' jr nz,l4c6d jp l4aa3 l4c7b: ld a,1 call l4aa3 ld a,0b6h l4c82: call l4aa3 l4c85: ld a,(hl) or a ret z inc hl jp m,l4c85 call l4adc jr l4c82 l4c91: ld a,2 call l03c4 l4c96: call l1392 call l487e call l4905 call l4ca5 jp l0196 l4ca5: push de ld d,b ld e,c call l5413 call l59fa pop bc l4caf: ld e,(hl) inc hl ld d,(hl) dec hl ld a,d or e ret z push hl add hl,de ex (sp),hl call l03d5 jr z,l4cc4 call l0421 call c,l0f87 l4cc4: push hl inc hl inc hl ld e,(hl) inc hl ld d,(hl) pop hl ex de,hl call l6f85 ; HL:BC jr z,l4cd3 jr nc,l4cf6 l4cd3: call l138e push bc ex de,hl call l4d17 ld hl,l7115 l4cde: ld a,(hl) or a jr z,l4cef inc hl call l0490 cp 0ah ld a,0dh call z,l0490 jr l4cde l4cef: call l0472 pop bc pop hl jr l4caf l4cf6: pop hl ret l4cf8: call l5413 jr c,l4d17 l4cfd: push hl ex de,hl call l5c1d ld bc,l7115 ld d,0 l4d07: ld a,(hl) inc hl ld (bc),a inc bc dec d or a jr nz,l4d07 ld (bc),a dec bc ld a,' ' ld (bc),a inc bc pop hl ret l4d17: call l59fa call l4cfd inc hl inc hl inc hl inc hl ld a,(hl) cp 9 jr nz,l4d28 dec bc inc d l4d28: ld e,0 l4d2a: ld a,(hl) ld (bc),a or a ret z call l4d5b push de push hl ld e,0 cp 0b6h scf ld hl,l4aad call nz,l6f71 jr c,l4d47 inc e ld hl,l4ab6 call l6f71 l4d47: pop hl call c,l4d50 ld a,d pop de ld d,a jr l4d2a l4d50: ld a,(hl) or a ret z cp e ret z call l4e08 inc hl jr l4d50 l4d5b: push af call p,l4d99 pop af ret p l4d61: inc hl cp 0d8h jr z,l4d6a cp 0ffh jr nz,l4d6c l4d6a: ld a,(hl) inc hl l4d6c: push af push hl call l4ea6 or a push af call nz,l4e0f pop af call nz,l4e08 l4d7a: ld a,(hl) and 7fh cp 9 call nz,l4e08 cp (hl) inc hl jr z,l4d7a call l6f39 ; Test digit, letter or dot - C is yes sbc a,a and 1 ld e,a pop hl pop af cp 0e5h jr z,l4d96 cp 0deh ret nz l4d96: ld e,0 ret l4d99: cp 2 jr c,l4db9 cp 7 jr c,l4de2 cp 0bh jr c,l4dc5 cp 0eh jr c,l4de2 cp ' ' jr c,l4dd9 call l4b9e call nc,l6f39 ; Test digit, letter or dot call c,l4e0f ; Yeap ld a,(hl) jr l4dc5 l4db9: inc hl ld a,(hl) cp 0b6h ret z cp 92h jr z,l4d61 dec hl ld a,':' l4dc5: ld e,0 cp '"' jr nz,l4dd6 l4dcb: call l4e08 inc hl ld a,(hl) or a ret z cp '"' jr nz,l4dcb l4dd6: inc hl jr l4e08 l4dd9: call l4e0f call l4e15 ld e,1 ret l4de2: call l4e0f ld a,(hl) push af inc hl inc hl inc hl l4dea: ld a,(hl) and 7fh call l4e08 cp (hl) inc hl jr nc,l4dea pop af ld e,1 cp 6 ret nc ld e,0 xor '''' cp '$' jr nc,l4e08 xor 1 cp '#' sbc a,0 l4e08: ld (bc),a inc bc dec d ret nz dec bc inc d ret l4e0f: dec e ret nz ld a,' ' jr l4e08 l4e15: push de ld a,(hl) inc hl ld e,4 cp 1eh jr z,l4e82 ld e,8 cp 1fh jr z,l4e82 ld e,(hl) inc hl ld d,(hl) inc hl cp 1ah jr z,l4e61 cp 1bh jr z,l4e6a cp 1dh jr z,l4e5a cp 1ch jr z,l4e51 cp 19h jr z,l4e47 dec hl ld d,0 cp 18h jr z,l4e47 dec hl sub 0eh ld e,a l4e47: ex (sp),hl ex de,hl call l6e92 call l5c59 jr l4e8b l4e51: push hl ex de,hl inc hl inc hl inc hl ld e,(hl) inc hl ld d,(hl) pop hl l4e5a: ex (sp),hl ex de,hl call l5c1d jr l4e8b l4e61: ex (sp),hl push bc ld bc,l0307 ld l,'O' jr l4e71 l4e6a: ex (sp),hl push bc ld bc,l040f ld l,'H' l4e71: ex de,hl xor a call l5eeb pop bc ld a,'&' call l4e08 ld a,e call l4e08 jr l4e8b l4e82: ld a,e call l6efc ex (sp),hl ex de,hl call l5c2d l4e8b: ld a,(hl) inc hl call l4e08 ld a,(hl) or a jr nz,l4e8b pop hl ret l4e96: push hl sub 'A' add a,a add a,7 ld l,a adc a,'O' sub l ld h,a ld e,(hl) inc hl ld d,(hl) pop hl ret l4ea6: push bc ld c,a ld b,1ah ld hl,l4f3b l4ead: call l4ec6 jr c,l4ec1 inc hl dec b jr nz,l4ead ld hl,l52cc call l4ec6 jp nc,l0eaa ld b,0c0h l4ec1: ld a,b add a,'@' pop bc ret l4ec6: ld a,(hl) or a ret z push hl l4eca: ld a,(hl) inc hl rla jr nc,l4eca ld a,(hl) inc hl cp c jr z,l4ed7 pop af jr l4ec6 l4ed7: pop hl scf ret l4eda: ld a,(de) or a ret z push hl l4ede: ld a,(de) inc de cp 9 jr z,l4ee8 cp ' ' jr nz,l4eed l4ee8: call l4894 jr l4ede l4eed: ld c,a ld a,(hl) inc hl call l6f48 ; Convert to upper case xor c jr z,l4ede and 7fh jr z,l4f04 dec de l4efb: ld a,(de) inc de rla jr nc,l4efb inc de pop hl jr l4eda l4f04: pop af scf ret dw l52a8 dw l529c dw l523c dw l51f8 dw l51d0 dw l5190 dw l5181 dw l5177 dw l514a dw l5149 dw l5144 dw l5101 dw l50cb dw l50bc dw l508d dw l5072 dw l5071 dw l5013 dw l4fa6 dw l4f8c dw l4f7a dw l4f69 dw l4f45 dw l4f41 dw l4f40 dw l4f3b l4f3b: db 'ON',0c5h,0d5h,0 l4f40: db 0 l4f41: db 'O',0d2h,0fch,0 l4f45: db 'RITE ',0a3h,0ceh,'RIT',0c5h,0cdh db 'IDT',0c8h,0cch,'HIL',0c5h,0cbh db 'EN',0c4h,0cah,'AIT',0d7h,0d4h db 'AI',0d4h,0c9h,0 l4f69: db 'ERSIO',0ceh,')ARPT',0d2h,0e6h db 'A',0cch,'&',0 l4f7a: db 'S',0d2h,0e5h,'SIN',0c7h,0e4h,'PPER' db 0a4h,'%N',0d4h,'$',0 l4f8c: db 'YP',0c5h,0d3h,'RO',0ceh,0c8h,'ROF' db 0c6h,0c7h,0cfh,0e3h,'HE',0ceh,0e2h db 'A',0ceh,'#A',0c2h,0e1h,0 l4fa6: db 'YSTE',0cdh,0c6h,'WA',0d0h,0c5h db 'TRIP',0a4h,'(TRING',0a4h,7fh db 'TR',0a4h,'"TO',0d0h,0c4h,'TE' db 0d0h,0e0h,'Q',0d2h,'!P',0c3h,0dfh db 'PACE',0a4h,' I',0ceh,1fh,'G' db 0ceh,1eh,'EEK',9,'SE',0d4h,'qEEK' db 9,'RE',0c3h,'pEEK',9,'RAN',0cbh db 'oEEK',9,'PRE',0d6h,'nEEK',9 db 'NEX',0d4h,'mEEK',9,'KE',0d9h db 'lAV',0c5h,0c3h,0 l5013: db 'U',0ceh,0c2h,'SE',0d4h,0c1h,'OUN' db 0c4h,'~N',0c4h,'}MDI',0d2h,'CIGHT' db 0a4h,'|ETUR',0ceh,0c0h,'ESUME ' db 0b0h,0bfh,'ESUM',0c5h,0beh,'ESTOR' db 0c5h,0bdh,'ESE',0d4h,0bch,'ENU' db 0cdh,0bbh,'E',0ceh,0bah,'E',0cdh db 0b9h,'EA',0c4h,0b8h,0c4h,'FANK' db 9,'SPE',0c3h,'dANDOMIZ',0c5h db 0b7h,0 l5071: db 0 l5072: db 'U',0d4h,0b5h,'RINT ',0a3h,0b4h db 'RIN',0d4h,0b3h,'O',0d3h,1dh,'OK' db 0c5h,0b2h,'EE',0cbh,1ch,0 l508d: db 'UT',0d7h,0d2h,'U',0d4h,0b1h,'SER' db 0d2h,0e8h,0d2h,0fbh,'PTIO',0ceh db 0b0h,'PE',0ceh,0afh,'N ERROR GO' db 9,'TO ',0b0h,0aeh,0ceh,0adh,'CT' db 0a4h,'{',0 l50bc: db 'O',0d4h,0fdh,'EX',0d4h,0abh,'E' db 0d7h,0ach,'AM',0c5h,0aah,0 l50cb: db 'O',0c4h,0fah,'KUK',0a4h,'-KS' db 0a4h,1bh,'KIK',0a4h,',KI',0a4h db 1ah,'KDI',0d2h,'BKD',0a4h,19h db 'I',0ceh,'zID',0a4h,0a9h,'ERG' db 0c5h,0a8h,'EMOR',0d9h,0cfh,0c4h db 'EA',0d8h,'y',0 l5101: db 'SE',0d4h,0a7h,'PRIN',0d4h,0a6h db 'PO',0d3h,18h,'OWER',0a4h,17h db 'OG1',0b0h,16h,'O',0c7h,15h,'O' db 0c6h,14h,'OC',0cbh,'kO',0c3h,13h db 'OA',0c4h,0a5h,'LIS',0d4h,0a4h db 'IS',0d4h,0a3h,'IN',0c5h,0a2h,'E' db 0d4h,0a1h,'E',0ceh,12h,'EFT',0a4h db 'x',0 l5144: db 'IL',0cch,0a0h,0 l5149: db 0 l514a: db 'N',0d4h,11h,'NST',0d2h,'wNP' db 0d7h,'''NPUT',0a4h,'vNPUT ',0a3h db 9fh,'NPU',0d4h,9eh,'N',0d0h,10h db 'NKEY',0a4h,'uM',0d0h,0f9h,0c6h db 9dh,0 l5177: db 'IME',0cdh,0e7h,'EX',0a4h,'t' db 0 l5181: db 'O',9,'T',0cfh,9ch,'O',9,'SU' db 0c2h,9bh,'E',0d4h,9ah,0 l5190: db 'R',0c5h,0fh,'O',0d2h,99h,0ceh db 0deh,'I',0d8h,0eh,'INDDIR',0a4h db 'bIND',0a4h,'sILE',0d3h,98h,'IEL' db 0c4h,97h,'ETCH',9,'RE',0c3h,'jETCH' db 9,'RAN',0cbh,'iETCH',9,'KEY' db 0a4h,'h',0 l51d0: db 'X',0d0h,0dh,'RRO',0d2h,96h,'R' db 0d2h,0ddh,'R',0cch,0dch,'RAS',0c5h db 95h,'R',0c1h,94h,'Q',0d6h,0f8h db 'O',0c6h,0ch,'N',0c4h,93h,'LS' db 0c5h,92h,'DI',0d4h,91h,0 l51f8: db 'ISPLA',0d9h,0d0h,'I',0d2h,90h db 'I',0cdh,8fh,'ELKE',0d9h,'gELET' db 0c5h,8eh,'EFST',0d2h,8dh,'EFSN' db 0c7h,8ch,'EF SE',0c7h,8bh,'EFIN' db 0d4h,8ah,'EFDB',0cch,89h,'E' db 0c6h,88h,'EC',0a4h,'rAT',0c1h db 87h,0 l523c: db 'VU',0cbh,'+V',0d3h,0bh,'VI' db 0cbh,'*V',0c9h,0ah,'V',0c4h,9 db 'SN',0c7h,8,'REAT',0c5h,0d1h,'O' db 0d3h,7,'ON',0d4h,86h,'ONSOLIDAT' db 0c5h,'cOMMO',0ceh,85h,'LOS',0c5h db 84h,'LEA',0d2h,83h,'IN',0d4h db 6,'HR',0a4h,5,'HDIR',0a4h,'aHDI' db 0d2h,'AHAI',0ceh,82h,'DB',0cch db 4,0c4h,'DAL',0cch,81h,0 l529c: db 'UFFER',0d3h,0d6h,'AS',0c5h,0dbh db 0 l52a8: db 'UT',0cfh,80h,'T',0ceh,3,'S' db 0c3h,2,0d3h,0dah,'N',0c4h,0f7h,'L' db 0cch,0d9h,'DD',9,'KE',0d9h,'eDD' db 9,'RE',0c3h,'fB',0d3h,1,0 l52cc: db 0deh,0f5h,0dch,0f6h,'>',9,0bdh,0edh db '= ',0beh,0edh,'<',9,0beh,0efh db '<',9,0bdh,0f0h,'= ',0bch,0f0h db 0beh,0ebh,0bdh,0ech,0bch,0eeh,0afh db 0f4h,0bah,1,0aah,0f3h,0adh,0f2h,0abh db 0f1h,0a7h,0b6h,0 l52f7: xor a ld (l756c),a ld (l7564),a ld hl,(l75c7) ld (hl),a inc hl ld (hl),a inc hl ld (hl),a inc hl ld (l75c9),hl ret l530b: ld a,(l7564) or a ret z push bc push de push hl ld bc,l5321 call l5574 xor a ld (l7564),a pop hl pop de pop bc ret l5321: call l55b8 cp 2 ret c cp 1ch jr nz,l5321 ld d,(hl) dec hl ld e,(hl) dec hl push hl ex de,hl inc hl inc hl inc hl ld e,(hl) inc hl ld d,(hl) pop hl ld (hl),1dh inc hl ld (hl),e inc hl ld (hl),d jr l5321 l5340: call l59fa call l530b ex de,hl call l138e ex de,hl ld a,(hl) cp ' ' jr nz,l5351 inc hl l5351: call l4a34 push hl call l4894 or a jr z,l5383 push bc push de ld hl,l0004 add hl,bc push hl push hl call l5413 push hl call c,l5387 pop de pop bc call l65fa call l64ad ex de,hl pop de ld (hl),e inc hl ld (hl),d inc hl pop de ld (hl),e inc hl ld (hl),d inc hl pop bc ex de,hl pop hl jp l6fa8 ; Move up l5383: pop hl call l540b l5387: ld a,b or c ret z ex de,hl call l6627 jp l64ad l5391: call l53ae call l4888 ld de,lffff call c,l1371 call l487e push de call l6a6a call l53c8 call l02b6 pop de jp l5703 l53ae: call l1392 push hl push bc call l5431 pop de push hl call l5413 ld (l7565),hl ex de,hl pop hl call l6f92 ; HL:=HL-DE ld (l7567),hl pop hl ret l53c8: call l530b ld hl,(l7567) ld b,h ld c,l ld hl,(l7565) jp l5387 l53d6: inc hl ld e,(hl) inc hl ld d,(hl) cp 1ch jr z,l5408 cp 1dh jp nz,l0ea6 push hl call l491f call c,l6f7f ; HL:DE jr nc,l53f6 pop hl push hl inc hl call l5568 inc hl call l5417 l53f6: call nc,l540b dec hl ex de,hl pop hl dec hl dec hl ld a,1ch ld (l7564),a ld (hl),a inc hl ld (hl),e inc hl ld (hl),d l5408: jp l4869 l540b: call l5413 ret c call l0eae ; Line does not exist db 8 l5413: ld hl,(l75c7) inc hl l5417: ld c,(hl) inc hl ld b,(hl) dec hl ld a,b or c ret z push hl inc hl inc hl ld a,(hl) inc hl ld h,(hl) ld l,a ex de,hl call l6f7f ; HL:DE ex de,hl pop hl ccf ret nc ret z add hl,bc jr l5417 l5431: ld hl,(l75c7) inc hl l5435: push hl ld c,(hl) inc hl ld b,(hl) inc hl ld a,b or c jr z,l544d ld a,(hl) inc hl ld h,(hl) ld l,a ex de,hl call l6f7f ; HL:DE ex de,hl jr c,l544d pop hl add hl,bc jr l5435 l544d: pop hl ret l544f: ld de,l000a jr z,l5459 cp ',' call nz,l13c3 l5459: push de ld de,l0000 call l4888 jr nc,l5467 cp ',' call nz,l13c3 l5467: push de ld de,l000a call l4888 call c,l13d1 call l487e ld a,d or e jp z,l0eaa pop hl ex de,hl ex (sp),hl ex de,hl push de push hl call l5413 pop de push hl call l5413 ex de,hl pop hl call l6f7f ; HL:DE jp c,l0eaa ex de,hl pop de pop bc push de push hl l5494: push bc ld c,(hl) inc hl ld b,(hl) ld a,b or c jr z,l54b5 dec hl add hl,bc ld a,(hl) inc hl or (hl) jr z,l54b5 dec hl pop bc push hl ex de,hl add hl,bc ex de,hl jp c,l0eaa ld a,d and e inc a jp z,l0eaa pop hl jr l5494 l54b5: ld bc,l54df call l5574 pop bc pop hl pop de l54be: push bc push hl ld c,(hl) inc hl ld b,(hl) inc hl ld a,b or c jr z,l54d4 ld (hl),e inc hl ld (hl),d inc hl pop hl add hl,bc pop bc ex de,hl add hl,bc ex de,hl jr l54be l54d4: pop hl pop hl ld bc,l5503 call l5574 jp l0196 l54df: call l55b8 cp 2 ret c cp 1dh jr nz,l54df push hl ld d,(hl) dec hl ld e,(hl) call l5413 jr nc,l5500 dec hl ex de,hl pop hl push hl ld (hl),d dec hl ld (hl),e dec hl ld a,1ch ld (hl),a ld (l7564),a l5500: pop hl jr l54df l5503: call l55b8 cp 2 ret c cp 1dh jr nz,l5503 push hl ld d,(hl) dec hl ld e,(hl) call l491f call l0f42 pop hl jr l5503 l551a: dec hl ld b,0 l551d: inc b l551e: call l55b8 l5521: or a ret z cp 9dh jr z,l551d cp 1 jr nz,l551e call l55b8 cp 92h jr nz,l5521 dec b jr nz,l551e call l4869 inc b ret l553a: ld a,(hl) cp 5bh jr z,l5542 cp '(' ret nz l5542: ld b,0 l5544: inc b l5545: call l55b8 cp 5bh jr z,l5544 cp '(' jr z,l5544 cp 5dh jr z,l555f cp ')' jr z,l555f cp 2 jr nc,l5545 jp l0ea6 l555f: dec b jr nz,l5545 inc hl ret l5564: ld b,1 jr l556a l5568: ld b,0 l556a: dec hl l556b: call l55b8 or a ret z cp b jr nz,l556b ret l5574: call l4915 push hl ld hl,(l75c7) l557b: inc hl ld a,(hl) inc hl or (hl) jr z,l5594 inc hl call l4911 inc hl l5586: push bc call l6fb5 ; Execute ^BC pop bc dec hl call l55aa or a jr nz,l5586 jr l557b l5594: pop hl jp l4911 l5598: call l55aa or a ret nz inc hl ld a,(hl) inc hl or (hl) ld a,c jp z,l0eb0 inc hl ld d,h ld e,l inc hl ret l55aa: call l55b8 cp 2 ret c cp 92h ret z cp 0e2h jr nz,l55aa ret l55b8: call l4869 ret z cp 0eh jr c,l55d9 cp ' ' jr c,l55e9 cp '"' jr z,l55cd cp 0ffh ret nz inc hl ret l55cd: inc hl ld a,(hl) cp '"' ret z or a jr nz,l55cd dec hl ld a,'"' ret l55d9: cp 8 ret z cp 7 ret z inc hl inc hl push af l55e2: inc hl ld a,(hl) rla jr nc,l55e2 pop af ret l55e9: cp 18h ret c cp 18h jr z,l55ff cp 1eh jr c,l55fe cp 1fh jr nz,l55fc inc hl inc hl inc hl inc hl l55fc: inc hl inc hl l55fe: inc hl l55ff: inc hl ret l5601: push bc push de push hl ld bc,l560e call l5574 pop hl pop de pop bc ret l560e: push hl call l55b8 pop de cp 2 ret c cp 0eh jr nc,l560e cp 7 jr z,l560e cp 8 jr z,l560e ex de,hl call l4869 cp 6 jr c,l562c ld (hl),6 l562c: inc hl xor a ld (hl),a inc hl ld (hl),a ex de,hl jr l560e l5634: ex de,hl ld hl,(l75c7) ex de,hl call l4884 jr c,l5656 cp 1dh jr z,l5652 cp 1ch jr z,l5652 call l581a or a call z,l18d1 call l5691 jr l5665 l5652: call l53d6 ret nz l5656: inc de push de call l18d1 call l0296 call l02b6 call l02c5 pop hl l5665: call l2226 call l03e4 call l0458 pop af jp l48bf l5672: call l581a or a push af call z,l18d1 call l5691 pop af jp z,l0196 pop af jp l48bf l5685: call l581a call l108c call l5691 jp l48bf l5691: call l028d call l583d ld hl,(l75c7) inc hl ret l569c: xor 0a8h jr nz,l56a4 call l4869 scf l56a4: sbc a,a ld (l7569),a call l186b ld de,l0000 call l4888 jr nc,l56b9 ld a,(hl) cp ',' call nz,l1371 l56b9: push de ld bc,l0000 call l4888 jr nc,l56db cp 0d9h jr nz,l56d0 ld c,0ffh call l4869 call l4888 jr nc,l56db l56d0: call l4862 db 08eh push bc call l53ae pop bc ld b,0ffh l56db: call l487e push bc ld a,c call l4252 call l6a6a call l6b73 pop af or a call nz,l53c8 ld a,(l7569) or a jr nz,l56ff call l02a7 call l3e20 call l583d jr l5702 l56ff: call l5727 l5702: pop de l5703: ld a,d and e inc a jp z,l0196 ld hl,(l75c7) ld a,d or e ret z call l4905 call l540b dec hl ret l5717: call l581a or a jp nz,l0ea6 call l0296 call l5727 jp l0196 l5727: ld a,(l756c) ld b,a call l58b0 push af ld hl,l756c ld a,(hl) or b ld (hl),a pop af jp nc,l583d call l02b6 call l530b call l64dc call l19b0 call l19b0 ld hl,(l75c9) ex de,hl ld hl,(l75c7) inc hl ld (l75c9),hl ex de,hl call l6f96 ; BC:=HL-DE ex de,hl call l6648 ex de,hl dec hl call l6fb1 ; Move down inc de ex de,hl l5762: call l580f ld e,a call l580f ld d,a or e jr z,l57bc push de call l580f ld e,a call l580f ld d,a l5776: ld a,(hl) inc hl or (hl) dec hl jr z,l5797 push hl inc hl inc hl ld a,(hl) inc hl ld h,(hl) ld l,a call l6f7f ; HL:DE pop hl jr z,l5790 jr nc,l5797 call l57dc jr l5776 l5790: push de ld e,(hl) inc hl ld d,(hl) dec hl add hl,de pop de l5797: push hl ld hl,(l75c9) inc hl inc hl ld (hl),e inc hl ld (hl),d ld de,l001d add hl,de ex de,hl pop hl ex (sp),hl ex de,hl add hl,de ex de,hl ex (sp),hl call l6f7f ; HL:DE jr c,l57b7 ex (sp),hl call l57f2 pop hl jr l5762 l57b7: call l57bc jr l57d5 l57bc: ld a,(hl) inc hl or (hl) dec hl jr z,l57c7 call l57dc jr l57bc l57c7: ld hl,(l75c9) xor a ld (hl),a inc hl ld (hl),a inc hl ld (l75c9),hl jp l58a5 l57d5: call l4905 call l0eae ; Memory full db 7 l57dc: push bc push de push hl ld c,(hl) inc hl ld b,(hl) ld hl,(l75c9) ex de,hl pop hl call l6fa8 ; Move up ex de,hl ld (l75c9),hl ex de,hl pop de pop bc ret l57f2: ex de,hl ld hl,(l75c9) ld (hl),e inc hl ld (hl),d inc hl inc hl inc hl dec de dec de dec de l57ff: dec de ld a,d or e jr z,l580b call l580f ld (hl),a inc hl jr l57ff l580b: ld (l75c9),hl ret l580f: push de push hl call l19b0 call l5977 pop hl pop de ret l581a: call l186b call l4884 ld a,0 ret c call l485a call l4862 db 006h inc hl inc hl ld a,(hl) and 0dfh cp 0d2h jp nz,l0ea6 call l4869 call l487e ld a,0ffh ret l583d: call l02b6 call l64dc call l58b0 jr c,l5869 call l4905 l584b: call l0964 jr nc,l58a5 call l4894 or a jr z,l584b call l5bbb jr nc,l5860 call l5340 jr l584b l5860: ld a,'B' jr z,l5866 ld a,6 l5866: jp l0eb0 l5869: call l19b0 ld l,a call l19b0 ld h,a push hl ld hl,(l75c7) inc hl ex de,hl call l6648 ld bc,lff80 add hl,bc pop bc push bc call l6f92 ; HL:=HL-DE call nc,l6f85 ; HL:BC jp c,l57d5 ex de,hl push hl call l19e4 pop hl pop de push hl add hl,de ld (l75c9),hl pop hl l5896: ld a,(hl) push de push hl call l5977 pop hl pop de ld (hl),a inc hl dec de ld a,d or e jr nz,l5896 l58a5: call l64ef call l18fc ld a,2 jp l03ca l58b0: ld a,1 call l03ca call l19b0 ret nc cp 0fch jr z,l58c4 jr nc,l58e3 call l1a21 or a ret l58c4: call l19b0 cp 5 jr nc,l58e3 call l19b0 or a ld hl,l59c1 jr z,l58db dec a jr nz,l58e3 ld hl,l59c6 cpl l58db: ld (l756a),hl ld (l756c),a scf ret l58e3: call l0eae ; File type error db 54 l58e7: call l1856 ld a,1 call l03c4 call l4888 ld bc,l592c jr nc,l5912 call l4862 db 006h inc hl inc hl ld a,(hl) and 0dfh add a,'0' ld bc,l5935 jr z,l590f cp 0f1h jp nz,l0ea6 ld bc,l5923 l590f: call l4869 l5912: call l487e push hl call l6fb5 ; Execute ^BC call l18fc ld a,3 call l03c4 pop hl ret l5923: ld bc,l0000 ld de,lfffe jp l4ca5 l592c: call l59fa ld hl,l59c1 xor a jr l593a l5935: ld hl,l5983 ld a,1 l593a: ld (l756a),hl push af call l530b call l5601 ld a,0fch call l0490 ld a,4 call l0490 pop af call l0490 ld hl,(l75c7) inc hl ex de,hl ld hl,(l75c9) call l6f92 ; HL:=HL-DE ld a,l call l0490 ld a,h call l0490 l5965: ld a,(de) inc de push hl push de call l5977 call l0490 pop de pop hl dec hl ld a,h or l jr nz,l5965 ret l5977: ex (sp),hl push hl ld hl,(l756a) ex (sp),hl ld (l756a),hl pop hl ex (sp),hl ret l5983: ld bc,l0000 l5986: dec b jp p,l598c ld b,0ch l598c: dec c jp p,l5992 ld c,0ah l5992: ld d,0 push af ld a,b add a,c and 0fh ld e,a ld hl,l59b1 add hl,de pop af sub (hl) ld e,b ld hl,l0107 add hl,de xor (hl) ld e,c ld hl,l0114 add hl,de xor (hl) call l5977 jr l5986 l59b1: cp a sbc a,l sub c adc a,(hl) sub d ret po ret po cp l sub c sub e sub b adc a,e adc a,h sbc a,e adc a,(hl) adc a,l l59c1: call l5977 jr l59c1 l59c6: ld bc,l0000 l59c9: dec b jp p,l59cf ld b,0ch l59cf: dec c jp p,l59d5 ld c,0ah l59d5: ld d,0 ld e,c ld hl,l0114 add hl,de xor (hl) ld e,b ld hl,l0107 add hl,de xor (hl) push af ld a,b add a,c and 0fh ld e,a ld hl,l59b1 add hl,de pop af add a,(hl) call l5977 jr l59c9 l59f4: push hl call l491f pop hl ret c l59fa: push af ld a,(l756c) or a jp nz,l0eaa pop af ret l5a04: call l5ad1 jr nz,l5a0e call l4894 jr l5a3a l5a0e: cp '&' jr z,l5a2b call l6f3d ; Test digit or dot jr c,l5a3a ; Yeap call l6e78 scf ret l5a1c: push hl call l5a24 pop de ret c ex de,hl ret l5a24: ld d,0 ld a,(hl) cp '&' jr nz,l5a3a l5a2b: call l5b9b push af ex de,hl call l6e92 ex de,hl pop af ret c ret z jp l0f1b l5a3a: push hl ld a,(hl) inc hl cp '.' call z,l4894 call l6f41 ; Test digit pop hl jr c,l5a4e ; Yeap ld a,(hl) xor '.' ret nz inc hl ret l5a4e: push de ld bc,l0000 ld de,l756d call l5ae0 cp '.' jr nz,l5a67 call l5b5e call l6eb3 inc c call l5ae0 dec c l5a67: push af ld a,0ffh ld (de),a ld a,7 cp b jr c,l5a71 cp c l5a71: call c,l6ebd pop af call l5b04 pop de ld e,a push hl call l4894 cp '%' jr z,l5a92 cp '#' call z,l6ebd jr z,l5a91 cp '!' scf jr nz,l5a94 call l6eb9 l5a91: scf l5a92: inc hl ex (sp),hl l5a94: push af push de ld hl,l756d call l5b63 pop de call l6ecb jr nc,l5aad push hl ld b,d call l6d4d pop hl jr c,l5ac9 call l6eb9 l5aad: cp c jr c,l5ab1 ld c,a l5ab1: inc c ld a,d call l31b5 ld a,e call l32be ld b,c ex de,hl call l6ec1 call c,l3128 jr nc,l5ac9 pop af push af call nc,l6dfc l5ac9: ld a,0ah pop de pop hl ret c jp l0f1b l5ad1: call l4894 inc hl ld d,0ffh cp '-' ret z inc d cp '+' ret z dec hl ret l5ae0: push hl call l4894 inc hl call l6f41 ; Test digit jr c,l5aee ; Yeap pop hl jp l6f48 ; Convert to upper case l5aee: ex (sp),hl pop hl sub '0' ld (de),a or b jr z,l5afd ld a,b inc b cp 13h jr nc,l5afd inc de l5afd: ld a,c or a jr z,l5ae0 inc c jr l5ae0 l5b04: sub 'D' cp 2 jr nc,l5b1b ld e,a push hl call l5b5e call l5ad1 call z,l4894 call l6f41 ; Test digit jr c,l5b1e ; Yeap pop hl l5b1b: xor a jr l5b41 l5b1e: ex (sp),hl pop hl ld a,e or a call z,l6ebd call nz,l6eb3 push de push bc call l5bd3 jr nc,l5b38 ld a,e sub 64h ld a,d sbc a,0 ld a,e jr c,l5b3a l5b38: ld a,7fh l5b3a: pop bc pop de inc d jr nz,l5b41 cpl inc a l5b41: add a,80h ld e,a ld a,b sub 13h jr nc,l5b4a xor a l5b4a: sub c jr nc,l5b56 add a,e jr c,l5b51 xor a l5b51: cp 1 adc a,80h ret l5b56: add a,e jr nc,l5b5b ld a,0ffh l5b5b: sub 80h ret l5b5e: call l4894 inc hl ret l5b63: ex de,hl ld hl,l758a ld bc,l0901 xor a l5b6b: dec hl ld (hl),a dec b jr nz,l5b6b ld a,(de) cp 0ffh ret z ld (hl),a l5b75: ld hl,l7581 inc de ld a,(de) cp 0ffh ret z push de ld b,c ld d,0 l5b81: push hl ld e,(hl) ld h,d ld l,e add hl,hl add hl,hl add hl,de add hl,hl ld e,a add hl,de ld e,l ld a,h pop hl ld (hl),e inc hl dec b jr nz,l5b81 pop de or a jr z,l5b75 ld (hl),a inc c jr l5b75 l5b9b: call l4894 cp '&' jr nz,l5bd3 inc hl call l4894 call l6f48 ; Convert to upper case ld b,10h cp 'H' jr z,l5bb5 ld b,8 cp 'O' jr nz,l5bb9 l5bb5: inc hl call l4894 l5bb9: jr l5bd5 l5bbb: push bc push hl call l5bd3 ex de,hl call l6e92 ex de,hl pop bc jr nc,l5bce ld a,d and e sub 0ffh jr c,l5bd1 l5bce: ld d,b ld e,c ex de,hl l5bd1: pop bc ret l5bd3: ld b,0ah l5bd5: ex de,hl call l5bff ld h,0 ld l,a jr nc,l5bfc ld c,0 l5be0: call l5bff jr nc,l5bf9 push de ld d,0 ld e,a push de ld e,b call l4783 pop de jr c,l5bf4 add hl,de jr nc,l5bf6 l5bf4: ld c,0ffh l5bf6: pop de jr l5be0 l5bf9: ld a,c cp 1 l5bfc: ex de,hl ld a,b ret l5bff: ld a,(de) inc de call l6f41 ; Test digit jr c,l5c10 ; Yeap call l6f48 ; Convert to upper case cp 'A' ccf jr nc,l5c13 sub 7 l5c10: sub '0' cp b l5c13: ret c dec de xor a ret l5c17: call l5c1d jp l0465 l5c1d: push de push bc call l6e92 call l6c12 xor a call l5c6f inc hl pop bc pop de ret l5c2d: call l5c59 call l6ecb ret c push hl l5c35: ld a,(hl) inc hl or a jr z,l5c4c call l6f41 ; Test digit jr c,l5c35 ; Yeap cp '.' jr c,l5c35 jr nz,l5c4a call l6ed4 jr c,l5c35 l5c4a: pop hl ret l5c4c: ld (hl),a dec hl ld (hl),'!' call l6ecb jr z,l5c4a ld (hl),'#' jr l5c4a l5c59: push de push bc call l5c66 pop bc pop de ld a,(hl) cp ' ' ret nz inc hl ret l5c66: xor a l5c67: ld (l7597),hl push af call l6c02 pop af l5c6f: push bc ld d,a push de call l5e8f pop de call l5c93 call l5e18 pop af ld e,a ld a,b or a call z,l5e2b call l5e44 call l5e4e call l5e70 ld a,d rra ret nc dec hl ld (hl),'%' ret l5c93: ld a,d add a,a jr nc,l5ca8 jp m,l5cdf ld a,e add a,c sub 19h jp m,l5d52 ld a,d or 'A' ld d,a jp l5cdf l5ca8: jp p,l5cc0 l5cab: ld b,c ld a,c or a jr z,l5cbd add a,e dec a ld e,a call l5dc0 ld b,1 ld a,c cp b call nz,l5d70 l5cbd: jp l5d27 l5cc0: ld a,e or a jp m,l5cc9 jr nz,l5cab l5cc7: ld b,c ret l5cc9: ld b,e call l5dc0 ld a,b or a jr z,l5cc7 sub e ld e,b ld b,a add a,c add a,e jp m,l5cab call l5d84 jp l5d70 l5cdf: call l5df8 jr nc,l5ce8 call l5e8a xor a l5ce8: ld b,a call z,l5e11 jr nz,l5cfd call l5e8a inc b ld a,(l7597) or a jr z,l5cfd dec b inc a ld (l7597),a l5cfd: ld a,d and 2 jr z,l5d09 ld a,b inc b l5d04: dec b sub 4 jr nc,l5d04 l5d09: ld a,c or a jr z,l5d11 add a,e sub b ld e,a ld a,b l5d11: push af ld b,a call l5d55 pop af cp b jr z,l5d27 inc e inc hl dec b push hl ld a,(hl) cp '.' jr nz,l5d24 inc hl l5d24: ld (hl),'1' pop hl l5d27: ld a,4 call l5ddc push hl ld hl,l7591 call l6ed4 sbc a,a add a,'E' ld (hl),a inc hl ld (hl),'+' ld a,e or a jp p,l5d43 ld (hl),'-' xor a sub e l5d43: inc hl ld c,'/' l5d46: inc c sub 0ah jr nc,l5d46 ld (hl),c inc hl add a,':' ld (hl),a pop hl ret l5d52: call l5d84 l5d55: call l5e11 add a,b cp c jr nc,l5d61 call l5d98 jr l5d6b l5d61: cp 19h jr c,l5d67 ld a,18h l5d67: sub c call nz,l5ddc l5d6b: ld a,(l7597) or a ret z l5d70: ld c,'.' ld a,b l5d73: push bc ld b,a inc b add a,l ld l,a adc a,h sub l ld h,a l5d7b: dec hl ld a,c ld c,(hl) ld (hl),a dec b jr nz,l5d7b pop bc ret l5d84: ld a,e add a,c ld b,a ret p cpl inc a ld b,18h cp b jr nc,l5d90 ld b,a l5d90: dec hl ld (hl),'0' inc c dec b jr nz,l5d90 ret l5d98: ld c,a add a,l ld l,a adc a,h sub l ld h,a push hl push bc ld a,(hl) cp '5' call nc,l5db2 pop bc jr c,l5dae dec hl ld (hl),'1' inc b inc c l5dae: pop hl dec hl jr l5dce l5db2: ld a,c or a ret z dec hl dec c ld a,(hl) inc (hl) cp '9' ret c ld (hl),'0' jr l5db2 l5dc0: ld hl,l7595 l5dc3: dec hl ld a,(hl) cp '0' jr nz,l5dce dec c inc b jr nz,l5dc3 dec hl l5dce: push de push bc ld de,l7594 ld a,c call l6fab ; Move down ex de,hl inc hl pop bc pop de ret l5ddc: push de ex de,hl ld c,a ld a,e sub c ld l,a sbc a,a add a,d ld h,a push hl l5de6: ld a,(de) or a jr z,l5def inc de ld (hl),a inc hl jr l5de6 l5def: ld (hl),'0' inc hl dec c jr nz,l5def pop hl pop de ret l5df8: push bc ld a,d and 4 rra rra ld b,a ld a,d and 10h jr nz,l5e0b ld a,d add a,a or e jp p,l5e0b inc b l5e0b: ld a,(l7598) sub b pop bc ret l5e11: ld a,(l7597) or a ret z dec a ret l5e18: ld a,d and 2 ret z ld a,b l5e1d: sub 3 ret c ret z push af ld c,',' call l5d73 inc b pop af jr l5e1d l5e2b: push hl l5e2c: ld a,(hl) inc hl dec a cp '0' jr c,l5e2c inc a jr nz,l5e37 ld e,a l5e37: pop hl ld a,d xor 80h call p,l5df8 ret c ret z ld a,'0' jr l5e4a l5e44: ld a,d and 4 ret z ld a,'$' l5e4a: inc b dec hl ld (hl),a ret l5e4e: ld a,e ld c,'-' add a,a jr c,l5e62 ld a,d and 98h xor 80h ret z ld c,'+' and 8 jr nz,l5e62 ld c,' ' l5e62: ld a,d and 10h ld a,c jr z,l5e4a ld (l7595),a xor a ld (l7596),a ret l5e70: ld a,d or a ret p ld a,(l7598) sub b ret z jr c,l5e8a ld b,a ld a,d and ' ' ld a,'*' jr nz,l5e84 ld a,' ' l5e84: dec hl ld (hl),a dec b jr nz,l5e84 ret l5e8a: ld a,d or 1 ld d,a ret l5e8f: ld de,l756d xor a ld b,a l5e94: or (hl) dec hl jr nz,l5e9d dec c jr nz,l5e94 jr l5ec5 l5e9d: scf l5e9e: adc a,a jr nc,l5e9e ex de,hl push de ld d,a jr l5eb7 l5ea6: ld a,(de) dec de push de scf adc a,a l5eab: ld d,a ld e,b l5ead: ld a,(hl) adc a,a daa ld (hl),a inc hl dec e jr nz,l5ead jr nc,l5eba l5eb7: inc b ld (hl),1 l5eba: ld hl,l756d ld a,d add a,a jr nz,l5eab pop de dec c jr nz,l5ea6 l5ec5: ex de,hl ld hl,l7595 ld (hl),0 ld a,b add a,a ld c,a ret z l5ecf: ld a,(de) and 0fh add a,'0' dec hl ld (hl),a ld a,(de) and 0f0h rra rra rra rra add a,'0' dec hl ld (hl),a inc de dec b jr nz,l5ecf cp '0' ret nz dec c inc hl ret l5eeb: push de ex de,hl ld hl,l757e ld (hl),0 l5ef2: push af ld a,e and c or 0f0h daa add a,0a0h adc a,'@' dec hl ld (hl),a push bc l5eff: or a ld a,d rra ld d,a ld a,e rra ld e,a dec b jr nz,l5eff pop bc pop af sub 1 adc a,0 jr nz,l5ef2 ld a,d or e ld a,0 jr nz,l5ef2 pop de ret ; ; Function : PEEK(addr_expr) ; l5f19: call l6e31 call l59f4 ld a,(hl) jp l6e8f l5f23: call l1371 call l59f4 call l485a call l1341 ld (de),a ret l5f31: call l5f57 ld d,a ld e,0 jr z,l5f40 call l485a call l1341 ld e,a l5f40: in a,(c) xor e and d jr z,l5f40 ret ; ; Function : INP(port_expr) ; l5f47: call l6e31 ld b,h ld c,l in a,(c) jp l6e8f l5f51: call l5f57 out (c),a ret l5f57: call l1371 ld b,d ld c,e call l485a jp l1341 l5f62: ld hl,l7599 ld a,0ah l5f67: ld (hl),0cbh inc hl ld (hl),5fh inc hl dec a jr nz,l5f67 ret l5f71: call l4869 call l5fb6 push de call l485e call l1371 ex (sp),hl ld (hl),e inc hl ld (hl),d pop hl ret l5f84: call l59f4 call l5fb6 push de call l4852 call l13f2 call l4856 ex (sp),hl ld e,(hl) inc hl ld d,(hl) call l5f9d pop hl ret l5f9d: push de call l6ef6 call z,l6b07 call l6ec7 ld hl,l7602 ld e,(hl) inc hl ld d,(hl) dec hl cp 8 ret nz inc hl inc hl inc hl inc hl ret l5fb6: ld de,l7599 ld a,(hl) cp 18h ret nc sub 0eh ret c add a,a add a,99h ld e,a adc a,75h sub e ld d,a jp l4869 jp l0eaa l5fce: call l59f4 call l3f30 push hl ex de,hl call l6efc call l6e31 ld (l75ad),hl pop de ld hl,l0000 add hl,sp ld (l75b1),hl ld hl,lffc0 add hl,sp ld sp,hl ex de,hl ld b,' ' call l4884 jr c,l600f call l4852 l5ff7: push bc push de call l3f03 ex (sp),hl ld (hl),e inc hl ld (hl),d inc hl ex de,hl pop hl pop bc dec b jr z,l600c call l4888 jr c,l5ff7 l600c: call l4856 l600f: ld (l75af),hl ld a,' ' sub b jr z,l602c pop hl dec a jr z,l602c pop de dec a jr z,l602c pop bc dec a jr z,l602c push bc push hl ld hl,l0002 add hl,sp ld b,h ld c,l pop hl l602c: call l6037 ld hl,(l75b1) ld sp,hl ld hl,(l75af) ret l6037: push hl ld hl,(l75ad) ex (sp),hl ret l603d: ld a,2 call l03c4 jr l6047 l6044: call l6057 l6047: call l606d jr l6052 l604c: call l6057 l604f: call l62b6 l6052: ld a,3 jp l03c4 l6057: call l192f ld a,1 call l03c4 jp l4888 l6062: ld a,0fh jr l6069 l6066: call l134e l6069: ld (l75b3),a ret l606d: call l4884 jp c,l0472 l6073: cp 0e4h jp z,l6125 ex de,hl ld hl,l6089 call l6f5a ex de,hl call l6fb7 ; Execute ^DE call l4884 jr nc,l6073 ret l6089: db 4 dw l6098 db ',' dw l60c1 db 0dfh dw l60db db 0e1h dw l60e4 db ';' dw l4869 l6098: call l13f2 push af push hl call l6ef6 jr z,l60ae call l5c66 call l6710 ld (hl),' ' ld hl,(l7602) inc (hl) l60ae: ld hl,(l7602) ld a,(hl) call l051a call nc,l0472 call l674d pop hl pop af call z,l0472 ret l60c1: call l4869 ld a,(l75b3) ld c,a call l050a dec a l60cc: sub c jr nc,l60cc cpl inc a ld b,a add a,c call l051a jp nc,l0472 jr l60fa l60db: call l6104 call l6110 ld b,e jr l60fa l60e4: call l6104 dec de call l6110 call l050a cpl inc a inc e add a,e jr c,l60f9 call l0472 dec e ld a,e l60f9: ld b,a l60fa: inc b l60fb: dec b ret z ld a,' ' call l0478 jr l60fb l6104: call l4869 call l4852 call l1366 jp l4856 l6110: ld a,d rla jr nc,l6117 ld de,l0000 l6117: call l04f7 ret nc push hl ex de,hl ld e,a ld d,0 call l47af pop hl ret l6125: call l4869 call l1385 call l4862 db 03bh push hl ld hl,(l7602) ex (sp),hl call l13f2 l6137: ex (sp),hl ld b,(hl) inc hl ld e,(hl) inc hl ld d,(hl) dec hl dec hl ex (sp),hl call l6177 jp nc,l0eaa l6146: call l4884 jr c,l6167 call l619f jr z,l6167 call l13f2 ex (sp),hl ld a,(hl) sub b inc hl add a,(hl) ld e,a inc hl adc a,(hl) sub e ld d,a dec hl dec hl ex (sp),hl call l6177 jr nc,l6137 jr l6146 l6167: push af ld a,0ffh call l6178 pop af call c,l0472 ex (sp),hl call l6b15 pop hl ret l6177: xor a l6178: ld (l75b4),a ld a,b or a ret z push hl l617f: ld a,(de) cp 5fh jr nz,l618c inc de dec b jr nz,l6194 inc b dec de jr l6194 l618c: call l61a7 call nc,l61e0 jr c,l619d l6194: ld a,(de) call l0478 inc de dec b jr nz,l617f or a l619d: pop hl ret l619f: cp ';' jp z,l4869 jp l485a l61a7: ld c,0 ld a,(de) cp '&' jr z,l61cb inc c cp '!' jr z,l61cb xor 5ch ret nz push de push bc l61b8: inc de dec b jr z,l61c6 inc c ld a,(de) cp 5ch jr z,l61c9 cp ' ' jr z,l61b8 l61c6: or a jr l61dd l61c9: pop af pop af l61cb: inc de dec b push de push bc ld a,(l75b4) or a jr nz,l61dc call l675a ld b,c call l60fa l61dc: scf l61dd: pop bc pop de ret l61e0: call l61f7 ret nc ld a,(l75b4) or a jr nz,l61f5 push bc push de ld a,c call l5c67 call l0465 pop de pop bc l61f5: scf ret l61f7: push bc push de ld c,80h ld h,0 ld a,(de) cp '+' jr nz,l6209 inc de dec b jr z,l6229 inc h ld c,88h l6209: ld a,(de) cp '.' jr z,l622d cp '#' jr z,l624b inc de dec b jr z,l6229 ex de,hl cp (hl) ex de,hl jr nz,l6229 inc h inc h ld l,4 cp '$' jr z,l6246 ld l,' ' cp '*' jr z,l623a l6229: pop de pop bc or a ret l622d: inc de dec b jr z,l6229 ld a,(de) cp '#' jr nz,l6229 dec de inc b jr l624b l623a: inc de dec b jr z,l6248 ld a,(de) cp '$' jr nz,l6248 inc h ld l,'$' l6246: inc de dec b l6248: ld a,c or l ld c,a l624b: pop af pop af call l6258 ld a,h add a,l cp 19h ret c jp l0eaa l6258: ld l,0 inc b dec b ret z l625d: ld a,(de) cp '.' jr z,l6274 cp '#' jr z,l626e cp ',' jr nz,l627d ld a,c or 2 ld c,a l626e: inc h inc de dec b jr nz,l625d ret l6274: inc l inc de dec b ret z ld a,(de) cp '#' jr z,l6274 l627d: ex de,hl push hl cp 5eh jr nz,l629b inc hl cp (hl) jr nz,l629b inc hl cp (hl) jr nz,l629b inc hl cp (hl) jr nz,l629b inc hl ld a,b sub 4 jr c,l629b ld b,a ex (sp),hl ld a,c or '@' ld c,a l629b: pop hl ex de,hl ld a,b or a ret z ld a,c and 8 ret nz ld a,(de) cp '-' ld a,10h jr z,l62b1 ld a,(de) cp '+' ret nz ld a,18h l62b1: or c ld c,a inc de dec b ret l62b6: call l4884 jr c,l62eb l62bb: call l13f2 push af push hl call l6ef6 jr z,l62d0 call l5c59 call l6710 call l674d jr l62dd l62d0: ld a,'"' call l0478 call l674d ld a,'"' call l0478 l62dd: pop hl pop af jr z,l62eb call l619f ld a,',' call l0478 jr l62bb l62eb: call l03d5 call z,l1aaa jp l0472 l62f4: ld (l75bb),hl ld (l75dc),hl xor a ld (l75d1),a inc hl ld (l75bf),hl ld (l75c1),a ld hl,l760a ld de,l0200 call l657c call l6328 jr c,l634f call l658c ld hl,l780a ld (l75bd),hl ld a,(l6fc0) ld c,a ld b,0 ld hl,(l722c) jp l1787 ; Clear file pointers l6328: ld a,(l6fc0) ld hl,(l722c) call l1767 ; Init file space ret c ld de,l780a add hl,de ret c ld (l75c5),hl ld de,l012f add hl,de ret c ld (l75c7),hl ex de,hl ld hl,(l75bb) inc hl call l6f92 ; HL:=HL-DE ret c ld a,h cp 4 ret l634f: call l0eae ; Memory full db 7 l6353: push de push hl push af push bc call l63eb jr c,l634f ld de,l63c9 call l441a call l530b ld hl,(l7560) ex de,hl ld hl,(l75b9) add hl,de ex de,hl ld hl,(l75b7) ex de,hl add hl,de ld (l7560),hl ld a,d or e pop de jr z,l6384 ld hl,(l75d2) call l657c call l658c l6384: pop af ld c,a call l18d2 pop de ld hl,(l722c) call l6f7f ; HL:DE ld a,(l722b) jr z,l6399 call l18d1 xor a l6399: ld b,a push bc push de call l653b call l6502 call l6449 pop hl pop bc call l1787 ; Clear file pointers call l6554 call l651e pop hl ld (l75bb),hl ld a,(l75c4) ld (l75c1),a ex de,hl ld hl,(l75c2) ex de,hl inc hl call l6f92 ; HL:=HL-DE ld (l75bf),hl jp l29f3 l63c9: ld hl,(l75c9) call l6f85 ; HL:BC ld hl,(l75b5) jr c,l63e5 ld hl,(l75c7) call l6f85 ; HL:BC ld hl,(l75b7) jr nc,l63e5 add hl,bc ld b,h ld c,l ld hl,(l75b9) l63e5: add hl,bc ex de,hl ld (hl),d dec hl ld (hl),e ret l63eb: call l1767 ; Init file space ret c push de push hl ex de,hl ld hl,(l75bd) add hl,de ex de,hl ld hl,(l75c5) ex de,hl call l6f92 ; HL:=HL-DE ld (l75b9),hl pop hl pop de add hl,bc ret c push hl ld hl,(l75d4) ld a,c sub l ld l,a ld a,b sbc a,h ld h,a ld (l75b7),hl pop hl call l6478 add hl,bc ret c call l6489 add hl,bc ret c ld bc,l762a add hl,bc ret c push de push hl ld a,(l75c4) call l29e5 ld (l75c2),hl ld b,h ld c,l pop de pop hl ret c call l6f9e ; HL:=HL-BC ret c ex de,hl dec hl call l6f7f ; HL:DE ccf ret c ld hl,(l75dc) ex de,hl call l6f92 ; HL:=HL-DE ld (l75b5),hl or a ret l6449: ld hl,(l75b9) ld b,h ld c,l ld a,b rlca jr c,l6467 or c ret z ld hl,(l75cf) ex de,hl call l649f ld hl,(l75cf) ex de,hl dec hl dec de call l6478 jp l6fb1 ; Move down l6467: ld hl,(l75c5) ex de,hl call l649f ld hl,(l75c5) ex de,hl call l6478 jp l6fa8 ; Move up l6478: push hl ld hl,(l75c5) jr l6482 l647e: push hl ld hl,(l75bd) l6482: push de ex de,hl ld hl,(l75cf) jr l6492 l6489: push hl push de ld hl,(l75da) ex de,hl ld hl,(l75dc) l6492: call l6f96 ; BC:=HL-DE pop de pop hl ret l6498: ld hl,(l75bd) add hl,bc ld (l75bd),hl l649f: ld hl,(l75c5) add hl,bc ld (l75c5),hl ld hl,(l75c7) add hl,bc ld (l75c7),hl l64ad: ld hl,(l75c9) add hl,bc ld (l75c9),hl ld a,(l75d1) or a ret nz l64b9: ld hl,(l75cb) add hl,bc ld (l75cb),hl l64c0: ld hl,(l75cd) add hl,bc ld (l75cd),hl l64c7: ld hl,(l75cf) add hl,bc ld (l75cf),hl ret l64cf: push de ex de,hl ld hl,(l75c7) ld a,e sub l ld l,a ld a,d sbc a,h ld h,a pop de ret l64dc: call l663e ld b,h ld c,l ld hl,(l75c9) ex de,hl call l65fa ld a,0ffh ld (l75d1),a jr l64b9 l64ef: xor a ld (l75d1),a ld hl,(l75c9) ex de,hl ld hl,(l75cb) call l6f96 ; BC:=HL-DE call l6627 jr l64b9 l6502: ld hl,(l75dc) ex de,hl ld hl,(l75b5) ld a,h or a ret m or l ret z call l6489 add hl,de ld (l75dc),hl ex de,hl call l6fae ; Move down ex de,hl ld (l75da),hl ret l651e: ld hl,(l75da) ex de,hl ld hl,(l75b5) ld a,h or a ret p call l6489 add hl,de ld (l75da),hl ex de,hl inc hl inc de call l6fa5 ; Move up ex de,hl dec hl ld (l75dc),hl ret l653b: ld hl,(l75b7) ld b,h ld c,l ld a,b rlca ret nc ld hl,(l75bd) ex de,hl call l6498 ld hl,(l75bd) ex de,hl call l647e jp l6fa8 ; Move up l6554: ld hl,(l75b7) ld a,h rlca ret c or l ret z ld b,h ld c,l ld hl,(l75cf) ex de,hl call l6498 ld hl,(l75cf) ex de,hl call l647e dec hl dec de jp l6fb1 ; Move down l6571: ld hl,l0000 ld (l75d2),hl ld (l75d8),hl jr l659a l657c: ld (l75d2),hl ex de,hl ld (l75d4),hl add hl,de ld de,lfffa add hl,de ld (l75d8),hl ret l658c: ld hl,(l75d2) ld (l75d6),hl ld a,1 call l65af ld (hl),0 inc hl l659a: ld (l755c),hl jr l65ab l659f: ld hl,(l75d6) cpl inc a ret z add a,l ld l,a ld a,0ffh adc a,h ld h,a l65ab: ld (l75d6),hl ret l65af: ld hl,(l75d6) push hl add a,l ld l,a adc a,h sub l ld h,a ld (l75d6),hl ld a,(l75d9) sub h jp nz,l65c6 ld a,(l75d8) sub l l65c6: pop hl ret nc call l658c jp l634f l65ce: ld hl,(l75dc) ld (l75da),hl ret l65d5: ld b,0 l65d7: ld hl,(l75cf) ex de,hl ld hl,(l75da) call l6f9e ; HL:=HL-BC dec hl dec hl call l6f7f ; HL:DE jr nc,l65f1 call l6b73 jr c,l65d7 call l0eae ; String space full db 14 l65f1: ld (l75da),hl inc hl ld (hl),c inc hl ld (hl),b inc hl ret l65fa: call l6655 l65fd: push de push bc push hl push de add hl,bc jr c,l6612 ex de,hl l6605: call l6648 call l6f7f ; HL:DE jr nc,l6615 call l6b73 jr c,l6605 l6612: jp l634f l6615: pop bc pop hl push de ld a,l sub c ld c,a ld a,h sbc a,b ld b,a dec hl dec de call l6fae ; Move down pop hl pop bc pop de ret l6627: push bc push de ex de,hl add hl,bc ex de,hl call l6655 call l6f96 ; BC:=HL-DE ex de,hl pop de call l6fa5 ; Move up pop de ld hl,l0000 jp l6f96 ; BC:=HL-DE l663e: ld hl,(l75cf) ex de,hl ld hl,(l75da) jp l6f92 ; HL:=HL-DE l6648: ld a,(l75d1) or a ld hl,(l75da) ret z ld hl,(l75cb) dec hl ret l6655: ld a,(l75d1) or a ld hl,(l75cf) ret z ld hl,(l75c9) ret l6661: push hl call l18d1 call l0296 call l02b6 call l02c5 pop hl call l4884 ret c cp ',' call nz,l135d call l4888 ret nc l667c: call l6b73 ld a,(l75c1) ld (l75c4),a ex de,hl ld hl,(l75bb) ex de,hl ld a,(hl) cp ',' call nz,l1371 push de ex de,hl ld hl,(l75d4) ex de,hl call l4888 jr nc,l66a0 cp ',' call nz,l1371 l66a0: ld a,d or a jp z,l0eaa push de ld a,(l722b) ld d,a call l4888 jr nc,l66b6 cp ',' ld a,d call nz,l1341 ld d,a l66b6: push de ex de,hl ld hl,(l722c) ex de,hl call l4888 call c,l1371 call l487e call l64cf pop af pop bc ex (sp),hl ex de,hl call l6353 pop de ld hl,(l75c7) add hl,de ret l66d5: call l6b73 ld a,(hl) cp ',' ld a,(l75c1) call nz,l1341 ld (l75c4),a call l4888 call c,l1341 push hl ld a,(l722b) ld hl,(l75d4) ld b,h ld c,l ld hl,(l75bb) ex de,hl ld hl,(l722c) call l6353 pop hl ret l66ff: inc hl call l672d l6703: ld a,(hl) cp '"' jp z,l4869 or a jr z,l673d inc hl inc b jr l6703 l6710: call l672d l6713: ld a,(hl) or a ret z inc hl inc b jr l6713 l671a: call l672d ld c,a l671e: ld a,(hl) or a jr z,l673d cp c jr z,l673d cp ',' jr z,l673d inc hl inc b jr l671e l672d: ld (l75ff),hl pop de ld b,0 call l6fb7 ; Execute ^DE ld a,b ld (l75fe),a jp l6ae8 l673d: push hl inc b l673f: dec b jr z,l674b dec hl ld a,(hl) cp 0dh call nz,l6f51 ; Test delimiter blank, tab or new line jr z,l673f ; Yeap l674b: pop hl ret l674d: call l6b07 ret z l6751: ld a,(de) inc de call l0490 dec b jr nz,l6751 ret l675a: call l6b07 ret z ld a,c sub b jr nc,l6767 add a,b jr z,l6767 ld b,a xor a l6767: ld c,a jr l6751 ; ; Statement : STRIP$ (string_expr) ; l676a: call l6780 and 7fh ret ; ; Statement : LOWER$ (string_expr) ; l6770: call l6780 ; Get chacacter cp 'A' ; Test upper case ret c cp 'Z'+1 ret nc add a,'a'-'A' ; Convert it ret ; ; Statement : UPPER$ (string_expr) ; l677c: ld hl,l6f48 ; Set for conversion to upper case push hl l6780: ld hl,(l7602) call l6b07 call l6b50 inc hl ld c,(hl) inc hl ld h,(hl) ld l,c pop bc inc a l6790: dec a jp z,l6ae8 push af ld a,(hl) inc hl call l6fb5 ; Execute ^BC ld (de),a inc de pop af jr l6790 l679f: ex de,hl ld hl,(l7602) ex de,hl ld a,(de) add a,(hl) jr c,l67bd call l6b50 call l67da push de push bc ld c,b call l6ae8 call l67b9 pop bc pop hl l67b9: ld a,c jp l6fa2 ; Move up l67bd: call l0eae ; String too long db 15 l67c1: call l67da xor a l67c5: cp c jr z,l67d7 cp b jr z,l67d5 dec b dec c ld a,(de) inc de sub (hl) inc hl jr z,l67c5 sbc a,a ret nz l67d5: inc a ret l67d7: cp b sbc a,a ret l67da: call l6b07 ld c,b push de call l6b15 ex de,hl pop de ret ; ; Function : MKUK$ (expr) ; l67e5: call l6e2c xor a jr l67f2 ; ; Function : MKIK$ (expr) ; l67eb: ld a,2 call l6e45 ld a,80h l67f2: ld hl,(l7602) xor h ld h,l ld l,a ld (l7602),hl ; ; Function : MKI$ (expr) ; l67fb: ld a,2 jr l6805 ; ; Function : MKS$ (expr) ; l67ff: ld a,4 jr l6805 ; ; Function : MKD$ (expr) ; l6803: ld a,8 l6805: push af call l6e45 pop af call l6b50 ex de,hl call l6f13 jp l6ae8 ; ; Function : CVIK (string_expr) ; l6814: call l682d ld hl,(l7602) ld a,l xor 80h ld l,h jp l6e91 ; ; Function : CVUK (string_expr) ; l6821: call l682d ld hl,(l7602) ld a,l ld l,h ld h,a jp l6dd0 ; ; Function : CVI (string_expr) ; l682d: ld c,2 jr l6837 ; ; Function : CVS (string_expr) ; l6831: ld c,4 jr l6837 ; ; Function : CVD (string_expr) ; l6835: ld c,8 l6837: call l6b07 ex de,hl cp c jp z,l6efc l683f: jp l0eaa ; ; Function : OR ; l6842: ld bc,l0307 jr l684a ; ; Function : / ; l6847: ld bc,l040f l684a: push bc call l4852 call l13f2 ex de,hl call l6e31 ex de,hl call l4888 sbc a,a call c,l1341 cp 11h jr nc,l683f push af call l4856 pop af pop bc push hl ex de,hl call l5eeb jr l68a0 ; ; Function : - ; l686e: call l4852 call l13f2 call l485a call l6f04 call l137f call l4856 push hl ld a,c call l659f push de ld a,c call l6efc pop de ld a,b or a call nz,l61f7 jr nc,l683f ld a,b or a jr nz,l683f ld a,c call l5c67 jr l68a0 ; ; Function : STR$ (expr) ; l689c: push hl call l5c66 l68a0: push hl ld c,0ffh xor a l68a4: inc c cp (hl) inc hl jr nz,l68a4 ld a,c call l6ae5 pop hl call l6fa2 ; Move up pop hl ret l68b3: scf jr l68b7 l68b6: or a l68b7: push af call l3f03 call l6eee push hl ex de,hl call l6a70 ex (sp),hl call l485e call l137f ld a,b pop bc ex (sp),hl push hl ld l,c ld h,b ld c,a ld a,(hl) inc hl ld b,(hl) inc hl ld h,(hl) ld l,b ex de,hl cp c jr nc,l68dc ld c,a l68dc: sub c ld b,a pop af call c,l68e9 push bc ld a,c call l6fa2 ; Move up pop bc pop hl l68e9: ld a,' ' inc b l68ec: dec b ret z ld (de),a inc de jr l68ec ; ; Function : EQV ; l68f2: call l695f jr l690c ; ; Function : XOR ; l68f7: call l695f ld a,(de) sub b jr c,l690c ld c,a jr l690c l6901: call l695f jp z,l0eaa dec a ld c,a call l696e l690c: call l4856 push hl ex de,hl call l697d call l6b50 call l6b15 ex de,hl call l6ae8 ld b,0 add hl,bc jr l695a l6923: call l4852 call l3f03 call l6eee push hl ex de,hl call l6a70 ex (sp),hl call l6974 jp z,l0eaa dec a ld c,a call l696e call l4856 call l485e push bc call l137f ld a,b pop bc ex (sp),hl cp b jr nc,l694e ld b,a l694e: call l697d inc hl ld b,(hl) inc hl ld h,(hl) ld l,b ld b,0 add hl,bc ex de,hl l695a: call l6fa2 ; Move up pop hl ret l695f: call l4852 call l1385 ex de,hl ld hl,(l7602) ex de,hl ld c,0 jr l6974 l696e: ld b,0ffh ld a,(hl) cp ')' ret z l6974: call l485a call l1341 ld b,a or a ret l697d: ld a,(hl) sub c jr nc,l6982 xor a l6982: cp b ret c ld a,b ret ; ; Function : LEN (string_expr) ; l6986: call l6b07 jp l6e8f ; ; Function : ASC (string_expr) ; l698c: call l69ce jp l6e8f ; ; Function : CHR$ (string_expr) ; l6992: call l69f3 ; Get byte scf jr l699b ; ; Function : ^ ; l6998: call l0400 l699b: ld c,a sbc a,a and 1 jr l69a6 ; ; Function : SPACE$ (expr) ; l69a1: call l69f3 ; Get byte ld c,' ' l69a6: ld b,a call l6ae5 ld a,c inc b l69ac: dec b ret z ld (de),a inc de jr l69ac ; ; Token 0xff : ??? ; l69b2: call l4852 call l1341 push af call l485a call l13f2 call l4856 call l69c9 ld c,a pop af jr l69a6 l69c9: call l6ef6 jr nz,l69f3 ; Get byte l69ce: call l6b07 ld a,(de) ret nz jr l69fc ; ; Function : VAL (string_expr) ; l69d5: call l6b07 call l6ebd jp z,l6e78 ex de,hl push hl ld e,b ld d,0 add hl,de ld e,(hl) ld (hl),d ex (sp),hl push de call l5a04 pop de pop hl ld (hl),e ret c call l0eae ; Type mismatch db 13 ; ; Get byte ; l69f3: push hl call l6df6 ; Get integer ld a,h or a ; Verify byte ld a,l ; Get byte pop hl ret z ; Ok l69fc: jp l0eaa ; ; Function : AND ; l69ff: call l4852 call l13f2 call l6ef6 ld c,1 jr z,l6a1a call l69f3 ; Get byte or a jp z,l0eaa ld c,a call l485a call l1385 l6a1a: call l485a push hl ld hl,(l7602) ex (sp),hl call l137f call l4856 ex (sp),hl ld a,c ld c,b push de push af call l6b15 ex de,hl pop af ld e,a ld d,0 add hl,de dec hl ld a,b sub e inc a ld b,a ld a,e pop de jr c,l6a64 inc c dec c jr z,l6a65 l6a43: push af ld a,b cp c jr c,l6a63 push hl push de push bc l6a4b: ld a,(de) cp (hl) jr nz,l6a5a inc hl inc de dec c jr nz,l6a4b pop bc pop de pop hl pop af jr l6a65 l6a5a: pop bc pop de pop hl pop af inc a inc hl dec b jr l6a43 l6a63: pop af l6a64: xor a l6a65: call l6e8f pop hl ret l6a6a: ld de,l6ab8 jp l441a l6a70: push hl ld a,(hl) inc hl ld c,(hl) inc hl ld b,(hl) ex de,hl or a call nz,l6ab8 pop hl ret l6a7d: call l6b47 ret c call l6aa7 jp l6ae8 l6a87: ld hl,(l7602) call l6b31 dec hl dec hl ld a,b or a ret z push hl ld hl,(l75c7) call l6f7f ; HL:DE jr nc,l6aa5 ld hl,(l75c9) ex de,hl call l6f7f ; HL:DE call nc,l6b47 l6aa5: pop hl ret c l6aa7: ld a,(hl) call l6b50 ld a,(hl) inc hl ld c,(hl) inc hl ld h,(hl) ld l,c call l6fa2 ; Move up ld hl,l75fe ret l6ab8: ld hl,(l75c9) call l6f85 ; HL:BC ret c ld hl,(l75c7) call l6f85 ; HL:BC ret nc ex de,hl dec hl dec hl push hl call l6aa7 pop hl l6ace: ld a,(l75fe) ld (hl),a inc hl ex de,hl ld hl,(l75ff) ex de,hl ld (hl),e inc hl ld (hl),d inc hl ret l6add: ld hl,l75e0 ld (l75de),hl ret l6ae4: ld a,b l6ae5: call l6b50 l6ae8: push hl ld a,3 ld (l7601),a ld hl,(l75de) ld (l7602),hl ld de,l75fe call l6f7f ; HL:DE ld a,10h jp z,l0eb0 call l6ace ld (l75de),hl pop hl ret l6b07: push hl call l6eee ld hl,(l7602) call l6b15 pop hl ld a,b or a ret l6b15: call l6b31 ret nz ld a,b or a ret z ld hl,(l75da) inc hl inc hl inc hl call l6f7f ; HL:DE ret nz dec hl dec hl ld l,(hl) ld h,0 add hl,de dec hl ld (l75da),hl ret l6b31: ex de,hl ld hl,(l75de) dec hl dec hl dec hl call l6f7f ; HL:DE jr nz,l6b40 ld (l75de),hl l6b40: ex de,hl ld b,(hl) inc hl ld e,(hl) inc hl ld d,(hl) ret l6b47: ld hl,(l7602) ld de,l75fe jp l6f7f ; HL:DE l6b50: push hl push bc ld c,a or a call nz,l65d5 ld a,c ld (l75fe),a ld (l75ff),hl ex de,hl pop bc pop hl ret ; ; Function : FRE (0) ; FRE ("") ; l6b62: call l6ef6 jr nz,l6b6d call l6b07 call l6b73 l6b6d: call l663e jp l6dd0 l6b73: push hl push de push bc ld de,l75e0 jr l6b87 l6b7b: ex de,hl ld a,(hl) inc hl ld c,(hl) inc hl ld b,(hl) ex de,hl or a call nz,l6bf2 inc de l6b87: ld hl,(l75de) call l6f7f ; HL:DE jr nz,l6b7b ld de,l6bf2 call l441a ld hl,(l75dc) push hl ld hl,(l75da) inc hl ld e,l ld d,h jr l6bb6 l6ba1: ld c,(hl) inc hl ld b,(hl) inc b dec b jr z,l6bb4 dec hl ld a,(bc) ld c,a ld b,0 inc bc inc bc call l6fa8 ; Move up jr l6bb6 l6bb4: inc hl add hl,bc l6bb6: pop bc push bc call l6f85 ; HL:BC jr c,l6ba1 dec de ld hl,(l75da) ex de,hl call l6f96 ; BC:=HL-DE pop de call l6f7f ; HL:DE push af push de call l6fae ; Move down ex de,hl ld (l75da),hl pop bc inc hl jr l6be8 l6bd6: ld e,(hl) inc hl ld d,(hl) dec hl ld a,(de) ld (hl),a inc hl ld (hl),0 inc hl ex de,hl ld (hl),d dec hl ld (hl),e ld l,a ld h,0 add hl,de l6be8: call l6f85 ; HL:BC jr c,l6bd6 pop af pop bc pop de pop hl ret l6bf2: ld hl,(l75cf) call l6f85 ; HL:BC ret nc dec bc ld a,d ld (bc),a dec bc ld a,(bc) ld (de),a ld a,e ld (bc),a ret l6c02: call l6edb jp nc,l3221 call l473b ld (l7602),hl ld hl,l7603 ret l6c12: call l6e31 ld hl,l7603 jp l4741 l6c1b: call l6d5c jr nc,l6c28 call l475b jr c,l6c5e call l6db4 l6c28: call l3389 ret c l6c2c: jp l0f1b l6c2f: call l6d5c jr nc,l6c3c call l4763 jr c,l6c5e call l6db4 l6c3c: call l3385 ret c jr l6c2c l6c42: call l6d5c jr nc,l6c4f call l476c jr c,l6c5e call l6db4 l6c4f: call l35a0 ret c jr l6c2c l6c55: call l6d5c jp c,l480c jp l3898 l6c5e: ld (l7602),hl ret l6c62: call l6dac ex de,hl push de call l36b1 pop de push af ld a,c call l6fa2 ; Move up pop af ret c jp z,l0f12 jp l0f1b l6c78: call l6e03 ex de,hl call l479d jr c,l6c5e jr z,l6c92 ld hl,l8000 jp l6dd0 l6c89: call l6e03 ex de,hl call l47a4 jr c,l6c5e l6c92: call l0eae ; Division by zero db 11 l6c96: call l6e03 ld a,h and d ld h,a ld a,e and l l6c9e: ld l,a jr l6c5e l6ca1: ld b,0 l6ca3: call l6e03 ld a,d xor b or h ld h,a ld a,e xor b or l jr l6c9e l6caf: ld b,0ffh jr l6ca3 l6cb3: ld b,0 l6cb5: call l6e03 ld a,h xor d xor b ld h,a ld a,e xor l xor b jr l6c9e l6cc1: ld b,0ffh jr l6cb5 ; ; Get complement ; l6cc5: call l6df6 ; Get integer ld a,h cpl ld h,a ld a,l cpl jr l6c9e ; ; Function : ABS (expr) ; l6ccf: call l6ce3 ret p l6cd3: call l6edb jp nc,l38e0 call l47f7 ld (l7602),hl ret c jp l6dd0 l6ce3: push bc push hl call l6ceb pop hl pop bc ret l6ceb: call l6edb jp c,l4803 jp l38cf l6cf4: push hl ld a,c call l6efc pop de call l6edb ld a,b jr nc,l6d0b or a ret p call l6de3 call l6d13 jp l6df6 ; Get integer l6d0b: or a jr nz,l6d13 ld de,l31f3 jr l6d39 l6d13: push de push bc ld a,b call l32be call c,l31f3 ld a,b pop bc pop de jr nc,l6d29 call l31b5 xor a sub b jp l32be l6d29: ex de,hl jp l6eff ; ; Function : FIX (expr) ; l6d2d: ld de,l320b jr l6d35 ; ; Function : INT (expr) ; l6d32: ld de,l3216 l6d35: call l6edb ret c l6d39: call l6fb7 ; Execute ^DE ret nc ld a,(l7601) cp 8 call c,l6d4d ret c call l6ec1 ld a,b jp l31b5 l6d4d: ld a,c cp 3 ret nc ld a,(hl) inc hl ld h,(hl) ld l,a call l4748 ret nc jp l6e92 l6d5c: ld a,(l7601) cp c jr nz,l6d74 cp 3 jr c,l6d6d jr z,l6da9 ex de,hl ld hl,l7602 ret l6d6d: ld e,(hl) inc hl ld d,(hl) ld hl,(l7602) ret l6d74: jr nc,l6d90 push hl ld hl,l7601 ld (hl),c inc hl cp 3 jr c,l6d8a jr z,l6da9 ld b,a ld e,l ld d,h call l3128 jr l6d8d l6d8a: call l6dd5 l6d8d: pop de or a ret l6d90: ld b,c ld c,a ld a,b cp 3 jr c,l6da0 jr z,l6da9 ld e,l ld d,h call l3128 jr l6da4 l6da0: call l6dd5 ex de,hl l6da4: ld hl,l7602 or a ret l6da9: jp l6ef2 l6dac: ld a,(l7601) or c cp 2 jr nz,l6d5c l6db4: ld hl,(l7602) call l6de3 ld hl,(l75d6) call l6ddb ex de,hl ld hl,l7602 ret l6dc5: push de ex de,hl ld l,a add a,a sbc a,a ld h,a call l6ded pop de ret l6dd0: ld c,4 xor a jr l6de6 l6dd5: ld a,c cp 3 jp z,l6ef2 l6ddb: ld e,(hl) inc hl ld d,(hl) dec hl ex de,hl ld a,h jr l6ded l6de3: ld c,4 l6de5: ld a,h l6de6: ex de,hl ld hl,l7601 ld (hl),c inc hl ex de,hl l6ded: push af or a call m,l47f7 pop af jp l3186 ; ; Function : CINT (expr) ; l6df6: call l6dfc ret c jr l6e41 l6dfc: call l6e0e ld (l7602),hl ret l6e03: ld a,c call l6e15 ex de,hl call c,l6e0e ret c jr l6e41 l6e0e: ld hl,l7601 ld a,(hl) ld (hl),2 inc hl l6e15: cp 3 jr c,l6e27 jp z,l6ef2 push bc ld c,a call l31ca ld b,a call c,l4748 pop bc ret l6e27: ld a,(hl) inc hl ld h,(hl) ld l,a ret l6e2c: call l6ce3 jr c,l6e41 ; ; Function : UNT (addr_expr) ; l6e31: call l6edb ret c call l31ca jr nc,l6e41 ld b,a call m,l4748 jp c,l6e92 l6e41: call l0eae ; Overflow db 6 l6e45: push hl push de push bc ld hl,l7601 cp (hl) call nz,l6e53 pop bc pop de pop hl ret l6e53: sub 3 jr c,l6df6 jp z,l6eee dec a jr nz,l6e74 ; ; Function : CSNG (expr) ; l6e5d: ld b,4 l6e5f: call l6edb ld c,b jr c,l6de5 cp c ret z ld b,a dec hl ld (hl),c inc hl ld e,l ld d,h call l3128 ret c jp l0f1b ; ; Function : CDBL (expr) ; l6e74: ld b,8 jr l6e5f l6e78: push hl ld hl,l0000 ld (l7602),hl ld (l7602+2),hl ld (l7602+6),hl pop hl ret ; ; Function : SGN (expr) ; l6e87: call l6ce3 l6e8a: ld l,a add a,a sbc a,a jr l6e91 l6e8f: ld l,a xor a l6e91: ld h,a l6e92: ld (l7602),hl l6e95: ld a,2 l6e97: ld (l7601),a ret l6e9b: ld de,l7601 push de ld a,4 call l6fa2 ; Move up pop hl ld c,5 xor a call l31b5 ld a,0e0h call l3872 ld (hl),4 ret l6eb3: ld a,(l7601) cp 4 ret nc l6eb9: ld a,4 jr l6e97 l6ebd: ld a,8 jr l6e97 l6ec1: ld hl,l7601 ld c,(hl) inc hl ret l6ec7: ld a,(l7601) ret l6ecb: ld a,(l7601) cp 3 ret c cp 4 ret l6ed4: ld a,(l7601) cp 5 ccf ret l6edb: ld hl,l7601 ld a,(hl) cp 4 jr nc,l6eeb ld hl,(l7602) cp 3 ret c jr l6ef2 l6eeb: ld c,a inc hl ret l6eee: call l6ef6 ret z l6ef2: call l0eae ; Type mismatch db 13 l6ef6: ld a,(l7601) cp 3 ret l6efc: ld (l7601),a l6eff: ld de,l7602 jr l6f17 l6f04: push de push hl ld a,(l7601) ld c,a call l65af call l6f13 pop hl pop de ret l6f13: ex de,hl ld hl,l7602 l6f17: push bc ld a,(l7601) call l6fa2 ; Move up pop bc ret l6f20: push hl push bc ld hl,l7601 ld c,(hl) inc hl call l388f pop bc pop hl jp l0f1b ; ; Test character a letter - C set says yes ; l6f2f: call l6f48 ; Convert to upper case cp 'A' ccf ret nc cp 'Z'+1 ret ; ; Test character a digit, letter or dot - C set says yes ; l6f39: call l6f2f ; Test a letter ret c ; Yeap ; ; Test character a digit or dot - C set says yes ; l6f3d: cp '.' ; Test dot scf ret z ; ; Test character a digit - C set says yes ; l6f41: cp '0' ; Test it ccf ret nc cp '9'+1 ret ; ; Convert character to upper case ; l6f48: cp 'a' ; Test case ret c cp 'z'+1 ret nc sub 'a'-'A' ; Convert ret ; ; Test delimiter blank, tab or new line - Z set says yes ; l6f51: cp ' ' ; Test it ret z cp tab ret z cp lf ret l6f5a: push af push bc ld b,(hl) inc hl push hl l6f5f: inc hl inc hl cp (hl) inc hl jr z,l6f69 dec b jr nz,l6f5f ex (sp),hl l6f69: pop af ld a,(hl) inc hl ld h,(hl) ld l,a pop bc pop af ret l6f71: push bc ld c,a l6f73: ld a,(hl) or a jr z,l6f7c inc hl cp c jr nz,l6f73 scf l6f7c: ld a,c pop bc ret ; ; HL:DE ; l6f7f: ld a,h sub d ret nz ld a,l sub e ret ; ; HL:BC ; l6f85: ld a,h sub b ret nz ld a,l sub c ret ; ; DE:=HL-DE ; l6f8b: push hl or a sbc hl,de ex de,hl pop hl ret ; ; HL:=HL-DE ; l6f92: or a sbc hl,de ret ; ; BC:=HL-DE ; l6f96: push hl or a sbc hl,de ld c,l ld b,h pop hl ret ; ; HL:=HL-BC ; l6f9e: or a sbc hl,bc ret ; ; Move up HL->DE, A bytes, verify not zero length ; l6fa2: ld c,a ld b,0 ; ; Move up HL->DE, BC bytes, verify not zero length ; l6fa5: ld a,b or c ret z ; ; Move up HL->DE, BC bytes ; l6fa8: ldir ret ; ; Move down HL->DE, A bytes, verify not zero length ; l6fab: ld c,a ld b,0 ; ; Move down HL->DE, BC bytes, verify not zero length ; l6fae: ld a,b or c ret z ; ; Move down HL->DE, BC bytes ; l6fb1: lddr ret ; ; Jump thru HL ; l6fb4: jp (hl) ; ; Jump thru BC ; l6fb5: push bc ret ; ; Jump thru DE ; l6fb7: push de ret ; l6fb9: db 0 l6fba: dw 0 l6fbc: dw 0 l6fbe: dw 0 l6fc0: db 0 l6fc1:: ;; NOT USED nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop top:: ;; 7000h l7101 equ 7101h l7102 equ 7102h l7103 equ 7103h l7104 equ 7104h l7105 equ 7105h l7106 equ 7106h l7107 equ 7107h l7108 equ 7108h l7109 equ 7109h l710a equ 710ah l710b equ 710bh l7115 equ 7115h l7217 equ 7217h l7218 equ 7218h l7219 equ 7219h l721a equ 721ah l7220 equ 7220h l7229 equ 7229h l722b equ 722bh l722c equ 722ch l72e0 equ 72e0h l72e2 equ 72e2h ; Input file vector l72e4 equ 72e4h ; Output file vector l7315 equ 7315h l75bb equ 75bbh end