📄 ram_inst.fmt
字号:
;NAMEREG sX, <name> ; Rename register sX with <name>
CONSTANT VGA_ADDR_R, 10 ; Define constant <name>, assign value
CONSTANT VGA_ADDR_G, 11 ;
CONSTANT VGA_ADDR_B, 12 ;
CONSTANT PUSHBUTTON_ADDR, 20 ;
CONSTANT SEGLED_ADDR_LED, 00 ;
CONSTANT SEGLED_ADDR_SEGUP, 01 ;
CONSTANT SEGLED_ADDR_SEGLOW, 02 ;
CONSTANT SEGLED_ADDR_SEGDOT, 03 ;
; ROM output file is always called
; <filename>.vhd
ADDRESS 000 ; Programs always start at reset vector 0
ENABLE INTERRUPT ; If using interrupts, be sure to enable
; the INTERRUPT input
BEGIN:
; <<< your code here >>>
LOAD s0, 00 ;
LOAD s1, 00 ;
LOAD s2, 00 ;
LOAD s3, 00 ;
DEALS6:
COMPARE s6, FF ;
JUMP Z, DEALS5 ;
; LOAD S7,S7;
LOAD s7, s7 ;
LOAD s7, s7 ;
ADD s6, 01
JUMP DEALS6
DEALS5:
LOAD s6, 00 ;
ADD s5, 01 ;
COMPARE s5, FF ;
JUMP Z, DEALS4 ;
JUMP DEALS6
DEALS4:
LOAD s5, 00 ;
ADD s4, 01 ;
COMPARE s4, 07 ;
JUMP Z, S407
JUMP DEALS6
S407:
ADD s0, 01
ADD s1, 01
ADD s2, 01
ADD s3, 01
OUTPUT s0, SEGLED_ADDR_LED ;
OUTPUT s1, SEGLED_ADDR_SEGUP ;
OUTPUT s2, SEGLED_ADDR_SEGLOW ;
OUTPUT s3, SEGLED_ADDR_SEGDOT ;
LOAD s4, 00 ;
LOAD s5, 00 ;
LOAD s6, 00 ;
JUMP DEALS6
JUMP BEGIN ; Embedded applications never end
ISR: ; An Interrupt Service Routine (ISR) is
; required if using interrupts
; Interrupts are automatically disabled
; when an interrupt is recognized
; Never re-enable interrupts during the ISR
INPUT sA, PUSHBUTTON_ADDR ; Read the ISR register from Push Button module
LOAD sB, sA ;
AND sB, 0F ; mask out the 3 bit of LSB ( B,G,R )
R:
RR sB ; The LSB is in the carry => R field
JUMP NC, G ;
INPUT sC, VGA_ADDR_R ;
ADD sC, 01 ;
OUTPUT sC, VGA_ADDR_R ;
G:
RR sB ; The Less LSB is in the carry => G field
JUMP NC, B ;
INPUT sC, VGA_ADDR_G ;
ADD sC, 01 ;
OUTPUT sC, VGA_ADDR_G ;
B:
RR sB ; The 3rd LSB is in the carry => B field
JUMP NC, CLEAR ;
INPUT sC, VGA_ADDR_B ;
ADD sC, 01 ;
OUTPUT sC, VGA_ADDR_B ;
CLEAR:
RR sB
JUMP NC, INTEND ;
LOAD s0, 00
LOAD s1, 00
LOAD s2, 00
LOAD s3, 00
LOAD s4, 00 ;
LOAD s5, 00 ;
LOAD s6, 00 ;
OUTPUT s0, SEGLED_ADDR_LED ;
OUTPUT s1, SEGLED_ADDR_SEGUP ;
OUTPUT s2, SEGLED_ADDR_SEGLOW ;
OUTPUT s3, SEGLED_ADDR_SEGDOT ;
INTEND:
LOAD sD, 00
OUTPUT sD, PUSHBUTTON_ADDR ;
RETURNI ENABLE ; Return from interrupt service routine
; Use RETURNI DISABLE to leave interrupts
; disabled
ADDRESS 3FF ; Interrupt vector is located at highest
; instruction address
JUMP ISR ; Jump to interrupt service routine, ISR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -