outp | addr | data (base 16) 0:0 | 0 | ; CURSORPOS: 2:0 | 2 | ; SHIFTDOWN: 3:0 | 3 | ; TESTCHAR: fc00:0 | fc00 | fc 20 ; PRINTCHAR fc02:0 | fc02 | fd 1b ; GETCHAR fc04:0 | fc04 | fc 92 ; PRINTSTRING fc06:0 | fc06 | fd 59 ; GETSTRING fc08:0 | fc08 | fc 9f ; PRINTHEX fc0a:0 | fc0a | fd 8e ; SLEEP fc20:0 | fc20 | ; PRINTCHAR: fc20:0 | fc20 | 48 ; PHA fc21:0 | fc21 | 54 ; PHX fc22:0 | fc22 | c9 0a ; CMP #$0A fc24:0 | fc24 | f0 1a ; BEQ PRINTCHAR_NL fc26:0 | fc26 | c9 0c ; CMP #$0C fc28:0 | fc28 | f0 3d ; BEQ PRINT_CLS fc2a:0 | fc2a | c9 08 ; CMP #$08 fc2c:0 | fc2c | f0 28 ; BEQ BACKSPACE fc2e:0 | fc2e | a6 00 ; LDX CURSORPOS fc30:0 | fc30 | c1 ; STA X+ fc31:0 | fc31 | 86 00 ; STX CURSORPOS fc33:0 | fc33 | a5 01 ; LDA CURSORPOS+1 fc35:0 | fc35 | d0 06 ; BNE PRINTCHAR_RETURN fc37:0 | fc37 | a5 00 ; LDA CURSORPOS fc39:0 | fc39 | c9 c4 ; CMP #SCREEN_CHAR_OVFPG fc3b:0 | fc3b | f0 2f ; BEQ SCROLLUP fc3d:0 | fc3d | ; PRINTCHAR_RETURN: fc3d:0 | fc3d | 74 ; PLX fc3e:0 | fc3e | 68 ; PLA fc3f:0 | fc3f | 60 ; RTS fc40:0 | fc40 | ; PRINTCHAR_NL: fc40:0 | fc40 | a5 01 ; LDA CURSORPOS+1 fc42:0 | fc42 | 29 c0 ; AND #$100-SCREEN_WIDTH fc44:0 | fc44 | c9 c0 ; CMP #$100-SCREEN_WIDTH fc46:0 | fc46 | d0 06 ; BNE NOSCROLLUP fc48:0 | fc48 | a5 00 ; LDA CURSORPOS fc4a:0 | fc4a | c9 c3 ; CMP #SCREEN_CHAR_MAXPG fc4c:0 | fc4c | f0 1e ; BEQ SCROLLUP fc4e:0 | fc4e | ; NOSCROLLUP: fc4e:0 | fc4e | 6b 40 ; ADD #$40 fc50:0 | fc50 | 47 00 ; ICC CURSORPOS fc52:0 | fc52 | 85 01 ; STA CURSORPOS+1 fc54:0 | fc54 | 98 e7 ; BRA PRINTCHAR_RETURN fc56:0 | fc56 | ; BACKSPACE: fc56:0 | fc56 | a5 01 ; LDA CURSORPOS+1 fc58:0 | fc58 | 29 3f ; AND #SCREEN_WIDTH-1 fc5a:0 | fc5a | f0 e1 ; BEQ PRINTCHAR_RETURN fc5c:0 | fc5c | a6 00 ; LDX CURSORPOS fc5e:0 | fc5e | e8 ff ; ADX #-1 fc60:0 | fc60 | 86 00 ; STX CURSORPOS fc62:0 | fc62 | a9 00 ; LDA #$00 fc64:0 | fc64 | 81 ; STA X fc65:0 | fc65 | 98 d6 ; BRA PRINTCHAR_RETURN fc67:0 | fc67 | ; PRINT_CLS: fc67:0 | fc67 | 20 fc a0 ; JSR CLEARSCREEN fc6a:0 | fc6a | 98 d1 ; BRA PRINTCHAR_RETURN fc6c:0 | fc6c | ; SCROLLUP: fc6c:0 | fc6c | 14 ; PHY fc6d:0 | fc6d | 48 ; PHA fc6e:0 | fc6e | 5c ; PHB fc6f:0 | fc6f | 1c ; PHC fc70:0 | fc70 | aa c0 00 ; LDX #SCREEN_CHAR fc73:0 | fc73 | a8 c0 40 ; LDY #SCREEN_CHAR+SCREEN_WIDTH fc76:0 | fc76 | 2b 0f ; LDC #SCREEN_HEIGHT-1 fc78:0 | fc78 | ; SCROLLUP_LPOUT: fc78:0 | fc78 | ab 40 ; LDB #SCREEN_WIDTH fc7a:0 | fc7a | ; SCROLLUP_LPIN: fc7a:0 | fc7a | f1 ; LDA Y+ fc7b:0 | fc7b | c1 ; STA X+ fc7c:0 | fc7c | de ; DEC B fc7d:0 | fc7d | d0 fb ; BNE SCROLLUP_LPIN fc7f:0 | fc7f | da ; DEC C fc80:0 | fc80 | d0 f6 ; BNE SCROLLUP_LPOUT fc82:0 | fc82 | 86 00 ; STX CURSORPOS fc84:0 | fc84 | a9 00 ; LDA #$00 fc86:0 | fc86 | ab 40 ; LDB #SCREEN_WIDTH fc88:0 | fc88 | ; SCROLLUP_LPC: fc88:0 | fc88 | c1 ; STA X+ fc89:0 | fc89 | de ; DEC B fc8a:0 | fc8a | d0 fc ; BNE SCROLLUP_LPC fc8c:0 | fc8c | 3c ; PLC fc8d:0 | fc8d | 7c ; PLB fc8e:0 | fc8e | 68 ; PLA fc8f:0 | fc8f | 34 ; PLY fc90:0 | fc90 | 98 ab ; BRA PRINTCHAR_RETURN fc92:0 | fc92 | ; PRINTSTRING: fc92:0 | fc92 | 48 ; PHA fc93:0 | fc93 | 54 ; PHX fc94:0 | fc94 | ; PRINTSTRING_LOOP: fc94:0 | fc94 | e1 ; LDA X+ fc95:0 | fc95 | f0 05 ; BEQ PRINTSTRING_DONE fc97:0 | fc97 | 20 fc 20 ; JSR PRINTCHAR fc9a:0 | fc9a | 98 f8 ; BRA PRINTSTRING_LOOP fc9c:0 | fc9c | ; PRINTSTRING_DONE: fc9c:0 | fc9c | 74 ; PLX fc9d:0 | fc9d | 68 ; PLA fc9e:0 | fc9e | 60 ; RTS fc9f:0 | fc9f | ; PRINTHEX: fc9f:0 | fc9f | 60 ; RTS fca0:0 | fca0 | ; CLEARSCREEN: fca0:0 | fca0 | 54 ; PHX fca1:0 | fca1 | 14 ; PHY fca2:0 | fca2 | 48 ; PHA fca3:0 | fca3 | 5c ; PHB fca4:0 | fca4 | 1c ; PHC fca5:0 | fca5 | aa c0 00 ; LDX #SCREEN_CHAR fca8:0 | fca8 | a8 c8 00 ; LDY #SCREEN_COLOR fcab:0 | fcab | a9 10 ; LDA #SCREEN_HEIGHT fcad:0 | fcad | 85 00 ; STA CURSORPOS fcaf:0 | fcaf | a9 00 ; LDA #0 fcb1:0 | fcb1 | ab 26 ; LDB #SCREEN_BLACK fcb3:0 | fcb3 | ; CLSLPOUT: fcb3:0 | fcb3 | 2b 40 ; LDC #SCREEN_WIDTH fcb5:0 | fcb5 | ; CLSLPIN: fcb5:0 | fcb5 | c1 ; STA X+ fcb6:0 | fcb6 | d3 ; STB Y+ fcb7:0 | fcb7 | da ; DEC C fcb8:0 | fcb8 | d0 fb ; BNE CLSLPIN fcba:0 | fcba | c6 00 ; DEC CURSORPOS fcbc:0 | fcbc | d0 f5 ; BNE CLSLPOUT fcbe:0 | fcbe | aa c0 00 ; LDX #SCREEN_CHAR fcc1:0 | fcc1 | 86 00 ; STX CURSORPOS fcc3:0 | fcc3 | 3c ; PLC fcc4:0 | fcc4 | 7c ; PLB fcc5:0 | fcc5 | 68 ; PLA fcc6:0 | fcc6 | 34 ; PLY fcc7:0 | fcc7 | 74 ; PLX fcc8:0 | fcc8 | 60 ; RTS fcc9:0 | fcc9 | ; WAITKEY: fcc9:0 | fcc9 | 20 fd 8e ; JSR SLEEP fccc:0 | fccc | ; GETKEY: fccc:0 | fccc | ed f1 00 ; LDA KEYBOARD fccf:0 | fccf | f0 f8 ; BEQ WAITKEY fcd1:0 | fcd1 | 60 ; RTS fcd2:0 | fcd2 | ; KEY_SYMBOLS: fcd2:0 | fcd2 | 30 30 29 31 31 21 32 32 40 33 33 23 34 34 24 35 35 25 36 36 5e 37 37 26 38 38 2a 39 39 28 ; "00)11!22@33#44$55%66^77&88*99(" fcf0:0 | fcf0 | 18 3b 3a 19 3d 2b 1a 2c 3c 1b 2e 3e 1c 2d 5f 1d 2f 3f 1e 60 7e ; "\x18;:\x19=+\x1A,<\x1B.>\x1C-_\x1D/?\x1E`~" fd05:0 | fd05 | 3c 5b 7b 3d 5c 7c 3e 5d 7d 3f 27 22 ; "\x3C[{\x3D\\|\x3E]}\x3F'\x22" fd11:0 | fd11 | 0d 0a 0a ; "\x0d\x0A\x0A" fd14:0 | fd14 | 20 20 20 08 08 08 ; " \x08\x08\x08" fd1a:0 | fd1a | 00 ; "\0" fd1b:0 | fd1b | ; GETCHAR: fd1b:0 | fd1b | 5c ; PHB fd1c:0 | fd1c | ; GETCHAR_RESTART: fd1c:0 | fd1c | 20 fc cc ; JSR GETKEY fd1f:0 | fd1f | b7 ; TAB fd20:0 | fd20 | 29 7b ; AND #$7B fd22:0 | fd22 | c9 10 ; CMP #$10 fd24:0 | fd24 | f0 2c ; BEQ SHIFTKEY fd26:0 | fd26 | 97 ; TBA fd27:0 | fd27 | c9 80 ; CMP #$80 fd29:0 | fd29 | 90 f1 ; BLT GETCHAR_RESTART fd2b:0 | fd2b | 29 7f ; AND #$7F fd2d:0 | fd2d | c9 41 ; CMP #$41 fd2f:0 | fd2f | 90 04 ; BLT NOT_LETTER fd31:0 | fd31 | c9 5a ; CMP #$5A fd33:0 | fd33 | 10 1b ; BLE GETCHAR_RETURN fd35:0 | fd35 | ; NOT_LETTER: fd35:0 | fd35 | 54 ; PHX fd36:0 | fd36 | aa fc d2 ; LDX #KEY_SYMBOLS fd39:0 | fd39 | ; KEY_SYM_LP: fd39:0 | fd39 | e3 ; LDB X+ fd3a:0 | fd3a | f0 11 ; BEQ KEY_SYM_DONE fd3c:0 | fd3c | ; KEY_SYM_CONTINUE: fd3c:0 | fd3c | dd ; CMP B fd3d:0 | fd3d | f0 04 ; BEQ KEY_SYM_MATCH fd3f:0 | fd3f | e8 02 ; ADX #2 fd41:0 | fd41 | 98 f6 ; BRA KEY_SYM_LP fd43:0 | fd43 | ; KEY_SYM_MATCH: fd43:0 | fd43 | a7 02 ; LDB SHIFTDOWN fd45:0 | fd45 | f0 02 ; BEQ KEY_SYM_NOSHIFT fd47:0 | fd47 | e8 01 ; ADX #1 fd49:0 | fd49 | ; KEY_SYM_NOSHIFT: fd49:0 | fd49 | a1 ; LDA X fd4a:0 | fd4a | 74 ; PLX fd4b:0 | fd4b | 98 03 ; BRA GETCHAR_RETURN fd4d:0 | fd4d | ; KEY_SYM_DONE: fd4d:0 | fd4d | 74 ; PLX fd4e:0 | fd4e | 98 cc ; BRA GETCHAR_RESTART fd50:0 | fd50 | ; GETCHAR_RETURN: fd50:0 | fd50 | 7c ; PLB fd51:0 | fd51 | 60 ; RTS fd52:0 | fd52 | ; SHIFTKEY: fd52:0 | fd52 | 97 ; TBA fd53:0 | fd53 | 29 80 ; AND #$80 fd55:0 | fd55 | 85 02 ; STA SHIFTDOWN fd57:0 | fd57 | 98 c3 ; BRA GETCHAR_RESTART fd59:0 | fd59 | ; GETSTRING: fd59:0 | fd59 | 48 ; PHA fd5a:0 | fd5a | 54 ; PHX fd5b:0 | fd5b | ; GETSTRING_LOOP: fd5b:0 | fd5b | 20 fd 1b ; JSR GETCHAR fd5e:0 | fd5e | 20 fc 20 ; JSR PRINTCHAR fd61:0 | fd61 | c1 ; STA X+ fd62:0 | fd62 | c9 08 ; CMP #$08 fd64:0 | fd64 | d0 02 ; BNE GETSTRING_NOBK fd66:0 | fd66 | e8 fe ; ADX #-2 fd68:0 | fd68 | ; GETSTRING_NOBK: fd68:0 | fd68 | c9 0a ; CMP #$0A fd6a:0 | fd6a | d0 ef ; BNE GETSTRING_LOOP fd6c:0 | fd6c | e8 ff ; ADX #-1 fd6e:0 | fd6e | a9 00 ; LDA #$00 fd70:0 | fd70 | 81 ; STA X fd71:0 | fd71 | 74 ; PLX fd72:0 | fd72 | 68 ; PLA fd73:0 | fd73 | 60 ; RTS fd74:0 | fd74 | ; STRCMP: fd74:0 | fd74 | 54 ; PHX fd75:0 | fd75 | 14 ; PHY fd76:0 | fd76 | 48 ; PHA fd77:0 | fd77 | 5c ; PHB fd78:0 | fd78 | ; STRCMP_NEXTCHAR: fd78:0 | fd78 | e1 ; LDA X+ fd79:0 | fd79 | f0 08 ; BEQ STRCMP_XOVER fd7b:0 | fd7b | f3 ; LDB Y+ fd7c:0 | fd7c | f0 08 ; BEQ STRCMP_YOVER fd7e:0 | fd7e | dd ; CMP B fd7f:0 | fd7f | f0 f7 ; BEQ STRCMP_NEXTCHAR fd81:0 | fd81 | 98 06 ; BRA STRCMP_RETURN fd83:0 | fd83 | ; STRCMP_XOVER: fd83:0 | fd83 | b1 ; LDA Y fd84:0 | fd84 | 98 03 ; BRA STRCMP_RETURN fd86:0 | fd86 | ; STRCMP_YOVER: fd86:0 | fd86 | e8 ff ; ADX #-1 fd88:0 | fd88 | a1 ; LDA X fd89:0 | fd89 | ; STRCMP_RETURN: fd89:0 | fd89 | 7c ; PLB fd8a:0 | fd8a | 68 ; PLA fd8b:0 | fd8b | 34 ; PLY fd8c:0 | fd8c | 74 ; PLX fd8d:0 | fd8d | 60 ; RTS fd8e:0 | fd8e | ; SLEEP: fd8e:0 | fd8e | cd f0 05 ; STA TIMER fd91:0 | fd91 | 18 ; HLT fd92:0 | fd92 | 60 ; RTS fd93:0 | fd93 | ; STR_HI: fd93:0 | fd93 | 48 49 00 ; "HI\0" fd96:0 | fd96 | ; STR_HIRES: fd96:0 | fd96 | 48 45 4c 4c 4f 21 0a 00 ; "HELLO!\n\0" fd9e:0 | fd9e | ; RESET: fd9e:0 | fd9e | 20 fc a0 ; JSR CLEARSCREEN fda1:0 | fda1 | 58 ; CLI fda2:0 | fda2 | ; INPUTLP: fda2:0 | fda2 | aa 02 00 ; LDX #$0200 fda5:0 | fda5 | 20 fd 59 ; JSR GETSTRING fda8:0 | fda8 | a8 fd 93 ; LDY #STR_HI fdab:0 | fdab | 20 fd 74 ; JSR STRCMP fdae:0 | fdae | d0 f2 ; BNE INPUTLP fdb0:0 | fdb0 | aa fd 96 ; LDX #STR_HIRES fdb3:0 | fdb3 | 20 fc 92 ; JSR PRINTSTRING fdb6:0 | fdb6 | 98 ea ; BRA INPUTLP fdb8:0 | fdb8 | 18 ; HLT fdb9:0 | fdb9 | 41 ; RST fdba:0 | fdba | ; INTERRUPT: fdba:0 | fdba | 38 ; RUN fdbb:0 | fdbb | 40 ; RTI fffc:0 | fffc | fd 9e ; RESET fffe:0 | fffe | fd ba ; INTERRUPT