📄 jw002.asm
字号:
anl a, #11100000b cjne a, #00100000b, exec_5c_cmd_3 ;if we get here, the cmd is to display bytes 0 to 31 mov a, @r0 add a, #224exec_display_char: lcall lookup_char lcall cache_char mov cmd_len, #0 ret ;cmd 0x5C <0x60-0x7F>, display bytes 128 to 159exec_5c_cmd_3: cjne a, #01100000b, exec_5c_5c ;if we get here, the cmd is to display bytes 128 to 159 mov a, @r0 add a, #32 sjmp exec_display_char ;cmd 0x5C 0x5C, display '\'exec_5c_5c: mov a, @r0 cjne a, #0x5C, exec_5c_5f sjmp exec_display_char ;cmd 0x5C 0x5C, display byte 127exec_5c_5f: cjne a, #0x5F, exec_5c_5d mov a, #127 sjmp exec_display_char ;cmd 0x5C 0x5D, begin ignoring input bytes (but not commands)exec_5c_5d: cjne a, #0x5D, exec_5c_5b setb ignore_input_mode mov cmd_len, #0 ret ;cmd 0x5C 0x5B, don't ignore input bytesexec_5c_5b: cjne a, #0x5B, exec_5c_40 clr ignore_input_mode mov cmd_len, #0 ret ;cmd 0x5C 0x40 <font+32> <opcode>, clear display or show font summaryexec_5c_40: cjne a, #0x40, exec_5c_41 mov a, cmd_len cjne a, #4, exec_5c_40_end mov r0, #cmd_buf+2 mov a, @r0 acall byte2font jc exec_5c_40_done mov font, a mov r0, #cmd_buf+3 mov a, @r0exec_5c_40_30: cjne a, #0x30, exec_5c_40_31 lcall init_display sjmp exec_5c_40_doneexec_5c_40_31: cjne a, #0x31, exec_5c_40_32 mov r6, #0 mov r0, #cmd_buf+4 mov @r0, #msg_f0 & 255 inc r0 mov @r0, #msg_f0 >> 8 sjmp exec_5c_40_font_previewexec_5c_40_32: cjne a, #0x32, exec_5c_40_done mov r6, #128 mov r0, #cmd_buf+4 mov @r0, #msg_f128 & 255 inc r0 mov @r0, #msg_f128 >> 8exec_5c_40_font_preview: ;draw font preview page lcall test_font mov a, font add a, #'0' mov r6, a push font mov font, #0 lcall move_cursor_home mov dptr, #msg_font lcall lcd_pstr mov a, r6 lcall lookup_char lcall cache_char mov x_pos, #0 mov y_pos, #2 mov r0, #cmd_buf+4 mov dpl, @r0 inc r0 mov dph, @r0 lcall lcd_pstr mov x_pos, #0 mov y_pos, #3 lcall lcd_pstr pop fontexec_5c_40_done: lcall move_cursor_home mov cmd_len, #0exec_5c_40_end: ret ;cmd 0x5C 0x41 <mode>, set modes (wrap and vscroll)exec_5c_41: cjne a, #0x41, exec_5c_42 mov a, cmd_len cjne a, #3, exec_5c_41_end mov r0, #cmd_buf+2 mov a, @r0 anl a, #11110000b cjne a, #0x30, exec_5c_41_done mov a, @r0 rrc a mov wrap_mode, c rrc a mov vscroll_mode, cexec_5c_41_done: mov cmd_len, #0exec_5c_41_end: ret ;cmd 0x5C 0x42 <column+32> <row+32>, set cursor positionexec_5c_42: cjne a, #0x42, exec_5c_43 mov a, cmd_len cjne a, #4, exec_5c_42_end mov r0, #cmd_buf+2 mov a, @r0 add a, #224 mov x_pos, a mov r0, #cmd_buf+3 mov a, @r0 add a, #224 mov y_pos, aexec_5c_42_done: mov cmd_len, #0exec_5c_42_end: ret ;cmd 0x5C 0x43 <font+32>, set fontexec_5c_43: cjne a, #0x43, exec_5c_44 mov a, cmd_len cjne a, #3, exec_5c_43_end mov r0, #cmd_buf+2 mov a, @r0 acall byte2font jc exec_5c_43_done mov font, aexec_5c_43_done: mov cmd_len, #0exec_5c_43_end: ret ;define a custom character ;cmd 0x5C 0x44 <char (2 bytes hex)> <font+32> <bitmap (8 bytes)> ; ; example: replace "R" (R is ascii code 0x52) in font 0 ; 0x5C 0x44 0x35 0x32 0x20 0x3E 0x39 0x39 0x39 0x3E 0x3A 0x39 0x39 ; as an ascii string: "\D52 >999>:99" ; ; **** 00111110 0x3E ; ** * 00111001 0x39 ; ** * 00111001 0x39 ; ** * 00111001 0x39 ; **** 00111110 0x3E ; ** * 00111010 0x3A ; ** * 00111001 0x39 ; ** * 00111001 0x39exec_5c_44: cjne a, #0x44, exec_5c_45 mov a, cmd_len cjne a, #13, exec_5c_44_end mov r0, #cmd_buf+2 mov a, @r0 acall asc2hex jc exec_5c_44_done swap a mov r1, a mov r0, #cmd_buf+3 mov a, @r0 acall asc2hex jc exec_5c_44_done orl a, r1 mov r1, a ;r1 is the character to write mov r0, #cmd_buf+4 mov a, @r0 acall byte2font jc exec_5c_44_done mov r2, a ;r2 is the font number of change mov r0, #cmd_buf+5exec_5c_44_loop1: mov a, @r0 ;make sure all bitmap bytes are legal anl a, #11100000b cjne a, #00100000b, exec_5c_44_done inc r0 cjne r0, #cmd_buf+13, exec_5c_44_loop1 mov a, r2 mov b, #5 mul ab ;compute font's memory position add a, #fonts_start_page mov r7, a mov a, r1 mov b, #5 mul ab ;compute offset within font mov dpl, a mov a, b add a, r7 mov dph, a ;dptr points to character to update mov r3, #0 ;r3 counts font x position (0 to 4)exec_5c_44_loop2: mov a, r3 acall exec_5c_44_bitmask mov r4, a ;r4 holds bitmask for this x position mov r0, #cmd_buf+5 mov r5, #0 ;r5 will become 8 bit vertical patternexec_5c_44_loop3: mov a, @r0 anl a, r4 setb c jnz exec_5c_44_loop3b clr cexec_5c_44_loop3b: mov a, r5 rrc a mov r5, a inc r0 cjne r0, #cmd_buf+13, exec_5c_44_loop3 mov a, r5 movx @dptr, a ;write to the in-memory font inc dptr inc r3 cjne r3, #5, exec_5c_44_loop2exec_5c_44_done: mov cmd_len, #0exec_5c_44_end: retexec_5c_44_bitmask: inc a movc a, @a+pc ret .db 16, 8, 4, 2, 1exec_5c_45: cjne a, #0x45, exec_5c_46 mov a, #0xFF lcall cout mov a, #0xC3 lcall cout mov dptr, #mesg_version lcall pstr mov a, #'1' lcall cout mov cmd_len, #0 retexec_5c_46: cjne a, #0x46, exec_5c_47 mov a, cmd_len cjne a, #3, exec_5c_46_end mov r0, #cmd_buf+2 mov a, @r0 add a, #224 jnc exec_5c_46_doneexec_5c_46_left: add a, #224 jc exec_5c_46_right add a, #32 lcall move_cursor_left sjmp exec_5c_46_doneexec_5c_46_right: add a, #224 jc exec_5c_46_down add a, #32 lcall move_cursor_right sjmp exec_5c_46_doneexec_5c_46_down: add a, #240 jc exec_5c_46_up add a, #16 lcall move_cursor_down sjmp exec_5c_46_doneexec_5c_46_up: add a, #240 jc exec_5c_46_up add a, #16 lcall move_cursor_up sjmp exec_5c_46_doneexec_5c_46_done: mov cmd_len, #0exec_5c_46_end: ret ;cmd 0x5C 0x47 <button+48> <config+32>, set button configexec_5c_47: cjne a, #0x47, exec_5c_48 mov a, cmd_len cjne a, #4, exec_5c_47_end mov r0, #cmd_buf+2 mov a, @r0 add a, #256 - 48 add a, #256 - 12 jc exec_5c_46_done add a, #12 + pb_config mov r1, a inc r0 mov a, @r0 add a, #256 - 32 mov @r1, aexec_5c_47_done: mov cmd_len, #0exec_5c_47_end: ret ;cmd 0x5C 0x48 <button> <string, 12 bytes> ;button 48 - 59 = string for button down ;button 64 - 75 = string for button up ;button 80 - 91 = string for button repeatexec_5c_48: cjne a, #0x48, exec_5c_49 mov a, cmd_len add a, #241 jnc exec_5c_48_endexec_5c_48_ok: mov r0, #cmd_buf+2 mov a, @r0 add a, #256 - 48 + 0x10 lcall event2addr jc exec_5c_48_done mov r0, #cmd_buf+14exec_5c_48_loop1: mov a, @r0 cjne a, #' ', exec_5c_48_copy clr a mov @r0, a dec r0 cjne r0, #cmd_buf+2, exec_5c_48_loop1exec_5c_48_copy: mov r0, #cmd_buf+3exec_5c_48_loop2: mov a, @r0 inc r0 movx @dptr, a inc dptr cjne r0, #cmd_buf+14, exec_5c_48_loop2 clr a movx @dptr, aexec_5c_48_done: mov cmd_len, #0exec_5c_48_end: ret ;cmd 0x5c 0x49 <param> ;redraw all (param = '8') or a row ('0' <= param <= '7') ; of the screen from the cache ;turn display updates on '9' or off ':'exec_5c_49: cjne a, #'I', exec_5c_4a mov a, cmd_len cjne a, #3, exec_5c_49_end mov a, cmd_buf+2 anl a, #11110000b cjne a, #0x30, exec_5c_49_done mov a, cmd_buf+2 jnb acc.3, exec_5c_49_partial cjne a, #'8', exec_5c_49_toggle lcall redraw sjmp exec_5c_49_doneexec_5c_49_toggle: rrc a mov update_mode, c sjmp exec_5c_49_doneexec_5c_49_partial: anl a, #00000111 mov r7, a lcall redraw_rowexec_5c_49_done: mov cmd_len, #0exec_5c_49_end: ret ;cmd 0x5c 0x4a <'0'|'1'|'2'> <'0'|'1'> write ;cmd 0x5c 0x4a <'4'|'5'|'6'> <'0'> read ;set/read LED/bank_select stateexec_5c_4a: cjne a, #0x4a, exec_5c_4b mov a, cmd_len cjne a, #4, exec_5c_4a_end mov a, cmd_buf+3 rrc a cpl c mov a, cmd_buf+2 jb acc.2, exec_5c_4a_read anl a, #3 jnz exec_5c_4a_notled mov led_pin, c sjmp exec_5c_4a_doneexec_5c_4a_notled: dec a jnz exec_5c_4a_notbank1 mov bank_pin1, c sjmp exec_5c_4a_doneexec_5c_4a_notbank1: dec a jnz exec_5c_4a_done mov bank_pin2, c sjmp exec_5c_4a_doneexec_5c_4a_read: mov dptr, #mesg_io_read lcall pstr mov a, cmd_buf+2 anl a, #11111011b lcall cout anl a, #00000011b jnz exec_5c_4a_notrled setb led_pin mov c, led_pin sjmp exec_5c_4a_read_doneexec_5c_4a_notrled: dec a jnz exec_5c_4a_notrbank1 setb bank_pin1 mov c, bank_pin1 sjmp exec_5c_4a_read_doneexec_5c_4a_notrbank1: dec a jnz exec_5c_4a_done setb bank_pin2 mov c, bank_pin2 sjmp exec_5c_4a_read_doneexec_5c_4a_read_done: mov a, #'1' ; report as active low jnc exec_5c_4a_read_output mov a, #'0'exec_5c_4a_read_output: lcall coutexec_5c_4a_done: mov cmd_len, #0exec_5c_4a_end: ret ;cmd 0x5c 'K' ;control horizontal scrolling display element ; 0x5c 'K' '0' <'0' - '7'> '0' - set speed ; 0x5c 'K' '1' <row+32> <font+32> - set font for row ; 0x5c 'K' '2' <row+32> <'0'|'1'> - disable/enable row ; 0x5c 'K' '3' <row+32> <'0'|'1'> - enable/disable buffer fill for rowexec_5c_4b: cjne a, #'K', _exec_5c_4c mov a, cmd_len cjne a, #5, exec_5c_4a_end mov a, cmd_buf+2 cjne a, #'0', exec_5c_4b_notspeed mov a, cmd_buf+3 anl a, #11111000b cjne a, #0x30, _exec_5c_4b_done mov a, cmd_buf+3 anl a, #00000111b inc a rl a mov hscroll_speed, a mov hscroll_t0_count, #0 sjmp _exec_5c_4b_doneexec_5c_4b_notspeed: cjne a, #'1', exec_5c_4b_notfont mov a, cmd_buf+3 anl a, #11111000b cjne a, #0x20, _exec_5c_4b_done mov a, cmd_buf+3 ;get row anl a, #00000111b add a, #hscroll_font0 mov r0, a mov a, cmd_buf+4 ;get font anl a, #11100000b cjne a, #0x20, exec_5c_4b_done mov a, cmd_buf+4 anl a, #00011111b mov @r0, a_exec_5c_4b_done: sjmp exec_5c_4b_done_exec_5c_4c: sjmp exec_5c_4cexec_5c_4b_notfont: cjne a, #'2', exec_5c_4b_notendis mov a, cmd_buf+3 anl a, #11111000b cjne a, #0x20, exec_5c_4b_done mov a, cmd_buf+3 ;get row anl a, #00000111b mov r0, a add a, #hscroll_end0 mov r1, a inc r0 ;convert index to mask mov a, #0 setb cexec_5c_4b_font_loop: rlc a djnz r0, exec_5c_4b_font_loop mov r0, a mov a, cmd_buf+4 ;get setting anl a, #11111110b cjne a, #0x30, exec_5c_4b_done clr hscroll_fill_en ;disable fill mov a, cmd_buf+4 cjne a, #'1', exec_5c_4b_disable mov a, @r1 jz exec_5c_4b_done ;ignore enable if buffer empty mov a, r0 orl hscroll_en, a sjmp exec_5c_4b_doneexec_5c_4b_disable: mov a, r0 cpl a anl hscroll_en, a sjmp exec_5c_4b_doneexec_5c_4b_notendis: cjne a, #'3', exec_5c_4b_notfill mov a, cmd_buf+3 anl a, #11111000b cjne a, #0x20, exec_5c_4b_done mov a, cmd_buf+3 ;get row anl a, #00000111b mov hscroll_fill_row, a mov a, cmd_buf+4 cjne a, #'1', exec_5c_4b_endfill setb hscroll_fill_en mov a, hscroll_fill_row add a, #hscroll_end0 mov r0, a mov @r0, #0 add a, #(hscroll_pos0 - hscroll_end0) mov r0, a mov @r0, #0 sjmp exec_5c_4b_doneexec_5c_4b_endfill: clr hscroll_fill_en sjmp exec_5c_4b_doneexec_5c_4b_notfill:exec_5c_4b_done: mov cmd_len, #0exec_5c_4b_end: ret ;cmd 0x5c 0x4c <param> ;clear a row ('0' <= param <= '7') of the displayexec_5c_4c: cjne a, #'L', exec_5c_4d mov a, cmd_len cjne a, #3, exec_5c_4c_end mov a, cmd_buf+2 anl a, #11111000b cjne a, #0x20, exec_5c_4c_done mov a, cmd_buf+2 anl a, #00000111b lcall clear_rowexec_5c_4c_done: mov cmd_len, #0exec_5c_4c_end: retexec_5c_4d: ;available for future (legacy code will ignore), 2 data bytesexec_5c_53: cjne a, #0x53, exec_5c_54 mov a, cmd_len cjne a, #4, exec_5c_53_end mov cmd_len, #0exec_5c_53_end: ret ;available for future (legacy code will ignore), 2 data bytesexec_5c_54: cjne a, #0x54, exec_5c_55 mov a, cmd_len cjne a, #4, exec_5c_54_end mov cmd_len, #0exec_5c_54_end: ret ;available for future (legacy code will ignore), 2 data bytesexec_5c_55: cjne a, #0x55, exec_5c_56 mov a, cmd_len cjne a, #4, exec_5c_55_end mov cmd_len, #0exec_5c_55_end: ret ;available for future (legacy code will ignore), 2 data bytesexec_5c_56: cjne a, #0x56, exec_5c_57 mov a, cmd_len cjne a, #4, exec_5c_56_end mov cmd_len, #0exec_5c_56_end: ret ;available for future (legacy code will ignore), 2 data bytesexec_5c_57: cjne a, #0x57, exec_5c_58 mov a, cmd_len cjne a, #4, exec_5c_57_end mov cmd_len, #0exec_5c_57_end: ret ;available for future (legacy code will ignore), 8 data bytesexec_5c_58: cjne a, #0x58, exec_5c_59 mov a, cmd_len cjne a, #10, exec_5c_58_end mov cmd_len, #0exec_5c_58_end: ret ;available for future (legacy code will ignore), 8 data bytesexec_5c_59: cjne a, #0x59, exec_5c_5a mov a, cmd_len cjne a, #10, exec_5c_59_end mov cmd_len, #0exec_5c_59_end: ret ;available for future (legacy code will ignore), 8 data bytesexec_5c_5a: cjne a, #0x5A, exec_5c_unknown mov a, cmd_len cjne a, #10, exec_5c_5a_end mov cmd_len, #0exec_5c_5a_end: retexec_5c_unknown: lcall phex mov a, #'*' lcall cout mov cmd_len, #0 ret;***********************************************************************;** **;** Misc Functions **;** **;*********************************************************************** ;convert recv'd byte in Acc to a font # (by subtracting 32) ;C=0 if legal, C=1 if illegalbyte2font: add a, #224 jnc b2f_nope add a, #240 jc b2f_nope add a, #16
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -