📄 result
字号:
Invalid keyboard code specified
KCPSM3 v1.20. Ken Chapman (Xilinx-UK) 2004
The assembler for KCPSM3 Programmable State Machine
PASS 1 - Reading input PSM file
;NAMEREG sX, <name> ; Rename register sX with <name>
CONSTANT VGA_ADDR_R, 00 ; Define constant <name>, assign value
CONSTANT VGA_ADDR_G, 01 ;
CONSTANT VGA_ADDR_B, 02 ;
CONSTANT PUSHBUTTON_ADDR,10;
CONSTANT SEGLED_ADDR_LED,20;
CONSTANT SEGLED_ADDR_SEGUP,21;
CONSTANT SEGLED_ADDR_SEGLOW,22;
CONSTANT SEGLED_ADDR_SEGDOT,23;
; 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, FB;
LOAD S1, FA;
LOAD S2, FF;
LOAD S3, FF;
OUTPUT S0,SEGLED_ADDR_LED;
OUTPUT S1,SEGLED_ADDR_SEGUP;
OUTPUT S2,SEGLED_ADDR_SEGLOW;
OUTPUT S3,SEGLED_ADDR_SEGDOT;
loop:
JUMP loop;
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 S0, PUSHBUTTON_ADDR ; Read the ISR register from Push Button module
LOAD S1, S0 ;
AND S1,07 ; mask out the 3 bit of LSB ( B,G,R )
R:
RR S1 ; The LSB is in the carry => R field
JUMP NC, G ;
INPUT S2, VGA_ADDR_R;
ADD S2 , 01 ;
OUTPUT S2,VGA_ADDR_R;
G:
RR S1 ; The Less LSB is in the carry => G field
JUMP NC, B ;
INPUT S2, VGA_ADDR_G;
ADD S2 , 01 ;
OUTPUT S2,VGA_ADDR_G;
B:
RR S1 ; The 3rd LSB is in the carry => B field
JUMP NC, INTEND ;
INPUT S2, VGA_ADDR_B;
ADD S2 , 01 ;
OUTPUT S2,VGA_ADDR_B;
INTEND:
LOAD S3, 00
OUTPUT S3, 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
PASS 2 - Testing Instructions
;NAMEREG sX, <name> ; Rename register sX with <name>
CONSTANT VGA_ADDR_R, 00; Define constant <name>, assign value
CONSTANT VGA_ADDR_G, 01;
CONSTANT VGA_ADDR_B, 02;
CONSTANT PUSHBUTTON_ADDR, 10;
CONSTANT SEGLED_ADDR_LED, 20;
CONSTANT SEGLED_ADDR_SEGUP, 21;
CONSTANT SEGLED_ADDR_SEGLOW, 22;
CONSTANT SEGLED_ADDR_SEGDOT, 23;
; 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, FB;
LOAD S1, FA;
LOAD S2, FF;
LOAD S3, FF;
OUTPUT S0, SEGLED_ADDR_LED;
OUTPUT S1, SEGLED_ADDR_SEGUP;
OUTPUT S2, SEGLED_ADDR_SEGLOW;
OUTPUT S3, SEGLED_ADDR_SEGDOT;
loop:
JUMP loop;
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 S0, PUSHBUTTON_ADDR; Read the ISR register from Push Button module
LOAD S1, S0;
AND S1, 07; mask out the 3 bit of LSB ( B,G,R )
R:
RR S1; The LSB is in the carry => R field
JUMP NC, G;
INPUT S2, VGA_ADDR_R;
ADD S2, 01;
OUTPUT S2, VGA_ADDR_R;
G:
RR S1; The Less LSB is in the carry => G field
JUMP NC, B;
INPUT S2, VGA_ADDR_G;
ADD S2, 01;
OUTPUT S2, VGA_ADDR_G;
B:
RR S1; The 3rd LSB is in the carry => B field
JUMP NC, INTEND;
INPUT S2, VGA_ADDR_B;
ADD S2, 01;
OUTPUT S2, VGA_ADDR_B;
INTEND:
LOAD S3, 00
OUTPUT S3, 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
PASS 3 - Resolving addresses and line labels
000 ;NAMEREG sX, <name> ; Rename register sX with <name>
000 CONSTANT VGA_ADDR_R, 00; Define constant <name>, assign value
000 CONSTANT VGA_ADDR_G, 01;
000 CONSTANT VGA_ADDR_B, 02;
000 CONSTANT PUSHBUTTON_ADDR, 10;
000 CONSTANT SEGLED_ADDR_LED, 20;
000 CONSTANT SEGLED_ADDR_SEGUP, 21;
000 CONSTANT SEGLED_ADDR_SEGLOW, 22;
000 CONSTANT SEGLED_ADDR_SEGDOT, 23;
000 ; ROM output file is always called
000 ; <filename>.vhd
000 ADDRESS 000; Programs always start at reset vector 0
000 ENABLE INTERRUPT; If using interrupts, be sure to enable
001 ; the INTERRUPT input
001 BEGIN:
001 ; <<< your code here >>>
001 LOAD S0, FB;
002 LOAD S1, FA;
003 LOAD S2, FF;
004 LOAD S3, FF;
005 OUTPUT S0, SEGLED_ADDR_LED;
006 OUTPUT S1, SEGLED_ADDR_SEGUP;
007 OUTPUT S2, SEGLED_ADDR_SEGLOW;
008 OUTPUT S3, SEGLED_ADDR_SEGDOT;
009 loop:
009 JUMP loop;
00A JUMP BEGIN; Embedded applications never end
00B ISR: ; An Interrupt Service Routine (ISR) is
00B ; required if using interrupts
00B ; Interrupts are automatically disabled
00B ; when an interrupt is recognized
00B ; Never re-enable interrupts during the ISR
00B INPUT S0, PUSHBUTTON_ADDR; Read the ISR register from Push Button module
00C LOAD S1, S0;
00D AND S1, 07; mask out the 3 bit of LSB ( B,G,R )
00E R:
00E RR S1; The LSB is in the carry => R field
00F JUMP NC, G;
010 INPUT S2, VGA_ADDR_R;
011 ADD S2, 01;
012 OUTPUT S2, VGA_ADDR_R;
013 G:
013 RR S1; The Less LSB is in the carry => G field
014 JUMP NC, B;
015 INPUT S2, VGA_ADDR_G;
016 ADD S2, 01;
017 OUTPUT S2, VGA_ADDR_G;
018 B:
018 RR S1; The 3rd LSB is in the carry => B field
019 JUMP NC, INTEND;
01A INPUT S2, VGA_ADDR_B;
01B ADD S2, 01;
01C OUTPUT S2, VGA_ADDR_B;
01D INTEND:
01D LOAD S3, 00
01E OUTPUT S3, PUSHBUTTON_ADDR;
01F RETURNI ENABLE; Return from interrupt service routine
020 ; Use RETURNI DISABLE to leave interrupts
020 ; disabled
020 ADDRESS 3FF; Interrupt vector is located at highest
3FF ; instruction address
3FF JUMP ISR; Jump to interrupt service routine, ISR
PASS 4 - Resolving Operands
000 ;NAMEREG sX, <name> ; Rename register sX with <name>
000 CONSTANT VGA_ADDR_R, 00; Define constant <name>, assign value
000 CONSTANT VGA_ADDR_G, 01;
000 CONSTANT VGA_ADDR_B, 02;
000 CONSTANT PUSHBUTTON_ADDR, 10;
000 CONSTANT SEGLED_ADDR_LED, 20;
000 CONSTANT SEGLED_ADDR_SEGUP, 21;
000 CONSTANT SEGLED_ADDR_SEGLOW, 22;
000 CONSTANT SEGLED_ADDR_SEGDOT, 23;
000 ; ROM output file is always called
000 ; <filename>.vhd
000 ADDRESS 000; Programs always start at reset vector 0
000 ENABLE INTERRUPT; If using interrupts, be sure to enable
001 ; the INTERRUPT input
001 BEGIN:
001 ; <<< your code here >>>
001 LOAD S0, FB;
002 LOAD S1, FA;
003 LOAD S2, FF;
004 LOAD S3, FF;
005 OUTPUT S0, SEGLED_ADDR_LED;
006 OUTPUT S1, SEGLED_ADDR_SEGUP;
007 OUTPUT S2, SEGLED_ADDR_SEGLOW;
008 OUTPUT S3, SEGLED_ADDR_SEGDOT;
009 loop:
009 JUMP loop;
00A JUMP BEGIN; Embedded applications never end
00B ISR: ; An Interrupt Service Routine (ISR) is
00B ; required if using interrupts
00B ; Interrupts are automatically disabled
00B ; when an interrupt is recognized
00B ; Never re-enable interrupts during the ISR
00B INPUT S0, PUSHBUTTON_ADDR; Read the ISR register from Push Button module
00C LOAD S1, S0;
00D AND S1, 07; mask out the 3 bit of LSB ( B,G,R )
00E R:
00E RR S1; The LSB is in the carry => R field
00F JUMP NC, G;
010 INPUT S2, VGA_ADDR_R;
011 ADD S2, 01;
012 OUTPUT S2, VGA_ADDR_R;
013 G:
013 RR S1; The Less LSB is in the carry => G field
014 JUMP NC, B;
015 INPUT S2, VGA_ADDR_G;
016 ADD S2, 01;
017 OUTPUT S2, VGA_ADDR_G;
018 B:
018 RR S1; The 3rd LSB is in the carry => B field
019 JUMP NC, INTEND;
01A INPUT S2, VGA_ADDR_B;
01B ADD S2, 01;
01C OUTPUT S2, VGA_ADDR_B;
01D INTEND:
01D LOAD S3, 00
01E OUTPUT S3, PUSHBUTTON_ADDR;
01F RETURNI ENABLE; Return from interrupt service routine
020 ; Use RETURNI DISABLE to leave interrupts
020 ; disabled
3FF ADDRESS 3FF; Interrupt vector is located at highest
3FF ; instruction address
3FF JUMP ISR; Jump to interrupt service routine, ISR
PASS 5 - Writing reformatted PSM file 'ram_inst.fmt'.
PASS 6 - Writing assembler log file 'ram_inst.log'.
PASS 7 - Writing coefficient file 'ram_inst.coe'.
PASS 8 - Writing VHDL memory definition file 'ram_inst.vhd'.
PASS 9 - Writing Verilog memory definition file 'ram_inst.v'.
PASS 10 - Writing System Generator memory definition file 'ram_inst.m'.
PASS 11 - Writing memory definition files 'ram_inst.hex' and 'ram_inst.dec'.
KCPSM3 successful.
KCPSM3 complete.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -