143 lines
1.6 KiB
NASM
143 lines
1.6 KiB
NASM
// cat.asm
|
|
//
|
|
// load spi flash rom starting at address 0x040000 and write the
|
|
// data to UART_TX
|
|
//
|
|
// Put your code here:
|
|
|
|
// D=M -> 1111110000010000
|
|
// M=D -> 1110001100001000
|
|
// M=0 -> 1110101010001000
|
|
|
|
// read data starting at address
|
|
// 0x03 0x04 0x00 0x00
|
|
@3
|
|
D=A
|
|
@128
|
|
M=D
|
|
@4
|
|
D=A
|
|
@129
|
|
M=D
|
|
@130
|
|
M=0
|
|
@131
|
|
M=0
|
|
|
|
// wake up from deep power down and wait 3us
|
|
// 0xAB
|
|
@171
|
|
D=A
|
|
@SPI
|
|
M=D
|
|
@4
|
|
D=A
|
|
@COUNT
|
|
M=D
|
|
(DECR1)
|
|
@COUNT
|
|
DM=M-1
|
|
@DECR1
|
|
D;JGT
|
|
@511
|
|
D=A
|
|
@SPI
|
|
M=D
|
|
@21
|
|
D=A
|
|
@COUNT
|
|
M=D
|
|
(DECR2)
|
|
@COUNT
|
|
DM=M-1
|
|
@DECR2
|
|
D;JGT
|
|
|
|
//command stack base address
|
|
@128
|
|
D=A
|
|
@CHARREAD
|
|
M=D
|
|
@READCOUNT
|
|
M=0
|
|
@WAITREAD
|
|
0;JEQ
|
|
|
|
(WAITREAD)
|
|
@SPI
|
|
D=M
|
|
@WAITREAD
|
|
D;JLT
|
|
@READ
|
|
0;JMP
|
|
|
|
(READ)
|
|
// read
|
|
@CHARREAD
|
|
A=M
|
|
D=M
|
|
@SPI
|
|
M=D
|
|
@CHARREAD
|
|
M=M+1
|
|
@132
|
|
D=A
|
|
@CHARREAD
|
|
D=D-M
|
|
@WAITREAD
|
|
D;JGT
|
|
@ENDREAD
|
|
0;JMP
|
|
|
|
(ENDREAD)
|
|
@WAITBOOT
|
|
0;JMP
|
|
|
|
(WAITBOOT)
|
|
@UART_TX
|
|
D=M
|
|
@BOOT
|
|
D;JEQ
|
|
@WAITBOOT
|
|
0;JMP
|
|
|
|
(BOOT)
|
|
@SPI
|
|
M=0
|
|
@4
|
|
D=A
|
|
@COUNT
|
|
M=D
|
|
(FROMSPI)
|
|
@COUNT
|
|
DM=M-1
|
|
@FROMSPI
|
|
D;JGT
|
|
@SPI
|
|
D=M
|
|
@UART_TX
|
|
M=D
|
|
@READCOUNT
|
|
M=M+1
|
|
@4
|
|
D=A
|
|
@READCOUNT
|
|
D=D-M
|
|
@ENDBOOT
|
|
D;JEQ
|
|
@WAITBOOT
|
|
0;JMP
|
|
|
|
(ENDBOOT)
|
|
@POLL
|
|
0;JMP
|
|
|
|
// LED<->BUT loop
|
|
(POLL)
|
|
@BUT
|
|
D=!M
|
|
@LED
|
|
M=D
|
|
@POLL
|
|
0;JMP
|