这是我一年前初上51hei论坛发问,获得网友指点做出来的61键含力度的midi电子琴线路与程序,这原本是在STC12的单片机开发板上开发的,底板也做好了,就是没有焊接,后来觉得这板太过复杂,要用两的单片机协作才能完成,就设计了另一片比较简单,只用一只STC15的板,心想移植起来应该是很顺利吧,板子焊好后,插入键盘扫描线,按了按琴键,没有反应,原来定时器参数很多是不同的,改正之后,键盘终于有反应了,但只有一些键盘有反应,翻看说明书才知道P0上电后必须设定为双向标准接口才行的,但是有12个键盘失常,按着不放会不断产生MIDI码,这在软件里是没有的。怀疑是否接线有短路,或者底板有误,但换上另一底板后毛病一样。
为了验证软件没有错误,连夜焊接了用STC12的板,没想到“一插就响”,一点毛病都没有,可见问题出在STC12和STC15系列的不同。应该是里面的那个开关不需设定,不知翻阅了多少次整千页的STC15说明书都没有找到那个开关。
这板子用了P0,P6,P7,P6和P7是没有任何复用开关的,应该是P0的问题,但我查看键盘的接线,那12个毛病的键都是连着P6.3的,是不是P6有未知的复用开关呢?请论坛用过STC15的前辈指点一下。
另外我发现市面上是买不到64脚的STC15开发板,STC8就有很多,这是否意味着STC15只是过渡性产品?
;THIS IS FOR KEYBOARD TESTING
;THIS VERSION CHANGE CRYSTAL FROM 18M TO 11M, CHANGE AUXR.S2MODE TO ZERO 3/9/2018 output as midi
;32H FOR ROW COUNT LOOP
;33H FOR STORE SCAN DATA(MAY CONAIN FEW 0 THAT MEAN CONTACT)
;34H FOR LOOP
;35H FOR ADD TO ROW FORM 1-8 OR 9-16
;3AH FOR KEYNUMBER
FIRSTBUFFER EQU 80H
LASTBUFFER EQU 0FFH
;BRT EQU 09CH
;BRTLOAD EQU 212 ;212(22m, 31.875 midi smod=1) 219(18.432, 32.1U MIDI SMOD=1) 250(3.68, 38400) 247(11.0592, 38400), 245(11.0592,31.4midi);251(18.432, 115200)
;BRTLOAD EQU 226 ;226(18.432, 38400 SMOD=1) 241(18.432, 38400) 250(3.68, 38400) 247(11.0592, 38400), 251(18.432, 115200)
S2CON EQU 9AH ;S2SM0, S2SM1, S2SM2, S2REN, S2TB8, S2RB8, S2TI, S2RI
IE2 EQU 0AFH ;X, X, X, X, X, X, ESPI, ES2
S2BUF EQU 9BH
T2H EQU 0D6H ;UART2 HIGH T2 AS
T2L EQU 0D7H ;UART2 LOW
;P0 EQU 080H
;P1 EQU 090H
;P2 EQU 0A0H
;P3 EQU 0B0H
P4 EQU 0C0H
P5 EQU 0C8H
P6 EQU 0E8H
P7 EQU 0F8H
AUXR EQU 8EH
AUXR2 EQU 08FH
AUXR1 EQU 0A2H
WAKE_CLKO EQU 08FH
T4T3M EQU 0D1H
P_SW2 EQU 0BAH
P_SW1 EQU 0A2H
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP EXT_INT0 ;EXTERNAL INTERRUPT0
ORG 000BH
LJMP TIMER_0 ;TIMER0 INTERRUPT
ORG 0013H
LJMP EXT_INT1 ;EXTERNAL INTERRUPT1
ORG 001BH
LJMP TIMER_1 ;TIMER_1 INTERRUPT
ORG 0023H
LJMP UART1 ;UART1 RECEIVED INTERRUPT
ORG 002BH
LJMP ADC
ORG 0033H
LJMP LVD
ORG 003BH
LJMP PCA
ORG 0043H
LJMP UART2 ;UART2 RECEIVED INTERRUPT
ORG 004BH
LJMP SPI
ORG 0053H
LJMP INT2
ORG 005BH
LJMP INT3
ORG 0063H
LJMP TIMER_2
ORG 0083H
LJMP INT4
ORG 008BH
LJMP UART3
ORG 0093H
LJMP UART4
ORG 009BH
LJMP TIMER_3
ORG 00A3H
LJMP TIMER_4
ORG 00ABH
LJMP COMPARER
ORG 00B3H
LJMP PWM
ORG 00BBH
LJMP PWM_ERR
ORG 0100H ; PROGRAM SET
MAIN:
MOV P0, #0FFH
;MOV P1, #0FFH
;MOV P2, #0FFH
;MOV P3, #0FFH
;MOV P4, #0FFH
;MOV P5, #0FFH
;MOV P6, #0FFH
;MOV P7, #0FFH
;MOV P_SW1, #00000000B ;BIT7=U1 S1-S1, 6=U1-S1-S0
MOV P_SW2, #00000110B ;4=U4-SW TO 2=U3-SW 1=U1-SW
MOV 93H, #00000000B ;SETP0 0,0=I/0, 0,1=HIGH CURRENT OUTPUT, 1,0=HIGH IMPEDENY INPUT 1,1=OPEN COLLECTIVE OUTPUT
MOV 94H, #00000000B ;SETP0
;MOV 91H, #00000000B ;SETP1
;MOV 92H, #00000000B ;SETP1
;MOV 95H, #00000000B ;SETP2.4 AS HIGHOUTXURRENT FOR IR POWER
;MOV 96H, #00010000B ;SETP2.4 AS HIGHOUTXURRENT
;MOV 0B1H, #00000000B ;SETP3
;MOV 0B92H, #00000000B ;SETP3
;MOV 0B3H, #00000000B ;SETP4.1 AS HIGHOUTXURRENT FOR IR POWER FOR NEW LE BOARD
;MOV 0B4H, #00010010B ;SETP4.1 AS HIGHOUTXURRENT
;MOV 0C9H, #00000000B ;SETP5
;MOV 0CAH, #00000000B ;SETP5
MOV 0CBH, #00000000B ;SETP6
MOV 0CCH, #00000000B ;SETP6
MOV 0E1H, #00000000B ;SETP7
MOV 0E2H, #00000000B ;SETP7
;MOV 97H, #00001111B ;SLOW DOWN
MOV WAKE_CLKO,#00000000B ;ENABLE BRT(=4),T1(=2) T0(=1) HAVE CLOCK OUTPUT T2@P1.0 T1@P3.5 T0@P3.4
MOV T2H, #0FFH
MOV T2L, #112 ;212(22m 31250 2us) 214 162=57600 160=56000 112=38400
MOV AUXR,#00010100B ;T0x12,T1x12,UART_M0x6,T2RUN,T2C/T,T2x12,EXTRAM,S1ST2
;MOV AUXR1, #00010000B ;MOVE UART2 TO TX2=P4.3 RX2=4.2
MOV AUXR2,#00000100B ;8FH x, EX4,EX3,EX2,X,T2CLKO, T1CLK0, T0CLK0
MOV T4T3M, #00000000B ;T4RUN, T4C/T, T4x12, T4OUT,
MOV TMOD, #00010001B ;TIMER_1 AS MOD1 (16BIT COUNTER) ;TIMER_0 AS MOD 1 (16BIT COUNTER)
;GATE, C/T,M1,M0(T1) GATE, C/T,M1,MO(T0)
MOV PCON, #10000000B ;THIS DOUBLE THE BRT AND T0 T1 RATE
SETB ET1 ;ENABLE T1 INTERRUPT
SETB TR1 ;RUN T1
LCALL INITIAL_UART2 ;USE BRT AS SERIAL BAUD GENERATE FOR UART2
SETB EA ;ENAABLE ALL INTERRUPT
LCALL CLEANRAM
MOV R0, #FIRSTBUFFER ;INIT THE BTYE TO SENT IN BUFFER POINTER
MOV R1, #FIRSTBUFFER ;INIT THE POINTER FOR BYTE CAN STORE IN BUFFER
CLR P2.5
SCANNER:
DJNZ 4CH, SCANNER1
CLR P2.5
SCANNER1:
SCANP2: ; SHIFT P2 AND READ P0
MOV 32H, #8 ;8 BITS TO SHIFT
MOV 50H, #11111111B ;THIS BYTE FOR SHIFT AND OUTPUT TO P2 &P3
CLR C
SCANP2A:
MOV A, 50H
RRC A
MOV 50H, A
;======P6
MOV P6, 50H ;P2 ONE ROW LOW
LCALL DELAY4 ;MUST WAIT STABLE
MOV A, P0 ;READ FROM P0
CPL A
MOV 35H, #0 ;THIS WILL ADD TO ROW TO MAKE 0-7
LCALL STOREDATA
MOV P6, #11111111B ;END OF SCANP2
LCALL DELAY4
;======P7
MOV P7, 50H ;P3 ONE ROW LOW
LCALL DELAY4 ;MUST WAIT STABLE
MOV A, P0 ;READ FROM P0
CPL A
MOV 35H, #8 ;THIS WILL ADD TO ROW TO MAKE 0-7
LCALL STOREDATA
MOV P7, #11111111B ;END OF SCANP3
LCALL DELAY4
SCANNEXT1:
SETB C
DJNZ 32H, SCANP2A
NOP ;CHECK BUFFER AND SENT
NOP
MOV A, R0
XRL A, R1
JZ SCANNEREXIT ;R0 R1 EQUAL NO NEW BYTE
;LCALL OUTBUFFER
SETB TR1
SCANNEREXIT:
JMP SCANNER
PUTBUFFER:
MOV @R1, A
CJNE R1, #LASTBUFFER, NEXTR1
MOV R1, #FIRSTBUFFER
JMP PUTBUFFEREXIT
NEXTR1:
INC R1 ;POINT TO NEXT BUFFER
PUTBUFFEREXIT:
RET
OUTBUFFER:
MOV A, @R0
LCALL SENTONEBYTE2
CJNE R0, #LASTBUFFER, NEXTR0
MOV R0, #FIRSTBUFFER
JMP OUTBUFFEREXIT
NEXTR0:
INC R0 ;POINT TO NEXT BUFFER
OUTBUFFEREXIT:
RET
STOREDATA: ;32H CONTAIN ROW UMBER THAT CAUSE LOW
PUSH PSW
MOV 34H, #8 ;8 BIT TO SHIFT
MOV 33H, A ;ACC CONTAIN 8BITS WITH FEW HIGH(CAUSE BY KEYPRESS)
STOREDATA1: ;WILL LOOP 8 TIMES CHECKING EVERY BIT, CONTROL BY 34H
LCALL COUNTPOSITION ;CODE BY SCANNER 4C 54 COUNT BY
LCALL KEYMAP ;RETURN KEYNUMBER A AFTER LOOKUP THE MAP THAT REPRESENT KEYNUMBER(0-60), IF FIRST KEY THEN 0(UPPER),80(LOWER)
MOV 3AH, A ;SAVE KEYNUMBER TO 3AH, 0-127 IS UPPER KEY, 128-255 IS LOWER KEY
MOV A, 33H
RLC A ;CHECK EACH BIT OF 33H SEE 0 OR 1 AND DECIDE WHERE TO GO
MOV 33H, A
JNC DOKEY1 ;CONTACT POINT NOT CONTACT GO NOTEOFF SUBROTINE
LCALL NOTEON ;NOTE ON SUBROUTINE
JMP STOREDATANEXT
DOKEY1:
LCALL NOTEOFF ;NOTEOFF SUBROUTINE
STOREDATANEXT:
DJNZ 34H, STOREDATA1 ;8 LOOP NEEDED
DOKEYEXIT:
POP PSW
RET
NOTEON: ;KEY CONTACT DETECTED
MOV A, 3AH
RLC A ;CHECK UPPER OR LOWER
JC NOTEON1 ;LOWER KEY SO DO OUTPUT
;----------UPPER
MOV DPH, #0
MOV DPL, 3AH
MOVX A, @DPTR ;READ OLD DATA
JNZ NOTEONEXIT ;ALREADY CONTACTED, DO NOTHNG SO EXIT
;;---DELAY TIME CHECK
;MOV DPH, #1
;MOV DPL, 3AH
;MOVX A, @DPTR ;READ OLD DATA
;JNZ NOTEONEXIT ;TIMER NOT REACH 0 SO MUST WAIT SO EXIT
MOV DPH, #0
MOV DPL, 3AH
MOV A, #1
MOVX @DPTR, A ;CONTACT JUST START, PUT 1 FOR COUNT UP BY TIMER EVERY 1MS
MOVX @DPTR, A ;CONTACT JUST START, PUT 1 FOR COUNT UP BY TIMER EVERY 1MS
LCALL DELAY4
JMP NOTEONEXIT
;----------LOWER
NOTEON1:
MOV A, 3AH
ANL A, #01111111B ;MASKING BIT7
MOV DPH, #0
MOV DPL, A
MOVX A, @DPTR ;READ VELOCITY
MOV 3BH, A ;SAVE VELOCITY
JZ NOTEONEXIT ;UPPER KEY NOT YET CONTACTED, DO NOTHING GO EXIT
INC A ;INC 1 TO SEE, IF FFH THEN WILL BE ZERO
JZ NOTEONEXIT ;IF FFH THEN WILL ZERO MEAN NOTE ALREADY OUTPUT, NEED WAIT FOR NOTEOFF SENT, DO NOTHING GO EXIT
INC A
JZ NOTEONEXIT ;IF FEH THEN WILL ZERO MEAN NOTE ALREADY OUTPUT, NEED WAIT FOR UPPERKEY RELEASE, DO NOTHING GO EXIT
MOV A, #10010000B ;MIDI NOTEON CHANNEL1
LCALL PUTBUFFER ;SENT STATUS
MOV A, 3AH
ANL A, #01111111B ;MASKING BIT7
LCALL PUTBUFFER ;SENT KEY NUMBER
MOV A, 3BH
CPL A ;PROCESS VELOCITY, CPL AND DIV BY 2
MOV B, #2
DIV AB
;ADD A, #2 ;MINIMUM 4, MAZ 7F
ANL A, #01111111B ;MASKING BIT7, PROTECT NOT OVERFLOW
;MOV A, #7EH
LCALL PUTBUFFER ;SENT VELOCITY
MOV A, 3AH
ANL A, #01111111B ;MASKING BIT7
MOV DPH, #0
MOV DPL, A
MOV A, #0FEH
MOVX @DPTR, A ;MARK AS FFH WAIT FOR RELEASE FOR SENT NOTEOFF
MOVX @DPTR, A ;MARK AS FFH WAIT FOR RELEASE FOR SENT NOTEOFF
LCALL DELAY4
NOTEONEXIT:
RET
NOTEOFF: ;KEY NOT-CONTACT DETECTED
MOV A, 3AH
RLC A ;CHECK UPPER OR LOWER
JNC NOTEOFF1 ;UPPER KEY SO DO NOTEOFF
;=====LOWER KEY
MOV A, 3AH
ANL A, #01111111B ;MASKING
NOP ;LOWER KEY RELEASE, PUT FF
NOP
MOV DPH, #0
MOV DPL, A
MOVX A, @DPTR ;READ OLD DATA
INC A
INC A
JNZ NOTEOFFEXIT ;IF NOT FEH THEN WILL BE NOT ZERO MEAN NOTEON NOT YET SENT, DO NOTHING SO EXI
MOV A, #0FFH
MOVX @DPTR, A ;MARK THAT KEY LOCATION #FF THAT ALLOW NOTEOFF SENT
MOVX @DPTR, A ;MARK THAT KEY LOCATION #FF THAT ALLOW NOTEOFF SENT
LCALL DELAY4
JMP NOTEOFFEXIT
;UPPER KEY
NOTEOFF1:
NOP ;UPPER KEY RELEASE, CHECK 0FFH FOR SENT NOTEOFF
NOP
MOV DPH, #0
MOV DPL, 3AH
MOVX A, @DPTR ;READ OLD DATA
INC A
JNZ NOTEOFFEXIT ;IF NOT FFH THEN WILL BE NOT ZERO MEAN NOTEON NOT YET SENT OR N0T YET RELAESE, DO NOTHING SO EXIT
;-------SENT NOTEOFF
MOV A, #10000000B ;MIDI NOTEOFF CHANNEL1
LCALL PUTBUFFER ;SENT NOTEOFF STATUS BYTE
MOV A, 3AH
LCALL PUTBUFFER ;SENT KEYNUMBER
MOV A, #0
LCALL PUTBUFFER ;SENT ZERO VELOCITY
MOV DPH, #0
MOV DPL, 3AH
MOV A, #0
MOVX @DPTR, A ;MARK THAT KEY LOCATION 0 TO RECEIVED NEW CONTACT PRESS
MOVX @DPTR, A ;MARK THAT KEY LOCATION 0 TO RECEIVED NEW CONTACT PRESS
MOV DPH, #1 ;PUT A VALUE TO KEY LOCATION#2 FOR NOT REPEAT DELAY
MOV DPL, 3AH
MOV A, #30H ;THIS IS THE VALUE!! ;30H
MOVX @DPTR, A ;MARK THAT KEY LOCATION 0 TO RECEIVED NEW CONTACT PRESS
MOVX @DPTR, A ;MARK THAT KEY LOCATION 0 TO RECEIVED NEW CONTACT PRESS
LCALL DELAY4
NOTEOFFEXIT:
RET
COUNTPOSITION:
PUSH PSW
MOV A, 32H ;ROW POSITION 1-8 P3,P2
ADD A, 35H ;IF P2 THEN ADD 0(REMAIN 1-8), IF P3 THEN ADD 8(BECOME 9-16)
MOV B, #8 ;8 CONTACT POINT FOR EACH ROW
MUL AB ;NUMBER 8,16,24,32,40.......128
CLR C
SUBB A, #8 ;MAKE A 0,8,16,24.....120
ADD A, 34H ;34H CONTAIN 1-8 COLUME NUMBER(EACH BIT OF 33H) FORM 1 TO 128
DEC A ;MAKE AS 0-127 SYSTEM
POP PSW
RET
KEYMAP:
MOV DPH, #10H
MOV DPL, #00H
MOVC A,@A+DPTR
ADD A, #8
RET
TIMER_1: ;USE FOR MICRO CLOCK 1MS 184, 30 ,100US=248 250
;CPL P1.4
PUSH ACC
PUSH PSW
PUSH DPH
PUSH DPL
MOV DPH, #0
MOV DPL, #0
NOP
NOP
TIMERLOOP:
MOVX A, @DPTR
JZ TIMER_1NEXT ;ZERO MEAN NOT UPPER KEY NOT YET PRESS, SO NO ADD
CJNE A, #0FFH, TIMERLOOP1A ;NOT FF THEN CAN INCREASE VALUE, FF MEAN UPPER KEY RELEASED
JMP TIMER_1NEXT
TIMERLOOP1A:
CJNE A, #0FEH, TIMERLOOP1 ;NOT FE THEN CAN INCREASE VALUE, FE MEAN LOWER KEY HAS RELEASE
JMP TIMER_1NEXT
TIMERLOOP1: ;HERE CHECK NOT YET MAX THEN ADD
CJNE A, #0FDH, TIMER_1A ;NOT YET MAX
JMP TIMER_1NEXT
TIMER_1A:
INC A
MOVX @DPTR, A
TIMER_1NEXT:
INC DPL
MOV A, DPL
CJNE A, #70, TIMERLOOP ;#70 IS 70 KEY TO CHECK
TIMER_1EXIT:
MOV TH1, #253; #200;#248
MOV TL1, #0 ;#250
POP DPL
POP DPH
POP PSW
POP ACC
RETI
SENTONEBYTE2: ;A SENT OUT
PUSH ACC
MOV S2BUF, A ;LOAD A TO BUFFER
MOV A, S2CON ;1111,1101, CLEAR SECONDARY UART TRANSIMIT INTERRUPT FLAG
ANL A, #0FDH ;#11111101B
MOV S2CON, A
UART2WAIT:
MOV A, S2CON
ANL A, #02H ;0000,0010
CJNE A,#02H, UART2WAIT
SETB P2.5
MOV A, S2CON
ANL A, #0FDH ;1111,1101, CLEAR SECONDARY UART TRANSIMIT INTERRUPT FLAG
MOV S2CON, A
NOP
POP ACC
RET
DELAY4:
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RET
EXT_INT0: ;IF P3.2 H2L COME HERE SET TIMER, ONLY FIRST H2L WILL ACT
RETI
TIMER_0: ;CHECK INPUT MIDI SIGNAL AT P3.2
RETI
EXT_INT1: ;USE FOR INFRA RED
RETI
INITIAL_UART2: ;USE FOR SENT MIDI DATA
MOV S2CON, #01010000B ;SET AS BAUD VERIABLE, NO ODD/EVEN CHECK
MOV IE2, #01H ;ENABLE UART2 INTERRUPT
RET
;-----INTERUPT
UART1:
RETI
ADC:
RETI
PCA:
RETI
LVD:
RETI
SPI:
RETI
UART2:
RETI
INT2:
RETI
INT3:
RETI
TIMER_2:
RETI
INT4:
RETI
UART3:
RETI
UART4:
RETI
TIMER_3:
RETI
TIMER_4:
RETI
COMPARER:
RETI
PWM:
RETI
PWM_ERR:
RETI
CLEANRAM:
MOV DPH,#0
MOV DPL, #0
CLEANRAM1:
MOV A, #0
MOVX @DPTR, A
INC DPL
MOV A, DPL
JNZ CLEANRAM1
INC DPH
MOV A, DPH
CJNE A, #4, CLEANRAM1
RET
DELAY3:
MOV 56H, #255
SLOWDOWN0:
MOV 55H, #255 ;255
SLOWDOWN:
MOV 57H, #11 ;6 ;1
SLOWDOWN2:
DJNZ 57H, SLOWDOWN2
DJNZ 55H, SLOWDOWN
DJNZ 56H, SLOWDOWN0
RET
ORG 1000H ;KEY MAPPING CONVERT SCANNER NUMBER TO KEYBOARD PHYSICAL POSITION (MUSIC KEY 1-61)
;UPPER-KEY+128=LOWER-KEY
;OPTAIN UPPER CONTACT POINT'S SCAN CODE MANUALLY AND PUT KEYNUMBER AT SCANCODE VALUE POSITION
;OPTAIN LOWER CONTACT POINT'S SCAN CODE MANUALLY AND PUT KEYNUMBER+128 AT SCANCODE VALUE POSITION
;EXAMPLE: IF KEY#38H, UPPER KEY SCANCODE IS 28H,PUT 28H POSITION AS 38H, LOWER KEY SCANCODE IS 30H, PUT 30H POSITION AS 8+38H=B8H
; 00H 01H 02H 03H 04H 05H 06H 07H 08H 09H 0AH 0BH 0CH 0DH 0EH 0FH
; ---------------------------------------------------------------
DB 20H,21H,22H,23H,24H,25H,26H,27H,30H,31H,32H,33H,34H,35H,36H,37H ;0 16 0F
DB 0B0H,0B1H,0B2H,0B3H,0B4H,0B5H,0B6H,0B7H,28H,29H,2AH,2BH,2CH,2DH,2EH,2FH ;0 16 1F
DB 0A8H,0A9H,0AAH,0ABH,0ACH,0ADH,0AEH,0AFH,38H,39H,3AH,3BH,3CH,00H,00H,00H ;0 16 2F
DB 0B8H,0B9H,0BAH,0BBH,0BCH,00H,00H,00H,90H,91H,92H,93H,94H,95H,96H,97H ;0 16 3F
DB 00H,01H,02H,03H,04H,05H,06H,07H,08H,09H,0AH,0BH,0CH,0DH,0EH,0FH ;0 80 4F
DB 88H,89H,8AH,8BH,8CH,8DH,8EH,8FH,80H,81H,82H,83H,84H,85H,86H,87H ;0 96 5F
DB 10H,11H,12H,13H,14H,15H,16H,17H,98H,99H,9AH,9BH,9CH,9DH,9EH,9FH ;0 16 6F
DB 18H,19H,1AH,1BH,1CH,1DH,1EH,1FH,0A0H,0A1H,0A2H,0A3H,0A4H,0A5H,0A6H,0A7H ;0 16 7F
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H ;0 16 8F
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H ;0 16 9F
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H ;0 16 AF
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H ;0 16 BF
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H ;0 16 CF
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H ;0 16 DF
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H ;0 16 EF
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H ;0 16 FF
END
|