2024-11-23 16:56:29 +05:30

190 lines
2.2 KiB
NASM

// buffer.asm
//
// read 4 bytes of textfile from SPI starting at address 0x040000 and write
// the string to SRAM. Finally read the string from SRAM and send
// the string to UART_TX
//
// Put your code here:
// 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
@WRITECOUNT
M=0
@SENDCOUNT
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)
@WAITWRITE
0;JMP
(WAITWRITE)
@SPI
D=M
@WAITWRITE
D;JLT
@WRITE
0;JMP
(WRITE)
@SPI
M=0
@4
D=A
@COUNT
M=D
(FROMSPI)
@COUNT
DM=M-1
@FROMSPI
D;JGT
@WRITECOUNT
D=M
@SRAM_A
M=D
@SPI
D=M
@SRAM_D
M=D
@WRITECOUNT
M=M+1
@8
D=A
@WRITECOUNT
D=D-M
@ENDWRITE
D;JEQ
@WAITWRITE
0;JMP
(ENDWRITE)
@WAITBOOT
0;JMP
(WAITBOOT)
@UART_TX
D=M
@BOOT
D;JEQ
@WAITBOOT
0;JMP
(BOOT)
@SENDCOUNT
D=M
@SRAM_A
M=D
@SRAM_D
D=M
@UART_TX
M=D
@SENDCOUNT
M=M+1
@8
D=A
@SENDCOUNT
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