scan.lst 6/2/2021 4:48 pm 1 ; monitor program for tms9995

40
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 ; Monitor program for TMS9995 Microprocessor Kit 2021 ; ; (C) 2021 by Wichit Sirichote, [email protected] ; source code was compiled with c32 cross assembler ; rev.1.0 May, 2021 ; ; 0000 cpu "tms9900.tbl" ;processor table 0000 hof "int8" ;hex format 0000 = R0: EQU 0 ;REGISTER 0001 = R1: EQU 1 ;REGISTER 0002 = R2: EQU 2 ;REGISTER 0003 = R3: EQU 3 ;REGISTER 0004 = R4: EQU 4 ;REGISTER 0005 = R5: EQU 5 ;REGISTER 0006 = R6: EQU 6 ;REGISTER 0007 = R7: EQU 7 ;REGISTER 0008 = R8: EQU 8 ;REGISTER 0009 = R9: EQU 9 ;REGISTER 000A = R10: EQU 10 ;REGISTER 000B = R11: EQU 11 ;REGISTER 000C = R12: EQU 12 ;REGISTER 000D = R13: EQU 13 ;REGISTER 000E = R14: EQU 14 ;REGISTER 000F = R15: EQU 15 ;REGISTER ;****************************************************** ; 7000 = gpio1 equ 7000h FFFC = wsp_nmi_vector equ 0fffch FFFE = nmi_vector equ 0fffeh ; LCD registers 7200 = command_write equ 7200h 7202 = command_read equ 7202h 7201 = data_write equ 7201h 7203 = data_read equ 7203h ; UART registers 7300 = uart_buffer: equ 7300h 7305 = uart_line_status: equ 7305h 7302 = uart_fifo: equ 7302h 7303 = uart_lcr: equ 7303h 7304 = uart_mcr: equ 7304h ; out1 bit 2 controls speaker 7300 = uart_divisor_lsb: equ 7300h 7301 = uart_divisor_msb: equ 7301h 7307 = uart_scr: equ 7307h ; 7-segment and keyboard 7100 = port0: equ 7100h ; kin 7101 = port1: equ 7101h ; digit 7102 = port2: equ 7102h ; segment 000D = cr: equ 13 000A = lf: equ 10 SCAN.LST 6/2/2021 4:48 PM Page 1 of 40

Upload: others

Post on 18-Dec-2021

1 views

Category:

Documents


0 download

TRANSCRIPT

123456789

10111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364

; Monitor program for TMS9995 Microprocessor Kit 2021; ; (C) 2021 by Wichit Sirichote, [email protected]; source code was compiled with c32 cross assembler; rev.1.0 May, 2021 ;;

0000 cpu "tms9900.tbl" ;processor table0000 hof "int8" ;hex format

0000 = R0: EQU 0 ;REGISTER0001 = R1: EQU 1 ;REGISTER0002 = R2: EQU 2 ;REGISTER0003 = R3: EQU 3 ;REGISTER0004 = R4: EQU 4 ;REGISTER0005 = R5: EQU 5 ;REGISTER0006 = R6: EQU 6 ;REGISTER0007 = R7: EQU 7 ;REGISTER0008 = R8: EQU 8 ;REGISTER0009 = R9: EQU 9 ;REGISTER000A = R10: EQU 10 ;REGISTER000B = R11: EQU 11 ;REGISTER000C = R12: EQU 12 ;REGISTER000D = R13: EQU 13 ;REGISTER000E = R14: EQU 14 ;REGISTER000F = R15: EQU 15 ;REGISTER

;******************************************************;

7000 = gpio1 equ 7000h

FFFC = wsp_nmi_vector equ 0fffchFFFE = nmi_vector equ 0fffeh

; LCD registers

7200 = command_write equ 7200h7202 = command_read equ 7202h7201 = data_write equ 7201h7203 = data_read equ 7203h

; UART registers

7300 = uart_buffer: equ 7300h7305 = uart_line_status: equ 7305h7302 = uart_fifo: equ 7302h7303 = uart_lcr: equ 7303h7304 = uart_mcr: equ 7304h ; out1 bit 2 controls speaker7300 = uart_divisor_lsb: equ 7300h7301 = uart_divisor_msb: equ 7301h7307 = uart_scr: equ 7307h

; 7-segment and keyboard

7100 = port0: equ 7100h ; kin7101 = port1: equ 7101h ; digit7102 = port2: equ 7102h ; segment

000D = cr: equ 13000A = lf: equ 10

SCAN.LST 6/2/2021 4:48 PM

Page 1 of 40

6566676869707172737475767778798081828384858687888990919293949596979899

100101102103104105106107108109110111112113114115116117118119120121122123124125126127128

8000 = cold_pc equ 8000h

0000 org 0000h

; interrupt vector can be added below, will need reprogram the new rom

0000 F0300800 level0 dwm system_wps, start ; reset vector

0004 E000E020 level1 dwm wplevel1, level1_service ;wpsx1, xint1_service ; 0008 E024E044 level2 dwm wplevel2, level2_service000C E048E068 level3 dwm wplevel3, level3_service0010 E06CE08C level4 dwm wplevel4, level4_service

;*********** software interrupt *****************************

0040 org 0040h0040 F0501702 xop0_ dwm wps1, xop0_service0044 F0B0171C xop1_ dwm wps2, xop1_service ; simple delay

; xop2 to xop7 for future system call

; xop 8-15 relocated to external RAM space for user testing

0060 org 0060h

0060 E090E0B0 xop8_ dwm wpxop8, xop8_service ; for XOP 8, uses RAM vector 0064 E0B4E0D4 xop9_ dwm wpxop9, xop9_service0068 E0D8E0F8 xop10_ dwm wpxop10, xop10_service006C E0FCE11C xop11_ dwm wpxop11, xop11_service0070 E120E140 xop12_ dwm wpxop12, xop12_service0074 E144E164 xop13_ dwm wpxop13, xop13_service0078 E168E188 xop14_ dwm wpxop14, xop14_service007C E18CE1AC xop15_ dwm wpxop15, xop15_service

;************************************************************

0800 org 0800h ; start tms9995 montior program

0800 04C0 start clr r00802 D8007102 movb r0,@port2 ; turn off display

0806 0200FF00 li r0,0ff00h080A D8007000 movb r0,@gpio1 ; test gpio1 led

080E 020003E8 li r0, 1000 ; power up delay0812 0600 power_up dec r00814 16FE jne power_up

; init work space for nmi, load nmi vector; NMI is placed in RAM

0816 0200F090 li r0,wps_nmi081A C800FFFC mov r0,@wsp_nmi_vector081E 02001726 li r0,nmi_service0822 C800FFFE mov r0,@nmi_vector

; insert level1, INT1 vector in RAM

SCAN.LST 6/2/2021 4:48 PM

Page 2 of 40

129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192

; li r0,0460h ; insert branch instruction 0460 ; mov r0,@level1_service; li r0,xint1_service; mov r0,@level1_service+2

; init cold PC

0826 C020F0EE mov @warm_boot,r0082A 02807FFE ci r0,7FFEh082E 1308 jeq warm_reset

0830 cold_reset

0830 02007FFE li r0,7FFEh0834 C800F0EE mov r0,@warm_boot0838 04E0F0EC clr @no_beep083C 06A0136E bl @beep

0840 warm_reset

0840 02008000 li r0,cold_pc0844 C800F0E2 mov r0,@user_PC

0848 04E0F0E4 clr @state ; standby state=0084C 04E0F0EA clr @counter ; counter = 0 0850 04E0F0F8 clr @sign ; plus

0854 06A008DC bl @init_uart

0858 02021730 li r2,title1085C 06A0092A bl @put_str

0860 04E07000 clr @gpio1

0864 06A01486 bl @new_line

0868 06A00BDA bl @copy_cold_tbl

086C D0207202 movb @command_read,r00870 02408000 andi r0,8000h0874 1602 jne no_lcd_connected

0876 06A01414 bl @test_lcd

087A no_lcd_connected:

;=============================== main ==========================================

087A main_loop087A 06A00992 bl @scan_key087E 06A0136E bl @beep0882 06A00BF4 bl @key_execute

0886 10F9 jmp main_loop

;===============================================================================

; test code at initial hardware testing

SCAN.LST 6/2/2021 4:48 PM

Page 3 of 40

193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256

0888 02020060 repeat li r2,96088C 02002000 li r0,2000h

0890 C0C0 test1 mov r0,r3

0892 D8007000 movb r0,@gpio1

0896 06A00906 bl @cout

089A 02040F00 li r4,0f00h089E D8047304 movb r4,@uart_mcr

08A2 06A008D2 bl @delay

08A6 02040000 li r4,008AA D8047304 movb r4,@uart_mcr

08AE C003 mov r3,r008B0 02200100 ai r0,0100h

08B4 0602 dec r208B6 16EC jne test108B8 04600888 b @repeat

08BC 06A0091A loop bl @cin08C0 D8007000 movb r0,@gpio1

08C4 06A00906 bl @cout

08C8 046008BC b @loop

08CC 02010001 hello li r1,108D0 0380 rtwp

08D2 02010BB8 delay li r1,300008D6 0601 delay1 dec r108D8 16FE jne delay1

; b *r1108DA 045B rt ; return to main with *r11

; UART drivers ; initialize 16c550 uart to 9600 8n1 with 2MHz clock; 2MHz/13 = 153846Hz, serial speed will be 9615

08DC init_uart:

08DC 02008300 li r0,8300h08E0 D8007303 movb r0,@uart_lcr

08E4 02000D00 li r0,0d00h08E8 D8007300 movb r0,@uart_divisor_lsb

; 2mhz/13 = 153846 hz

08EC 02000000 li r0,008F0 D8007301 movb r0,@uart_divisor_msb ; 153846hz/16 = 9615hz

; init fifo and clear all buffers

SCAN.LST 6/2/2021 4:48 PM

Page 4 of 40

257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320

08F4 02000700 li r0,0700h08F8 D8007302 movb r0,@uart_fifo

; clar dlab08FC 02000300 li r0,0300h0900 D8007303 movb r0,@uart_lcr

0904 045B rt

; cout writes character to terminal; entry: r0 ; used: r0, r1

0906 C040 cout: mov r0,r1 ; save r0

0908 D0207305 cout1: movb @uart_line_status,r0090C 02402000 andi r0,2000h ; transmitter ready?0910 13FB jeq cout1

0912 C001 mov r1,r0 ; restore r00914 D8007300 movb r0,@uart_buffer ; write r00918 045B rt

; cin gets charcater from terminal; exit: r0

091A D0207305 cin: movb @uart_line_status,r0091E 02400100 andi r0,0100h ; data available?0922 13FB jeq cin0924 D0207300 movb @uart_buffer,r00928 045B rt

; print string terminated by 0; entry: r2 pointed to string

092A C012 put_str: mov *r2,r0 ; get a from *r2092C 02800000 ci r0,00930 1601 jne put_str10932 045B rt

0934 C28B put_str1: mov r11,r100936 06A00906 bl @cout093A C2CA mov r10,r11093C 05C2 inct r2093E 10F5 jmp put_str

; scan display 1 cycle; entry: r2 pointer; exit: key = -1 no pressed; key = scan code, key pressed

0940 02070008 scan: li r7,80944 02061832 li r6,digit_tbl0948 02090000 li r9,0 ; key position = 0094C 0720F0D0 seto @key ; key status = -1

0950 scan1:0950 D8167101 movb *r6,@port1 ; write digit0954 D8127102 movb *r2,@port2 ; write segment

SCAN.LST 6/2/2021 4:48 PM

Page 5 of 40

321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384

0958 02010064 li r1,100095C 0601 led_delay: dec r1095E 16FE jne led_delay

0960 04C0 clr r0 ; turn off display0962 D8007102 movb r0,@port2

; now scan key board

0966 02080008 li r8,8096A D0207100 movb @port0,r0 ; read input port096E chk_key:096E 0A10 sla r0,10970 1802 joc next_key0972 D809F0D0 movb r9,@key

0976 02290100 next_key: ai r9,0100h097A 0608 dec r8097C 16F8 jne chk_key

097E 05C6 inct r60980 05C2 inct r2

0982 0607 dec r70984 16E5 jne scan1

0986 045B rt

0988 0201001E debounce li r1,30098C 0601 bounce dec r1098E 16FE jne bounce0990 045B rt ; return to main with *r11

; scan_key scan display and keyboard until pressed

0992 C28B scan_key: mov r11,r10 ; save return address

0994 0202F0D2 scan_key1 li r2,buffer ; r2 pointed to buffer memory0998 06A00940 bl @scan099C C020F0D0 mov @key,r009A0 0280FFFF ci r0,-109A4 16F7 jne scan_key1 ; while key was pressed, repeat it

09A6 06A00988 bl @debounce ; until settled

09AA 0202F0D2 no_press li r2,buffer09AE 06A00940 bl @scan09B2 C020F0D0 mov @key,r009B6 0280FFFF ci r0,-109BA 13F7 jeq no_press ; if no press, repeat it

09BC 06A00988 bl @debounce

09C0 0202F0D2 li r2,buffer ; now read again09C4 06A00940 bl @scan

09C8 06A009D0 bl @convert_key ; convert position code to internal code

; movb @key,r0 ; for checking key code; movb r0,@gpio1

09CC C2CA mov r10,r11 ; restore return address

SCAN.LST 6/2/2021 4:48 PM

Page 6 of 40

385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448

09CE 045B rt

test_key: macro scan_code,hex_key

ci r0,scan_codejne $+12li r0,hex_keymovb r0,@keyrt

endm

; convert scan code into hex key; entry: key (scan code); exit: key (hex key)

09D0 convert_key:

09D0 D020F0D0 movb @key,r009D4 0240FF00 andi r0,0ff00h

; ci r0,1300h ; using macro for simple coding; jne key1; li r0,0; movb r0,@key; rt;;key1 ci r0,2c00h; jne $+12; li r0,0100h; movb r0,@key; rt;;key2 ci r0,2400h; jne key3; li r0,0200h; movb r0,@key; rt

;key3 ci r0,1c00h; jne $+12; li r0,0300h; movb r0,@key; rt

09D8 test_key 1300h,0000h ; test_key scan_code, hex_key

09D8 02801300 ci r0,1300H09DC 1605 jne $+1209DE 02000000 li r0,0000H09E2 D800F0D0 movb r0,@key09E6 045B rt

09E8 endm09E8 test_key 2c00h,0100h

09E8 02802C00 ci r0,2C00H09EC 1605 jne $+1209EE 02000100 li r0,0100H09F2 D800F0D0 movb r0,@key09F6 045B rt

SCAN.LST 6/2/2021 4:48 PM

Page 7 of 40

449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512

09F8 endm09F8 test_key 2400h,0200h

09F8 02802400 ci r0,2400H09FC 1605 jne $+1209FE 02000200 li r0,0200H0A02 D800F0D0 movb r0,@key0A06 045B rt

0A08 endm0A08 test_key 1c00h,0300h

0A08 02801C00 ci r0,1C00H0A0C 1605 jne $+120A0E 02000300 li r0,0300H0A12 D800F0D0 movb r0,@key0A16 045B rt

0A18 endm

0A18 test_key 1b00h,0400h

0A18 02801B00 ci r0,1B00H0A1C 1605 jne $+120A1E 02000400 li r0,0400H0A22 D800F0D0 movb r0,@key0A26 045B rt

0A28 endm0A28 test_key 2d00h,0500h

0A28 02802D00 ci r0,2D00H0A2C 1605 jne $+120A2E 02000500 li r0,0500H0A32 D800F0D0 movb r0,@key0A36 045B rt

0A38 endm0A38 test_key 2500h,0600h

0A38 02802500 ci r0,2500H0A3C 1605 jne $+120A3E 02000600 li r0,0600H0A42 D800F0D0 movb r0,@key0A46 045B rt

0A48 endm0A48 test_key 1d00h,0700h

0A48 02801D00 ci r0,1D00H0A4C 1605 jne $+120A4E 02000700 li r0,0700H0A52 D800F0D0 movb r0,@key0A56 045B rt

0A58 endm

0A58 test_key 2300h,0800h

0A58 02802300 ci r0,2300H0A5C 1605 jne $+120A5E 02000800 li r0,0800H0A62 D800F0D0 movb r0,@key0A66 045B rt

SCAN.LST 6/2/2021 4:48 PM

Page 8 of 40

513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576

0A68 endm0A68 test_key 2e00h,0900h

0A68 02802E00 ci r0,2E00H0A6C 1605 jne $+120A6E 02000900 li r0,0900H0A72 D800F0D0 movb r0,@key0A76 045B rt

0A78 endm0A78 test_key 2600h,0a00h

0A78 02802600 ci r0,2600H0A7C 1605 jne $+120A7E 02000A00 li r0,0A00H0A82 D800F0D0 movb r0,@key0A86 045B rt

0A88 endm0A88 test_key 1e00h,0b00h

0A88 02801E00 ci r0,1E00H0A8C 1605 jne $+120A8E 02000B00 li r0,0B00H0A92 D800F0D0 movb r0,@key0A96 045B rt

0A98 endm

0A98 test_key 2b00h,0c00h

0A98 02802B00 ci r0,2B00H0A9C 1605 jne $+120A9E 02000C00 li r0,0C00H0AA2 D800F0D0 movb r0,@key0AA6 045B rt

0AA8 endm0AA8 test_key 2f00h,0d00h

0AA8 02802F00 ci r0,2F00H0AAC 1605 jne $+120AAE 02000D00 li r0,0D00H0AB2 D800F0D0 movb r0,@key0AB6 045B rt

0AB8 endm0AB8 test_key 2700h,0e00h

0AB8 02802700 ci r0,2700H0ABC 1605 jne $+120ABE 02000E00 li r0,0E00H0AC2 D800F0D0 movb r0,@key0AC6 045B rt

0AC8 endm0AC8 test_key 1f00h,0f00h

0AC8 02801F00 ci r0,1F00H0ACC 1605 jne $+120ACE 02000F00 li r0,0F00H0AD2 D800F0D0 movb r0,@key0AD6 045B rt

SCAN.LST 6/2/2021 4:48 PM

Page 9 of 40

577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640

0AD8 endm

0AD8 test_key 2a00h,1000h

0AD8 02802A00 ci r0,2A00H0ADC 1605 jne $+120ADE 02001000 li r0,1000H0AE2 D800F0D0 movb r0,@key0AE6 045B rt

0AE8 endm0AE8 test_key 2200h,1100h

0AE8 02802200 ci r0,2200H0AEC 1605 jne $+120AEE 02001100 li r0,1100H0AF2 D800F0D0 movb r0,@key0AF6 045B rt

0AF8 endm0AF8 test_key 1a00h,1200h

0AF8 02801A00 ci r0,1A00H0AFC 1605 jne $+120AFE 02001200 li r0,1200H0B02 D800F0D0 movb r0,@key0B06 045B rt

0B08 endm0B08 test_key 3900h,1300h

0B08 02803900 ci r0,3900H0B0C 1605 jne $+120B0E 02001300 li r0,1300H0B12 D800F0D0 movb r0,@key0B16 045B rt

0B18 endm

0B18 test_key 1700h,1400h

0B18 02801700 ci r0,1700H0B1C 1605 jne $+120B1E 02001400 li r0,1400H0B22 D800F0D0 movb r0,@key0B26 045B rt

0B28 endm0B28 test_key 1600h,1500h

0B28 02801600 ci r0,1600H0B2C 1605 jne $+120B2E 02001500 li r0,1500H0B32 D800F0D0 movb r0,@key0B36 045B rt

0B38 endm0B38 test_key 1500h,1600h

0B38 02801500 ci r0,1500H0B3C 1605 jne $+120B3E 02001600 li r0,1600H0B42 D800F0D0 movb r0,@key

SCAN.LST 6/2/2021 4:48 PM

Page 10 of 40

641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704

0B46 045B rt

0B48 endm0B48 test_key 1400h,1700h

0B48 02801400 ci r0,1400H0B4C 1605 jne $+120B4E 02001700 li r0,1700H0B52 D800F0D0 movb r0,@key0B56 045B rt

0B58 endm

0B58 test_key 0f00h,1800h

0B58 02800F00 ci r0,0F00H0B5C 1605 jne $+120B5E 02001800 li r0,1800H0B62 D800F0D0 movb r0,@key0B66 045B rt

0B68 endm0B68 test_key 0e00h,1900h

0B68 02800E00 ci r0,0E00H0B6C 1605 jne $+120B6E 02001900 li r0,1900H0B72 D800F0D0 movb r0,@key0B76 045B rt

0B78 endm0B78 test_key 0d00h,2000h

0B78 02800D00 ci r0,0D00H0B7C 1605 jne $+120B7E 02002000 li r0,2000H0B82 D800F0D0 movb r0,@key0B86 045B rt

0B88 endm0B88 test_key 0c00h,2100h

0B88 02800C00 ci r0,0C00H0B8C 1605 jne $+120B8E 02002100 li r0,2100H0B92 D800F0D0 movb r0,@key0B96 045B rt

0B98 endm

0B98 test_key 0700h,2200h

0B98 02800700 ci r0,0700H0B9C 1605 jne $+120B9E 02002200 li r0,2200H0BA2 D800F0D0 movb r0,@key0BA6 045B rt

0BA8 endm0BA8 test_key 0600h,2300h

0BA8 02800600 ci r0,0600H0BAC 1605 jne $+120BAE 02002300 li r0,2300H

SCAN.LST 6/2/2021 4:48 PM

Page 11 of 40

705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768

0BB2 D800F0D0 movb r0,@key0BB6 045B rt

0BB8 endm0BB8 test_key 0500h,2400h

0BB8 02800500 ci r0,0500H0BBC 1605 jne $+120BBE 02002400 li r0,2400H0BC2 D800F0D0 movb r0,@key0BC6 045B rt

0BC8 endm0BC8 test_key 0400h,2500h

0BC8 02800400 ci r0,0400H0BCC 1605 jne $+120BCE 02002500 li r0,2500H0BD2 D800F0D0 movb r0,@key0BD6 045B rt

0BD8 endm0BD8 045B rt

; copy cold boot text;

0BDA copy_cold_tbl0BDA 02001842 li r0,cold_tbl0BDE 0201F0D2 li r1,buffer0BE2 CC70 mov *r0+,*r1+0BE4 CC70 mov *r0+,*r1+0BE6 CC70 mov *r0+,*r1+0BE8 CC70 mov *r0+,*r1+0BEA CC70 mov *r0+,*r1+0BEC CC70 mov *r0+,*r1+0BEE CC70 mov *r0+,*r1+0BF0 CC70 mov *r0+,*r1+0BF2 045B rt

; execute key 0-F or 10H-19H

0BF4 D020F0D0 key_execute: movb @key,r00BF8 0240FF00 andi r0,0ff00h

0BFC 02801000 ci r0,1000h 0C00 1402 jhe function_key ; 0-9 jump to data key0C02 04600F36 b @data_key

0C06 02801400 function_key: ci r0,1400h0C0A 1602 jne function10C0C 04600D24 b @key_PC

0C10 02802100 function1 ci r0,2100h0C14 1602 jne function20C16 04600D42 b @key_inc

0C1A 02802000 function2 ci r0,2000h0C1E 1602 jne function30C20 04600DAC b @key_dec

0C24 02801700 function3 ci r0,1700h0C28 1602 jne function40C2A 04600DE8 b @key_address

SCAN.LST 6/2/2021 4:48 PM

Page 12 of 40

769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832

0C2E 02801600 function4 ci r0,1600h0C32 1602 jne function50C34 04600E62 b @key_data

0C38 02802400 function5 ci r0,2400h0C3C 1602 jne function60C3E 04600EDC b @key_test

0C42 02801200 function6 ci r0,1200h0C46 1602 jne function70C48 0460149C b @key_dump

0C4C 02801300 function7 ci r0,1300h0C50 1602 jne function80C52 04601542 b @key_load

0C56 02802500 function8 ci r0,2500h ; key GO0C5A 163F jne function9

; key GO serves many functions, including key CAL and COPY;

0C5C C020F0E4 mov @state,r00C60 02800005 ci r0,50C64 1614 jne check_state8

; state=5 for key CAL

0C66 C020F0F0 mov @stack,r00C6A C060F0F2 mov @stack+2,r1

0C6E C0A0F0F8 mov @sign,r20C72 0282FFFF ci r2,-10C76 1302 jeq minus

0C78 A001 a r1,r0

0C7A 1001 jmp skip_minus0C7C minus0C7C 6001 s r1,r0

0C7E skip_minus0C7E C040 mov r0,r1

0C80 C800F0F0 mov r0,@stack ; save result to top of stack

0C84 C28B mov r11,r10

0C86 06A00FDE bl @put_data1

0C8A C2CA mov r10,r11

0C8C 045B rt

0C8E 02800008 check_state8 ci r0,80C92 1618 jne normal_run

; state=8 for key copy; entry: stack = start address; statck+2 = end address; statck+4 = destination

0C94 C020F0F0 mov @stack,r00C98 C060F0F2 mov @stack+2,r1

SCAN.LST 6/2/2021 4:48 PM

Page 13 of 40

833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896

0C9C C0A0F0F4 mov @stack+4,r2

0CA0 6040 s r0,r1

0CA2 0911 srl r1,1 ; get word counting

0CA4 C490 copy_memory mov *r0,*r2

0CA6 05C0 inct r00CA8 05C2 inct r2

0CAA 0601 dec r10CAC 16FB jne copy_memory

0CAE C020F0F4 mov @stack+4,r00CB2 C800F0E2 mov r0,@user_pc

0CB6 C28B mov r11,r10

0CB8 06A00F8C bl @read_memory0CBC 06A00E62 bl @key_data

0CC0 C2CA mov r10,r11

0CC2 045B rt

0CC4 normal_run

; load user work space, and user program

0CC4 0200F000 li r0,user_wps0CC8 C800F022 mov r0,@jump_vector_wp

0CCC C020F0E2 mov @user_PC,r00CD0 C800F024 mov r0,@jump_vector_pc

0CD4 0420F022 blwp @jump_vector_wp; come back with old return

0CD8 045B rt

0CDA 02801100 function9 ci r0,1100h0CDE 1602 jne function100CE0 04601624 b @key_cal

0CE4 02802200 function10 ci r0,2200h0CE8 1602 jne function110CEA 0460169C b @key_insert

0CEE 02802300 function11 ci r0,2300h0CF2 1602 jne function120CF4 046016CA b @key_delete

0CF8 02801500 function12 ci r0,1500h0CFC 1602 jne function130CFE 04600EE0 b @key_reg

0D02 02801900 function13 ci r0,1900h0D06 1603 jne function14

SCAN.LST 6/2/2021 4:48 PM

Page 14 of 40

897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960

0D08 0560F0EC inv @no_beep ; toggle no_beep flag0D0C 045B rt

0D0E 02801000 function14 ci r0,1000h0D12 1602 jne function150D14 04601662 b @key_copy

0D18 02801800 function15 ci r0,1800h ; key USER is 18 for internal code0D1C 1602 jne function160D1E 04600F20 b @key_user ; jump to USER key service

0D22 function160D22 045B rt

; ..................... function keys ..............................

0D24 02008000 key_PC li r0,cold_pc0D28 C800F0E2 mov r0,@user_PC

0D2C 02000001 li r0,10D30 C800F0E4 mov r0,@state

0D34 C28B mov r11,r100D36 06A00F8C bl @read_memory0D3A 06A00E62 bl @key_data0D3E C2CA mov r10,r11

0D40 045B rt

0D42 C020F0E4 key_inc mov @state,r00D46 02800000 ci r0,00D4A 1B01 jh valid_inc0D4C 045B rt

0D4E valid_inc

0D4E 02800004 ci r0,40D52 1608 jne key_inc1

0D54 02000005 li r0,50D58 C800F0E4 mov r0,@state ; set state=50D5C 04C0 clr r00D5E C800F0F8 mov r0,@sign ; will be addition, sign = 0

0D62 045B rt

0D64 02800006 key_inc1 ci r0,60D68 1609 jne key_inc2

0D6A 02000007 li r0,70D6E C800F0E4 mov r0,@state

0D72 02008F00 li r0,8f00h0D76 C800F0E0 mov r0,@buffer+14

0D7A 045B rt

0D7C 02800007 key_inc2 ci r0,70D80 1609 jne key_inc3

0D82 02000008 li r0,8

SCAN.LST 6/2/2021 4:48 PM

Page 15 of 40

961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999

1000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024

0D86 C800F0E4 mov r0,@state

0D8A 0200B300 li r0,0b300h0D8E C800F0E0 mov r0,@buffer+14

0D92 045B rt

0D94 key_inc3

0D94 C020F0E2 mov @user_PC,r00D98 05C0 inct r0,0D9A C800F0E2 mov r0,@user_PC

0D9E C28B mov r11,r100DA0 06A00F8C bl @read_memory0DA4 06A00E62 bl @key_data0DA8 C2CA mov r10,r110DAA 045B rt

0DAC C020F0E4 key_dec mov @state,r00DB0 02800000 ci r0,00DB4 1B01 jh valid_dec

0DB6 045B rt

0DB8 valid_dec

0DB8 02800004 ci r0,40DBC 1609 jne key_dec1

0DBE 02000005 li r0,50DC2 C800F0E4 mov r0,@state ; set state=50DC6 0200FFFF li r0,-10DCA C800F0F8 mov r0,@sign ; will be substract, sign = -1

0DCE 045B rt

0DD0 key_dec10DD0 C020F0E2 mov @user_PC,r00DD4 0640 dect r0,0DD6 C800F0E2 mov r0,@user_PC

0DDA C28B mov r11,r100DDC 06A00F8C bl @read_memory0DE0 06A00E62 bl @key_data0DE4 C2CA mov r10,r110DE6 045B rt

0DE8 C020F0E4 key_address mov @state,r00DEC 02800000 ci r0,00DF0 1601 jne skip_address0DF2 045B rt

0DF4 skip_address0DF4 02000001 li r0,10DF8 C800F0E4 mov r0,@state ; state=1 address entry mode0DFC 04E0F0EA clr @counter

0E00 key_address10E00 C020F0DA mov @buffer+8,r00E04 02604000 ori r0,4000h0E08 C800F0DA mov r0,@buffer+8

SCAN.LST 6/2/2021 4:48 PM

Page 16 of 40

1025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088

0E0C C020F0DC mov @buffer+10,r00E10 02604000 ori r0,4000h0E14 C800F0DC mov r0,@buffer+10

0E18 C020F0DE mov @buffer+12,r00E1C 02604000 ori r0,4000h0E20 C800F0DE mov r0,@buffer+12

0E24 C020F0E0 mov @buffer+14,r00E28 02604000 ori r0,4000h0E2C C800F0E0 mov r0,@buffer+14

0E30 C020F0D2 mov @buffer,r00E34 0240BFFF andi r0,~4000h0E38 C800F0D2 mov r0,@buffer

0E3C C020F0D4 mov @buffer+2,r00E40 0240BFFF andi r0,~4000h0E44 C800F0D4 mov r0,@buffer+2

0E48 C020F0D6 mov @buffer+4,r00E4C 0240BFFF andi r0,~4000h0E50 C800F0D6 mov r0,@buffer+4

0E54 C020F0D8 mov @buffer+6,r00E58 0240BFFF andi r0,~4000h0E5C C800F0D8 mov r0,@buffer+6

0E60 045B rt

0E62 C020F0E4 key_data mov @state,r00E66 02800000 ci r0,00E6A 1601 jne skip_data0E6C 045B rt

0E6E skip_data

0E6E 02000002 li r0,20E72 C800F0E4 mov r0,@state ; state=2 data entry mode

0E76 04E0F0EA clr @counter

0E7A C020F0D2 key_data1 mov @buffer,r00E7E 02604000 ori r0,4000h0E82 C800F0D2 mov r0,@buffer

0E86 C020F0D4 mov @buffer+2,r00E8A 02604000 ori r0,4000h0E8E C800F0D4 mov r0,@buffer+2

0E92 C020F0D6 mov @buffer+4,r00E96 02604000 ori r0,4000h0E9A C800F0D6 mov r0,@buffer+4

0E9E C020F0D8 mov @buffer+6,r00EA2 02604000 ori r0,4000h0EA6 C800F0D8 mov r0,@buffer+6

0EAA C020F0DA mov @buffer+8,r00EAE 0240BFFF andi r0,~4000h0EB2 C800F0DA mov r0,@buffer+8

SCAN.LST 6/2/2021 4:48 PM

Page 17 of 40

1089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152

0EB6 C020F0DC mov @buffer+10,r00EBA 0240BFFF andi r0,~4000h0EBE C800F0DC mov r0,@buffer+10

0EC2 C020F0DE mov @buffer+12,r00EC6 0240BFFF andi r0,~4000h0ECA C800F0DE mov r0,@buffer+12

0ECE C020F0E0 mov @buffer+14,r00ED2 0240BFFF andi r0,~4000h0ED6 C800F0E0 mov r0,@buffer+14

0EDA 045B rt

0EDC 04601600 key_test b @test_tick

0EE0 02000003 key_reg li r0,30EE4 C800F0E4 mov r0,@state ; state=3 for key register0EE8 04C0 clr r00EEA C800F0D2 mov r0,@buffer0EEE 04C0 clr r00EF0 C800F0D4 mov r0,@buffer+20EF4 04C0 clr r00EF6 C800F0D6 mov r0,@buffer+40EFA 04C0 clr r00EFC C800F0D8 mov r0,@buffer+6

0F00 02000300 li r0,0300h0F04 C800F0E0 mov r0,@buffer+140F08 02008F00 li r0,8f00h0F0C C800F0DE mov r0,@buffer+120F10 0200AD00 li r0,0ad00h0F14 C800F0DC mov r0,@buffer+100F18 04C0 clr r00F1A C800F0DA mov r0,@buffer+8

0F1E 045B rt

; divided by 2; will be used for relative word finding;

0F20 C020F0F0 key_user mov @stack,r0 ; top of stack0F24 0810 sra r0,1 ; divided by 2 from byte length to word 0F26 C800F0F0 mov r0,@stack

0F2A C040 mov r0,r1

0F2C C28B mov r11,r10

0F2E 06A00FDE bl @put_data1

0F32 C2CA mov r10,r11

0F34 045B rt

;************* check state for entry mode of hex keys ***************; state = 0 standby ; state = 1 address entry; state = 2 data entry; state = 3 register select; state = 4 CAL mode, get number1; state = 5 get number2

SCAN.LST 6/2/2021 4:48 PM

Page 18 of 40

1153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216

;

0F36 C020F0E4 data_key mov @state,r00F3A 02800002 ci r0,20F3E 1602 jne data_key10F40 04601026 b @enter_data

0F44 02800001 data_key1 ci r0,10F48 1602 jne data_key20F4A 0460105A b @enter_address

0F4E 02800003 data_key2 ci r0,30F52 1602 jne data_key30F54 0460108E b @register_select

0F58 02800004 data_key3 ci r0,40F5C 1602 jne data_key40F5E 046012D8 b @enter_number1

0F62 02800005 data_key4 ci r0,50F66 1602 jne data_key50F68 046012F6 b @enter_number2

0F6C 02800006 data_key5 ci r0,60F70 1602 jne data_key60F72 04601314 b @enter_start_address

0F76 02800007 data_key6 ci r0,70F7A 1602 jne data_key70F7C 04601332 b @enter_end_address

0F80 02800008 data_key7 ci r0,80F84 1602 jne data_key80F86 04601350 b @enter_destination

0F8A data_key8

0F8A 045B rt

; read_memory converts address and data to seven segment display buffer

0F8C C020F0E2 read_memory: mov @user_PC,r0 ; put even address

0F90 C040 mov r0,r1

0F92 C081 mov r1,r20F94 0242000F andi r2,000fh0F98 0A12 sla r2,1 0F9A C0221812 mov @hex_tbl(r2),r00F9E C800F0DA mov r0,@buffer+8

0FA2 C081 mov r1,r20FA4 024200F0 andi r2,00f0h0FA8 0942 srl r2,40FAA 0A12 sla r2,10FAC C0221812 mov @hex_tbl(r2),r00FB0 C800F0DC mov r0,@buffer+0ah

0FB4 C081 mov r1,r20FB6 02420F00 andi r2,0f00h0FBA 0982 srl r2,80FBC 0A12 sla r2,10FBE C0221812 mov @hex_tbl(r2),r00FC2 C800F0DE mov r0,@buffer+0ch

SCAN.LST 6/2/2021 4:48 PM

Page 19 of 40

1217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280

0FC6 C081 mov r1,r20FC8 0242F000 andi r2,0f000h0FCC 09C2 srl r2,120FCE 0A12 sla r2,10FD0 C0221812 mov @hex_tbl(r2),r00FD4 C800F0E0 mov r0,@buffer+0eh

; read 16-bit data

0FD8 C020F0E2 mov @user_PC,r0

; put 16-bit data in r0 to 4-digit data display

0FDC C050 put_data mov *r0,r1

0FDE put_data1 ; will be used by CAL key 0FDE C081 mov r1,r20FE0 0242000F andi r2,000fh0FE4 0A12 sla r2,1 0FE6 C0221812 mov @hex_tbl(r2),r00FEA C800F0D2 mov r0,@buffer

0FEE C081 mov r1,r20FF0 024200F0 andi r2,00f0h0FF4 0942 srl r2,40FF6 0A12 sla r2,10FF8 C0221812 mov @hex_tbl(r2),r00FFC C800F0D4 mov r0,@buffer+2

1000 C081 mov r1,r21002 02420F00 andi r2,0f00h1006 0982 srl r2,81008 0A12 sla r2,1100A C0221812 mov @hex_tbl(r2),r0100E C800F0D6 mov r0,@buffer+4

1012 C081 mov r1,r21014 0242F000 andi r2,0f000h1018 09C2 srl r2,12101A 0A12 sla r2,1101C C0221812 mov @hex_tbl(r2),r01020 C800F0D8 mov r0,@buffer+6

1024 045B rt

1026 C020F0EA enter_data: mov @counter,r0102A 02800000 ci r0,0102E 1B05 jh next_data1030 05A0F0EA inc @counter 1034 C020F0E2 mov @user_PC,r01038 04D0 clr *r0

103A C020F0E2 next_data mov @user_PC,r0103E C090 mov *r0,r21040 0A42 sla r2,41042 C0E0F0D0 mov @key,r31046 0883 sra r3,81048 A083 a r3,r2104A C402 mov r2,*r0

104C C28B mov r11,r10104E 06A00F8C bl @read_memory1052 06A00E7A bl @key_data1

SCAN.LST 6/2/2021 4:48 PM

Page 20 of 40

1281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344

1056 C2CA mov r10,r11

1058 045B rt

105A C020F0EA enter_address: mov @counter,r0105E 02800000 ci r0,01062 1B04 jh next_address1064 05A0F0EA inc @counter 1068 04E0F0E2 clr @user_PC

106C next_address

106C C020F0E2 mov @user_PC,r01070 C080 mov r0,r21072 0A42 sla r2,41074 C0E0F0D0 mov @key,r31078 0883 sra r3,8107A A083 a r3,r2

107C C802F0E2 mov r2,@user_PC

1080 C28B mov r11,r101082 06A00F8C bl @read_memory1086 06A00E00 bl @key_address1108A C2CA mov r10,r11

108C 045B rt

108E register_select

108E D020F0D0 movb @key,r0 ; for checking key code1092 0240FF00 andi r0,0ff00h

1096 02800000 ci r0,0000h109A 1615 jne register1

; display register r0

109C 02000300 register0 li r0,0300h10A0 C800F0E0 mov r0,@buffer+1410A4 C0201812 mov @hex_tbl+0,r010A8 C800F0DE mov r0,@buffer+1210AC 04C0 clr r010AE C800F0DC mov r0,@buffer+1010B2 04C0 clr r010B4 C800F0DA mov r0,@buffer+8

10B8 0200F000 li r0,user_wps

10BC C28B mov r11,r1010BE 06A00FDC bl @put_data10C2 C2CA mov r10,r11

10C4 045B rt

10C6 02800100 register1 ci r0,0100h10CA 1615 jne register2

10CC 02000300 li r0,0300h10D0 C800F0E0 mov r0,@buffer+1410D4 C0201814 mov @hex_tbl+2,r010D8 C800F0DE mov r0,@buffer+12

SCAN.LST 6/2/2021 4:48 PM

Page 21 of 40

1345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408

10DC 04C0 clr r010DE C800F0DC mov r0,@buffer+1010E2 04C0 clr r010E4 C800F0DA mov r0,@buffer+8

10E8 0200F002 li r0,user_wps+2

10EC C28B mov r11,r1010EE 06A00FDC bl @put_data10F2 C2CA mov r10,r11

10F4 045B rt

10F6 02800200 register2 ci r0,0200h10FA 1615 jne register3

10FC 02000300 li r0,0300h1100 C800F0E0 mov r0,@buffer+141104 C0201816 mov @hex_tbl+4,r01108 C800F0DE mov r0,@buffer+12110C 04C0 clr r0110E C800F0DC mov r0,@buffer+101112 04C0 clr r01114 C800F0DA mov r0,@buffer+8

1118 0200F004 li r0,user_wps+4

111C C28B mov r11,r10111E 06A00FDC bl @put_data1122 C2CA mov r10,r11

1124 045B rt

1126 02800300 register3 ci r0,0300h112A 1615 jne register4

112C 02000300 li r0,0300h1130 C800F0E0 mov r0,@buffer+141134 C0201818 mov @hex_tbl+6,r01138 C800F0DE mov r0,@buffer+12113C 04C0 clr r0113E C800F0DC mov r0,@buffer+101142 04C0 clr r01144 C800F0DA mov r0,@buffer+8

1148 0200F006 li r0,user_wps+6

114C C28B mov r11,r10114E 06A00FDC bl @put_data1152 C2CA mov r10,r111154 045B rt

1156 02800400 register4 ci r0,0400h115A 1615 jne register5

115C 02000300 li r0,0300h1160 C800F0E0 mov r0,@buffer+141164 C020181A mov @hex_tbl+8,r01168 C800F0DE mov r0,@buffer+12116C 04C0 clr r0116E C800F0DC mov r0,@buffer+101172 04C0 clr r01174 C800F0DA mov r0,@buffer+8

SCAN.LST 6/2/2021 4:48 PM

Page 22 of 40

1409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472

1178 0200F008 li r0,user_wps+8

117C C28B mov r11,r10117E 06A00FDC bl @put_data1182 C2CA mov r10,r111184 045B rt

1186 02800500 register5 ci r0,0500h118A 1615 jne register6

118C 02000300 li r0,0300h1190 C800F0E0 mov r0,@buffer+141194 C020181C mov @hex_tbl+10,r01198 C800F0DE mov r0,@buffer+12119C 04C0 clr r0119E C800F0DC mov r0,@buffer+1011A2 04C0 clr r011A4 C800F0DA mov r0,@buffer+8

11A8 0200F00A li r0,user_wps+10

11AC C28B mov r11,r1011AE 06A00FDC bl @put_data11B2 C2CA mov r10,r1111B4 045B rt

11B6 02800600 register6 ci r0,0600h11BA 1615 jne register7

11BC 02000300 li r0,0300h11C0 C800F0E0 mov r0,@buffer+1411C4 C020181E mov @hex_tbl+12,r011C8 C800F0DE mov r0,@buffer+1211CC 04C0 clr r011CE C800F0DC mov r0,@buffer+1011D2 04C0 clr r011D4 C800F0DA mov r0,@buffer+8

11D8 0200F00C li r0,user_wps+12

11DC C28B mov r11,r1011DE 06A00FDC bl @put_data11E2 C2CA mov r10,r1111E4 045B rt

11E6 02800700 register7 ci r0,0700h11EA 1615 jne register8

11EC 02000300 li r0,0300h11F0 C800F0E0 mov r0,@buffer+1411F4 C0201820 mov @hex_tbl+14,r011F8 C800F0DE mov r0,@buffer+1211FC 04C0 clr r011FE C800F0DC mov r0,@buffer+101202 04C0 clr r01204 C800F0DA mov r0,@buffer+8

1208 0200F00E li r0,user_wps+14

120C C28B mov r11,r10120E 06A00FDC bl @put_data1212 C2CA mov r10,r111214 045B rt

SCAN.LST 6/2/2021 4:48 PM

Page 23 of 40

1473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536

1216 02800800 register8 ci r0,0800h121A 1615 jne register9

121C 02000300 li r0,0300h1220 C800F0E0 mov r0,@buffer+141224 C0201822 mov @hex_tbl+16,r01228 C800F0DE mov r0,@buffer+12122C 04C0 clr r0122E C800F0DC mov r0,@buffer+101232 04C0 clr r01234 C800F0DA mov r0,@buffer+8

1238 0200F010 li r0,user_wps+16

123C C28B mov r11,r10123E 06A00FDC bl @put_data1242 C2CA mov r10,r111244 045B rt

1246 02800900 register9 ci r0,0900h124A 1615 jne register10

124C 02000300 li r0,0300h1250 C800F0E0 mov r0,@buffer+141254 C0201824 mov @hex_tbl+18,r01258 C800F0DE mov r0,@buffer+12125C 04C0 clr r0125E C800F0DC mov r0,@buffer+101262 04C0 clr r01264 C800F0DA mov r0,@buffer+8

1268 0200F012 li r0,user_wps+18

126C C28B mov r11,r10126E 06A00FDC bl @put_data1272 C2CA mov r10,r111274 045B rt

1276 02800A00 register10 ci r0,0a00h127A 1616 jne register11

127C 02000300 li r0,0300h1280 C800F0E0 mov r0,@buffer+141284 C0201814 mov @hex_tbl+2,r01288 C800F0DE mov r0,@buffer+12128C C0201812 mov @hex_tbl,r01290 C800F0DC mov r0,@buffer+101294 04C0 clr r01296 C800F0DA mov r0,@buffer+8

129A 0200F014 li r0,user_wps+20

129E C28B mov r11,r1012A0 06A00FDC bl @put_data12A4 C2CA mov r10,r1112A6 045B rt

12A8 register1112A8 02800B00 ci r0,0b00h ; status register12AC 1614 jne register12

12AE 0200AE00 li r0,0ae00h12B2 C800F0E0 mov r0,@buffer+14

SCAN.LST 6/2/2021 4:48 PM

Page 24 of 40

1537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600

12B6 02008700 li r0,8700h12BA C800F0DE mov r0,@buffer+1212BE 04C0 clr r012C0 C800F0DC mov r0,@buffer+1012C4 04C0 clr r012C6 C800F0DA mov r0,@buffer+8

12CA 0200F01E li r0,user_wps+1eh

12CE C28B mov r11,r1012D0 06A00FDC bl @put_data12D4 C2CA mov r10,r11

12D6 register1212D6 045B rt

; enter number 1 for key CAL;

12D8 enter_number1:

12D8 0200F0F0 li r0,stack

12DC C090 mov *r0,r212DE 0A42 sla r2,4

12E0 C0E0F0D0 mov @key,r312E4 0883 sra r3,812E6 A083 a r3,r2

12E8 C402 mov r2,*r0

12EA C050 mov *r0,r1

12EC C28B mov r11,r10

12EE 06A00FDE bl @put_data1

12F2 C2CA mov r10,r11

12F4 045B rt

; enter number 2 for key CAL;

12F6 enter_number2:

12F6 0200F0F2 li r0,stack+2

12FA C090 mov *r0,r212FC 0A42 sla r2,4

12FE C0E0F0D0 mov @key,r31302 0883 sra r3,81304 A083 a r3,r2

1306 C402 mov r2,*r0

1308 C050 mov *r0,r1

130A C28B mov r11,r10

130C 06A00FDE bl @put_data1

1310 C2CA mov r10,r11

SCAN.LST 6/2/2021 4:48 PM

Page 25 of 40

1601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664

1312 045B rt

; enter start address for key Copy; entry state=6

1314 enter_start_address:

1314 0200F0F0 li r0,stack

1318 C090 mov *r0,r2131A 0A42 sla r2,4

131C C0E0F0D0 mov @key,r31320 0883 sra r3,81322 A083 a r3,r2

1324 C402 mov r2,*r0

1326 C050 mov *r0,r1

1328 C28B mov r11,r10

132A 06A00FDE bl @put_data1

132E C2CA mov r10,r11

1330 045B rt

; enter end address for key Copy; entry state=7

1332 enter_end_address:

1332 0200F0F2 li r0,stack+2

1336 C090 mov *r0,r21338 0A42 sla r2,4

133A C0E0F0D0 mov @key,r3133E 0883 sra r3,81340 A083 a r3,r2

1342 C402 mov r2,*r0

1344 C050 mov *r0,r1

1346 C28B mov r11,r10

1348 06A00FDE bl @put_data1

134C C2CA mov r10,r11

134E 045B rt

; enter destination address for key Copy; entry state=8

1350 enter_destination:

1350 0200F0F4 li r0,stack+4

1354 C090 mov *r0,r2

SCAN.LST 6/2/2021 4:48 PM

Page 26 of 40

1665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728

1356 0A42 sla r2,4

1358 C0E0F0D0 mov @key,r3135C 0883 sra r3,8135E A083 a r3,r2

1360 C402 mov r2,*r0

1362 C050 mov *r0,r1

1364 C28B mov r11,r10

1366 06A00FDE bl @put_data1

136A C2CA mov r10,r11

136C 045B rt

; beep when key pressed; duration: r1; tone: r0

136E C020F0EC beep: mov @no_beep,r01372 0280FFFF ci r0,-11376 1601 jne beep31378 045B rt ; no beep

137A 02010032 beep3 li r1,50 ; duration

137E 02000400 beep0 li r0,0400h ; bit 2 is speaker1382 D8007304 movb r0,@uart_mcr

1386 02000050 li r0,80 ; tone138A 0600 beep1 dec r0138C 16FE jne beep1

138E 02000000 li r0,01392 D8007304 movb r0,@uart_mcr

1396 02000050 li r0,80139A 0600 beep2 dec r0139C 16FE jne beep2

139E 0601 dec r113A0 16EE jne beep0

13A2 045B rt

;---------------------- LCD driver -----------------------------------

13A4 D0207202 lcd_ready movb @command_read,r013A8 02408000 andi r0,8000h13AC 16FB jne lcd_ready

13AE 045B rt

13B0 06A013A4 clear_lcd bl @lcd_ready13B4 02000100 li r0,0100h13B8 D8007200 movb r0,@command_write13BC 045B rt

13BE C30B init_lcd: mov r11,r12

SCAN.LST 6/2/2021 4:48 PM

Page 27 of 40

1729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792

13C0 06A013A4 bl @lcd_ready 13C4 02003800 li r0,3800h13C8 D8007200 movb r0,@command_write13CC 06A013A4 bl @lcd_ready13D0 02000C00 li r0,0c00h13D4 D8007200 movb r0,@command_write13D8 06A013A4 bl @lcd_ready13DC 02000100 li r0,0100h13E0 D8007200 movb r0,@command_write

13E4 C2CC mov r12,r11

13E6 045B rt

; put_ch_lcd put character to lcd; entry: r1

13E8 D0207202 put_ch_lcd: movb @command_read,r013EC 02408000 andi r0,8000h13F0 16FB jne put_ch_lcd13F2 D8017201 movb r1,@data_write13F6 045B rt

; print string terminated by 0 on text lcd; entry: r2 pointed to string

13F8 C012 put_str_lcd: mov *r2,r0 ; get a from *r213FA 02800000 ci r0,013FE 1601 jne put_str21400 045B rt

1402 D0207202 put_str2: movb @command_read,r01406 02408000 andi r0,8000h140A 16FB jne put_str2

140C D8127201 movb *r2,@data_write1410 05C2 inct r21412 10F2 jmp put_str_lcd

1414 C28B test_lcd: mov r11,r10

1416 06A013BE bl @init_lcd ; r12

141A 02021788 li r2, title3141E 06A013F8 bl @put_str_lcd

1422 06A013A4 bl @lcd_ready

1426 0200C000 li r0,0c000h142A D8007200 movb r0,@command_write ; second row

142E 020217AA li r2, title41432 06A013F8 bl @put_str_lcd

1436 C2CA mov r10,r111438 045B rt

; print word to terminal; entry: r2

143A C24B put_word: mov r11,r9

SCAN.LST 6/2/2021 4:48 PM

Page 28 of 40

1793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856

143C C0C2 mov r2,r3 ; save r2143E 0242F000 andi r2,0f000h

1442 09C2 srl r2,12

1444 0A12 sla r2,1

1446 C0221852 mov @ascii_tbl(r2),r0

144A 06A00906 bl @cout ; send to terminal

144E C083 mov r3,r21450 02420F00 andi r2,0f00h1454 0982 srl r2,81456 0A12 sla r2,11458 C0221852 mov @ascii_tbl(r2),r0145C 06A00906 bl @cout ; send to terminal

1460 C083 mov r3,r21462 024200F0 andi r2,00f0h1466 0942 srl r2,41468 0A12 sla r2,1146A C0221852 mov @ascii_tbl(r2),r0146E 06A00906 bl @cout ; send to terminal

1472 C083 mov r3,r21474 0242000F andi r2,0fh1478 0A12 sla r2,1147A C0221852 mov @ascii_tbl(r2),r0147E 06A00906 bl @cout ; send to terminal

1482 C2C9 mov r9,r11

1484 045B rt

1486 C24B new_line: mov r11,r91488 02000D00 li r0,0d00h148C 06A00906 bl @cout1490 02000A00 li r0,0a00h1494 06A00906 bl @cout1498 C2C9 mov r9,r11149A 045B rt

; dump memory contents; entry: user_PC

149C C28B key_dump: mov r11,r10

149E 02060008 li r6,814A2 dump14A2 06A01486 bl @new_line

14A6 02070008 li r7,8

14AA C120F0E2 mov @user_PC,r414AE C084 mov r4,r214B0 C144 mov r4,r5 ; save to r5 for ascii print

14B2 06A0143A bl @put_word

14B6 02003A00 li r0,3a00h14BA 06A00906 bl @cout

SCAN.LST 6/2/2021 4:48 PM

Page 29 of 40

1857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920

14BE 02002000 li r0,2000h14C2 06A00906 bl @cout

14C6 dump114C6 C094 mov *r4,r214C8 06A0143A bl @put_word

14CC 02002000 li r0,2000h14D0 06A00906 bl @cout

14D4 05C4 inct r414D6 C804F0E2 mov r4,@user_PC

14DA 0607 dec r714DC 16F4 jne dump1

; print ASCII letter with value between 20H to 7FH, otherwise print

14DE 02070008 li r7,8

; first byte

14E2 C015 ascii_0 mov *r5,r014E4 0240FF00 andi r0,0ff00h

14E8 02802000 ci r0,2000h14EC 1403 jhe ascii_1

14EE 02002E00 li r0,2e00h14F2 1005 jmp ascii_3

14F4 02808000 ascii_1 ci r0,8000h14F8 1A02 jl ascii_314FA 02002E00 li r0,2e00h

14FE 06A00906 ascii_3 bl @cout

; next byte

1502 C015 mov *r5,r01504 024000FF andi r0,00ffh1508 0A80 sla r0,8

150A 02802000 ci r0,2000h150E 1403 jhe ascii_4

1510 02002E00 li r0,2e00h1514 1005 jmp ascii_5

1516 02808000 ascii_4 ci r0,8000h151A 1A02 jl ascii_5

151C 02002E00 li r0,2e00h

1520 C8009000 ascii_5 mov r0,@9000h

1524 06A00906 bl @cout

1528 05C5 inct r5

152A 0607 dec r7

SCAN.LST 6/2/2021 4:48 PM

Page 30 of 40

1921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984

152C 16DA jne ascii_0

; next line

152E 0606 dec r61530 16B8 jne dump

1532 06A01486 bl @new_line

1536 06A00F8C bl @read_memory153A 06A00E62 bl @key_data

153E C2CA exit mov r10,r111540 045B rt

1542 C24B key_load mov r11,r9

1544 020217CC li r2,title51548 06A0092A bl @put_str

154C 06A015BC bl @get_intel_hex

1550 020217FE li r2,title61554 06A0092A bl @put_str

1558 C2C9 mov r9,r11155A 045B rt

; get byte from terminal; exit: r0 low byte

155C C28B get_byte: mov r11,r10155E 06A0091A bl @cin1562 0240FF00 andi r0,0ff00h1566 02804100 ci r0,4100h156A 1403 jhe A_to_F_1156C 02400FFF andi r0,0fffh

1570 1004 jmp next_nibble

1572 0980 A_to_F_1 srl r0,81574 0220FFC9 ai r0,0ffc9h ; -37H1578 0A80 sla r0,8

157A next_nibble 157A 0A40 sla r0,4157C C080 mov r0,r2 ; save high nibble

157E 06A0091A bl @cin ; get low nibble1582 0240FF00 andi r0,0ff00h1586 02804100 ci r0,4100h158A 1405 jhe A_to_F_2158C 02400FFF andi r0,0fffh1590 B002 ab r2,r0 ; merge it

1592 C2CA mov r10,r111594 045B rt

1596 0980 A_to_F_2 srl r0,81598 0220FFC9 ai r0,0ffc9h ; -37H

SCAN.LST 6/2/2021 4:48 PM

Page 31 of 40

1985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048

159C 0A80 sla r0,8159E B002 ab r2,r0 ; merge it

15A0 C2CA mov r10,r1115A2 045B rt

; get word from terminal; exit: r0 16-bit

15A4 C20B get_word: mov r11,r815A6 06A0155C bl @get_byte15AA C0C0 mov r0,r3

15AC 06A0155C bl @get_byte15B0 0243FF00 andi r3,0ff00h15B4 0980 srl r0,815B6 A003 a r3,r015B8 C2C8 mov r8,r1115BA 045B rt

; get Intel hex file from serial port; no byte check sum ;

15BC C18B get_intel_hex: mov r11,r6

15BE 06A0091A get_record: bl @cin ; search colon :15C2 0240FF00 andi r0,0ff00h15C6 02803A00 ci r0,3A00h ; 3A = ':'15CA 16F9 jne get_record

15CC 06A0155C bl @get_byte

15D0 C1C0 mov r0,r7 ; number of byte15D2 0917 srl r7,1 ; number of word in r3

15D4 0987 srl r7,8 ; e.g. 0400 --> 0004

15D6 06A015A4 bl @get_word15DA C100 mov r0,r4 ; r4 = pointer to load address

15DC 06A0155C bl @get_byte ; get record type15E0 0240FF00 andi r0,0ff00h15E4 02800100 ci r0,0100h ; 01 = end-of-record15E8 1602 jne data_record

15EA C2C6 mov r6,r1115EC 045B rt

15EE data_record:

15EE 06A015A4 bl @get_word

15F2 D8007000 movb r0,@gpio1 ; load indicator

15F6 C500 mov r0,*r4

15F8 05C4 inct r415FA 0607 dec r7

15FC 16F8 jne data_record

SCAN.LST 6/2/2021 4:48 PM

Page 32 of 40

2049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112

15FE 10DF jmp get_record

; test 10ms tick interrupt by INT1, SW1 setectes 10ms tick signal; mask interrupt1 with 1, on interrupt mask bit

1600 C24B test_tick: mov r11,r9

; insert level1, INT1 vector in RAM

1602 02000460 li r0,0460h ; insert branch instruction 0460 1606 C800E020 mov r0,@level1_service160A 020016F0 li r0,xint1_service160E C800E022 mov r0,@level1_service+2

; li r0,0

1612 03000001 limi 1 ; load mask for interrupt 1; stst r0

; mov r0,@9000h

; bl @read_memory

1616 C2C9 mov r9,r111618 045B rt

161A 02091234 test_xop: li r9,1234h161E 2C201730 xop @title1,01622 045B rt

; Calculator for 16-bit addition or subtraction for relative byte finding; set state to 4, ;

1624 C24B key_cal: mov r11,r9

1626 02000004 li r0,4162A C800F0E4 mov r0,@state ; state=4 for key CAL

162E 04C0 clr r01630 C800F0F0 mov r0,@stack ; clear number1 and number21634 C800F0F2 mov r0,@stack+2

1638 C060F0F0 mov @stack,r1

163C 06A00FDE bl @put_data1

1640 02008D00 li r0,8d00h1644 C800F0E0 mov r0,@buffer+141648 02003F00 li r0,3f00h164C C800F0DE mov r0,@buffer+121650 02008500 li r0,8500h1654 C800F0DC mov r0,@buffer+101658 04C0 clr r0165A C800F0DA mov r0,@buffer+8

165E C2C9 mov r9,r11

1660 045B rt

; copy block of memory

SCAN.LST 6/2/2021 4:48 PM

Page 33 of 40

2113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176

;

1662 C24B key_copy: mov r11,r9

1664 02000006 li r0,61668 C800F0E4 mov r0,@state ; state=6 for key copy

166C 04C0 clr r0166E C800F0F0 mov r0,@stack ; clear 3 words, for start1672 C800F0F2 mov r0,@stack+2 ; end1676 C800F0F4 mov r0,@stack+4 ; destination

167A C060F0F0 mov @stack,r1

167E 06A00FDE bl @put_data1

1682 0200AE00 li r0,0ae00h1686 C800F0E0 mov r0,@buffer+14168A 04C0 clr r0168C C800F0DE mov r0,@buffer+121690 C800F0DC mov r0,@buffer+101694 C800F0DA mov r0,@buffer+8

1698 C2C9 mov r9,r11

169A 045B rt

; insert one word after current address; shifted down 256 words; entry: current PC

169C C24B key_insert: mov r11,r9

169E C0A0F0E2 mov @user_PC,r216A2 C002 mov r2,r016A4 05C0 inct r0

16A6 02220100 ai r2,0100h ; far-end block

16AA C0C2 mov r2,r316AC 0643 dect r3

16AE C493 insert1 mov *r3,*r216B0 0643 dect r316B2 0642 dect r2

16B4 8002 c r2,r016B6 16FB jne insert1

16B8 04D2 clr *r2

16BA C802F0E2 mov r2,@user_PC16BE 06A00F8C bl @read_memory16C2 06A00E62 bl @key_data

16C6 C2C9 mov r9,r1116C8 045B rt

; delete one word at current address; shifted up 256 words; entry: current PC

16CA C24B key_delete: mov r11,r9

SCAN.LST 6/2/2021 4:48 PM

Page 34 of 40

2177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240

16CC C0A0F0E2 mov @user_PC,r216D0 C0C2 mov r2,r316D2 C002 mov r2,r0

16D4 02200100 ai r0,100h

16D8 05C3 inct r3

16DA C493 delete1 mov *r3,*r216DC 05C2 inct r216DE 05C3 inct r3

16E0 8002 c r2,r016E2 16FB jne delete1

16E4 06A00F8C bl @read_memory16E8 06A00E62 bl @key_data

16EC C2C9 mov r9,r11

16EE 045B rt

;----------------- external interrupt services ------------------------

16F0 xint1_service

16F0 C020F0E8 mov @tick,r016F4 02200020 ai r0,20h16F8 C800F0E8 mov r0,@tick

16FC D8007000 movb r0,@gpio1

1700 0380 rtwp

;////////////////// software interrupt services ///////////////////////; xop 0 is for breakpoint; save status register to user status and return to system monitor directly

1702 xop0_service

1702 C020F06E mov @0f06eh,r0 ; copy ST from user program running to user_1706 C800F01E mov r0,@0f01eh

170A C020F01C mov @0f01ch,r0 ; replace return adress to system monitor170E C800F06C mov r0,@0f06ch

1712 C020F01A mov @0f01ah,r0 ; replace xop work space with system wp1716 C800F06A mov r0,@0f06ah

; li r0,0200h; movb r0,@gpio1

171A 0380 rtwp ; go back to system monitor

; simple delay ; calling with XOP r0,1 instruction

171C xop1_service171C 02001000 li r0,1000h1720 0600 delay5 dec r0

SCAN.LST 6/2/2021 4:48 PM

Page 35 of 40

2241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304

1722 16FE jne delay51724 0380 rtwp

;################## nmi service ######################################

1726 nmi_service

1726 02000100 li r0,0100h172A D8007000 movb r0,@gpio1172E 0380 rtwp

;sssssssssssssssssss strings constant $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

1730 0D000A0054title1: dfb cr,0,lf,0,"T0M0S090909050 0M0I0C0R0O0P0R0O0C0E0S0S0O0R0

1784 0D000A00 title2: dfb cr,0,lf,0

1788 54304D3053title3: dfb "T0M0S090909050 0K0I0T0 020002010",0,017AA 333032304Btitle4: dfb "3020K0R0A0M0 090600000 0U0A0R0T0",0,0

17CC 0D000A004Ctitle5: dfb cr,0,lf,0,"L0o0a0d0 0I0n0t0e0l0 0h0e0x0 0f0i0l0e0.0.0.0

17FE 63306F306Dtitle6: dfb "c0o0m0p0l0e0t0e0d0",0,0

; seven segment pattern for value 0-F

1812 BD00 hex_tbl: dwl 0bdh1814 3000 dwl 30h1816 9B00 dwl 9bh1818 BA00 dwl 0bah181A 3600 dwl 36h181C AE00 dwl 0aeh181E AF00 dwl 0afh1820 3800 dwl 38h1822 BF00 dwl 0bfh1824 BE00 dwl 0beh1826 3F00 dwl 3fh1828 A700 dwl 0a7h182A 8D00 dwl 8dh182C B300 dwl 0b3h182E 8F00 dwl 8fh1830 0F00 dwl 0fh

; digit enable with logic 0

1832 FEFF digit_tbl: dwl ~11834 FDFF dwl ~21836 FBFF dwl ~41838 F7FF dwl ~8183A EFFF dwl ~10h183C DFFF dwl ~20h183E BFFF dwl ~40h1840 7FFF dwl ~80h

1842 0000 cold_tbl: dwl 01844 0000 dwl 01846 0000 dwl 01848 0000 dwl 0184A AE00 dwl 0aeh ; 5184C BE00 dwl 0beh ; 9184E BE00 dwl 0beh ; 91850 BE00 dwl 0beh ; 9

; ascii table fror converting value 0-F to ascii code

SCAN.LST 6/2/2021 4:48 PM

Page 36 of 40

2305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368

1852 3000 ascii_tbl: dwl 30h1854 3100 dwl 31h1856 3200 dwl 32h1858 3300 dwl 33h185A 3400 dwl 34h185C 3500 dwl 35h185E 3600 dwl 36h1860 3700 dwl 37h1862 3800 dwl 38h1864 3900 dwl 39h1866 4100 dwl 41h1868 4200 dwl 42h186A 4300 dwl 43h186C 4400 dwl 44h186E 4500 dwl 45h1870 4600 dwl 46h

;------ relocated interrupt vector, put in RAM ------------------------------

E000 org 0e000h

E000 wplevel1 dfs 32 ; work space for level 1 interruptE020 level1_service dfs 4 ; put instruction, B @interrupt_service1E024 wplevel2 dfs 32 ; work space for level 2 interruptE044 level2_service dfs 4 ; put instruction, B @interrupt_service2E048 wplevel3 dfs 32E068 level3_service dfs 4E06C wplevel4 dfs 32E08C level4_service dfs 4

E090 wpxop8 dfs 32 ; work space for xop 8E0B0 xop8_service dfs 4 ; put instruction, B @xop8_serviceE0B4 wpxop9 dfs 32 E0D4 xop9_service dfs 4E0D8 wpxop10 dfs 32 E0F8 xop10_service dfs 4E0FC wpxop11 dfs 32 E11C xop11_service dfs 4E120 wpxop12 dfs 32 E140 xop12_service dfs 4E144 wpxop13 dfs 32 E164 xop13_service dfs 4E168 wpxop14 dfs 32 E188 xop14_service dfs 4E18C wpxop15 dfs 32 E1AC xop15_service dfs 4

;************* internal ram ******************************************

F000 org 0f000h ; do not alter this block locations

F000 user_wps dfs 32F020 user_st dfs 2

F022 jump_vector_wp dfs 2 ; load with user work spaceF024 jump_vector_pc dfs 2 ; load with user start program

F030 org 0f030h

F030 system_wps dfs 32F050 wps1 dfs 32

SCAN.LST 6/2/2021 4:48 PM

Page 37 of 40

2369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240224022402240224022402240224022402240224022402240224022402240224022402240224022402240224022402240224022402240224022402

F070 wpsx1 dfs 32F090 wps_nmi dfs 32F0B0 wps2 dfs 32

;*********************************************************************; add or modify storage from this line

F0D0 key dfs 2 F0D2 buffer dfs 16 ; 7-segemnt display buffer memoryF0E2 user_PCdfs 2F0E4 state dfs 2

; state definition; 0 standby ; 1 address entry; 2 data entry; 3 register select; 4 Calculator for relative addressing enter number1; 5 enter number2, compute add or sub; 6 enter start address; 7 enter end address; 8 enter destination, copy block of memory

F0E6 temp dfs 2F0E8 tick dfs 2 ; for 10ms tick incrementingF0EA counter dfs 2 ; for address and data key zeroF0EC no_beep dfs 2 ; beep/no beepF0EE warm_boot dfs 2 ; warmboot savingF0F0 stack dfs 8 ; stack deep 4 wordsF0F8 sign dfs 2 ; 0 = plus, -1 = minus

0000 end

SCAN.LST 6/2/2021 4:48 PM

Page 38 of 40

2402240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464

14E2 ASCII_0 14F4 ASCII_1 14FE ASCII_3 1516 ASCII_4 1520 ASCII_5 1852 ASCII_TBL 1572 A_TO_F_1 1596 A_TO_F_2 136E BEEP 137E BEEP0 138A BEEP1 139A BEEP2 137A BEEP3 098C BOUNCE F0D2 BUFFER 0C8E CHECK_STATE8 096E CHK_KEY 091A CIN 13B0 CLEAR_LCD 8000 COLD_PC 0830 COLD_RESET 1842 COLD_TBL 7202 COMMAND_READ 7200 COMMAND_WRITE 09D0 CONVERT_KEY 0BDA COPY_COLD_TBL 0CA4 COPY_MEMORY F0EA COUNTER 0906 COUT 0908 COUT1 000D CR 0F36 DATA_KEY 0F44 DATA_KEY1 0F4E DATA_KEY2 0F58 DATA_KEY3 0F62 DATA_KEY4 0F6C DATA_KEY5 0F76 DATA_KEY6 0F80 DATA_KEY7 0F8A DATA_KEY8 7203 DATA_READ 15EE DATA_RECORD 7201 DATA_WRITE 0988 DEBOUNCE 08D2 DELAY 08D6 DELAY1 1720 DELAY5 16DA DELETE1 1832 DIGIT_TBL 14A2 DUMP 14C6 DUMP1 105A ENTER_ADDRESS 1026 ENTER_DATA 1350 ENTER_DESTINATION 1332 ENTER_END_ADDRESS 12D8 ENTER_NUMBER1 12F6 ENTER_NUMBER2 1314 ENTER_START_ADDRESS 153E EXIT 0C10 FUNCTION1 0CE4 FUNCTION10 0CEE FUNCTION11 0CF8 FUNCTION12 0D02 FUNCTION13 0D0E FUNCTION14 0D18 FUNCTION15 0D22 FUNCTION16 0C1A FUNCTION2 0C24 FUNCTION3 0C2E FUNCTION4 0C38 FUNCTION5 0C42 FUNCTION6 0C4C FUNCTION7 0C56 FUNCTION8 0CDA FUNCTION9 0C06 FUNCTION_KEY 155C GET_BYTE 15BC GET_INTEL_HEX 15BE GET_RECORD 15A4 GET_WORD 7000 GPIO1 08CC HELLO 1812 HEX_TBL 13BE INIT_LCD 08DC INIT_UART 16AE INSERT1 F024 JUMP_VECTOR_PC F022 JUMP_VECTOR_WP F0D0 KEY 0DE8 KEY_ADDRESS 0E00 KEY_ADDRESS1 1624 KEY_CAL 1662 KEY_COPY 0E62 KEY_DATA 0E7A KEY_DATA1 0DAC KEY_DEC 0DD0 KEY_DEC1 16CA KEY_DELETE 149C KEY_DUMP 0BF4 KEY_EXECUTE 0D42 KEY_INC 0D64 KEY_INC1 0D7C KEY_INC2 0D94 KEY_INC3 169C KEY_INSERT 1542 KEY_LOAD 0D24 KEY_PC 0EE0 KEY_REG 0EDC KEY_TEST 0F20 KEY_USER 13A4 LCD_READY 095C LED_DELAY 0000 LEVEL0 0004 LEVEL1 E020 LEVEL1_SERVICE 0008 LEVEL2 E044 LEVEL2_SERVICE 000C LEVEL3 E068 LEVEL3_SERVICE 0010 LEVEL4 E08C LEVEL4_SERVICE 000A LF 08BC LOOP 087A MAIN_LOOP 0C7C MINUS 1486 NEW_LINE 106C NEXT_ADDRESS 103A NEXT_DATA 0976 NEXT_KEY 157A NEXT_NIBBLE 1726 NMI_SERVICE FFFE NMI_VECTOR 0CC4 NORMAL_RUN F0EC NO_BEEP 087A NO_LCD_CONNECTED 09AA NO_PRESS 7100 PORT0 7101 PORT1 7102 PORT2 0812 POWER_UP 13E8 PUT_CH_LCD 0FDC PUT_DATA 0FDE PUT_DATA1 092A PUT_STR 0934 PUT_STR1 1402 PUT_STR2 13F8 PUT_STR_LCD 143A PUT_WORD 0000 R0 0001 R1 000A R10 000B R11 000C R12 000D R13 000E R14 000F R15 0002 R2 0003 R3 0004 R4 0005 R5 0006 R6 0007 R7 0008 R8 0009 R9 0F8C READ_MEMORY 109C REGISTER0 10C6 REGISTER1 1276 REGISTER10 12A8 REGISTER11 12D6 REGISTER12 10F6 REGISTER2 1126 REGISTER3 1156 REGISTER4 1186 REGISTER5 11B6 REGISTER6 11E6 REGISTER7 1216 REGISTER8 1246 REGISTER9 108E REGISTER_SELECT 0888 REPEAT 0940 SCAN 0950 SCAN1 0992 SCAN_KEY 0994 SCAN_KEY1 F0F8 SIGN 0DF4 SKIP_ADDRESS 0E6E SKIP_DATA 0C7E SKIP_MINUS F0F0 STACK

SCAN.LST 6/2/2021 4:48 PM

Page 39 of 40

2465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882488248824882488248824882488248824882488248824882488248824882488248824882488248824882488248824882488248824882488248824882488248824882488248824882488248824882488

0800 START F0E4 STATE F030 SYSTEM_WPS F0E6 TEMP 0890 TEST1 1414 TEST_LCD 1600 TEST_TICK 161A TEST_XOP F0E8 TICK 1730 TITLE1 1784 TITLE2 1788 TITLE3 17AA TITLE4 17CC TITLE5 17FE TITLE6 7300 UART_BUFFER 7300 UART_DIVISOR_LSB 7301 UART_DIVISOR_MSB 7302 UART_FIFO 7303 UART_LCR 7305 UART_LINE_STATUS 7304 UART_MCR 7307 UART_SCR F0E2 USER_PC F020 USER_ST F000 USER_WPS 0DB8 VALID_DEC 0D4E VALID_INC F0EE WARM_BOOT 0840 WARM_RESET E000 WPLEVEL1 E024 WPLEVEL2 E048 WPLEVEL3 E06C WPLEVEL4 F050 WPS1 F0B0 WPS2 F070 WPSX1 F090 WPS_NMI E0D8 WPXOP10 E0FC WPXOP11 E120 WPXOP12 E144 WPXOP13 E168 WPXOP14 E18C WPXOP15 E090 WPXOP8 E0B4 WPXOP9 FFFC WSP_NMI_VECTOR 16F0 XINT1_SERVICE 0040 XOP0_ 1702 XOP0_SERVICE 0068 XOP10_ E0F8 XOP10_SERVICE 006C XOP11_ E11C XOP11_SERVICE 0070 XOP12_ E140 XOP12_SERVICE 0074 XOP13_ E164 XOP13_SERVICE 0078 XOP14_ E188 XOP14_SERVICE 007C XOP15_ E1AC XOP15_SERVICE 0044 XOP1_ 171C XOP1_SERVICE 0060 XOP8_ E0B0 XOP8_SERVICE 0064 XOP9_ E0D4 XOP9_SERVICE

SCAN.LST 6/2/2021 4:48 PM

Page 40 of 40