143 lines
1.6 KiB
NASM
Raw Normal View History

2023-01-11 11:13:09 +01:00
// cat.asm
//
// load spi flash rom starting at address 0x040000 and write the
// data to UART_TX
//
// Put your code here:
2024-10-25 13:47:27 -04:00
2024-11-23 16:56:29 +05:30
// D=M -> 1111110000010000
// M=D -> 1110001100001000
// M=0 -> 1110101010001000
2024-10-25 13:47:27 -04:00
2024-11-23 16:56:29 +05:30
// read data starting at address
// 0x03 0x04 0x00 0x00
@3
D=A
2024-10-25 13:47:27 -04:00
@128
2024-11-23 16:56:29 +05:30
M=D
@4
2024-10-25 13:47:27 -04:00
D=A
2024-11-23 16:56:29 +05:30
@129
2024-10-25 13:47:27 -04:00
M=D
2024-11-23 16:56:29 +05:30
@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
2024-10-25 13:47:27 -04:00
0;JEQ
2024-11-23 16:56:29 +05:30
(WAITREAD)
@SPI
D=M
@WAITREAD
D;JLT
@READ
0;JMP
(READ)
// read
@CHARREAD
A=M
D=M
@SPI
2024-10-25 13:47:27 -04:00
M=D
2024-11-23 16:56:29 +05:30
@CHARREAD
M=M+1
@132
D=A
@CHARREAD
D=D-M
@WAITREAD
D;JGT
@ENDREAD
0;JMP
(ENDREAD)
@WAITBOOT
2024-10-25 13:47:27 -04:00
0;JMP
(WAITBOOT)
@UART_TX
D=M
@BOOT
D;JEQ
@WAITBOOT
0;JMP
(BOOT)
2024-11-23 16:56:29 +05:30
@SPI
M=0
@4
D=A
@COUNT
M=D
(FROMSPI)
@COUNT
DM=M-1
@FROMSPI
D;JGT
@SPI
2024-10-25 13:47:27 -04:00
D=M
@UART_TX
M=D
2024-11-23 16:56:29 +05:30
@READCOUNT
2024-10-25 13:47:27 -04:00
M=M+1
2024-11-23 16:56:29 +05:30
@4
2024-10-25 13:47:27 -04:00
D=A
2024-11-23 16:56:29 +05:30
@READCOUNT
2024-10-25 13:47:27 -04:00
D=D-M
@ENDBOOT
D;JEQ
@WAITBOOT
0;JMP
(ENDBOOT)
@POLL
0;JMP
2024-11-23 16:56:29 +05:30
// LED<->BUT loop
(POLL)
@BUT
D=!M
@LED
M=D
@POLL
0;JMP