📄 result.txt
字号:
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, 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
PASS 2 - Testing Instructions
;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
PASS 3 - Resolving addresses and line labels
000 ;NAMEREG sX, <name> ; Rename register sX with <name>
000 CONSTANT VGA_ADDR_R, 10; Define constant <name>, assign value
000 CONSTANT VGA_ADDR_G, 11;
000 CONSTANT VGA_ADDR_B, 12;
000 CONSTANT PUSHBUTTON_ADDR, 20;
000 CONSTANT SEGLED_ADDR_LED, 00;
000 CONSTANT SEGLED_ADDR_SEGUP, 01;
000 CONSTANT SEGLED_ADDR_SEGLOW, 02;
000 CONSTANT SEGLED_ADDR_SEGDOT, 03;
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, 00;
002 LOAD S1, 00;
003 LOAD S2, 00;
004 LOAD S3, 00;
005 DEALS6:
005 COMPARE S6, FF;
006 JUMP Z, DEALS5;
007 ; LOAD S7,S7;
007 LOAD S7, S7;
008 LOAD S7, S7;
009 ADD S6, 01
00A JUMP DEALS6
00B DEALS5:
00B LOAD S6, 00;
00C ADD S5, 01;
00D COMPARE S5, FF;
00E JUMP Z, DEALS4;
00F JUMP DEALS6
010 DEALS4:
010 LOAD S5, 00;
011 ADD S4, 01;
012 COMPARE S4, 07;
013 JUMP Z, S407
014 JUMP DEALS6
015 S407:
015 ADD S0, 01
016 ADD S1, 01
017 ADD S2, 01
018 ADD S3, 01
019 OUTPUT S0, SEGLED_ADDR_LED;
01A OUTPUT S1, SEGLED_ADDR_SEGUP;
01B OUTPUT S2, SEGLED_ADDR_SEGLOW;
01C OUTPUT S3, SEGLED_ADDR_SEGDOT;
01D LOAD S4, 00;
01E LOAD S5, 00;
01F LOAD S6, 00;
020 JUMP DEALS6
021 JUMP BEGIN; Embedded applications never end
022 ISR: ; An Interrupt Service Routine (ISR) is
022 ; required if using interrupts
022 ; Interrupts are automatically disabled
022 ; when an interrupt is recognized
022 ; Never re-enable interrupts during the ISR
022 INPUT SA, PUSHBUTTON_ADDR; Read the ISR register from Push Button module
023 LOAD SB, SA;
024 AND SB, 0F; mask out the 3 bit of LSB ( B,G,R )
025 R:
025 RR SB; The LSB is in the carry => R field
026 JUMP NC, G;
027 INPUT SC, VGA_ADDR_R;
028 ADD SC, 01;
029 OUTPUT SC, VGA_ADDR_R;
02A G:
02A RR SB; The Less LSB is in the carry => G field
02B JUMP NC, B;
02C INPUT SC, VGA_ADDR_G;
02D ADD SC, 01;
02E OUTPUT SC, VGA_ADDR_G;
02F B:
02F RR SB; The 3rd LSB is in the carry => B field
030 JUMP NC, CLEAR;
031 INPUT SC, VGA_ADDR_B;
032 ADD SC, 01;
033 OUTPUT SC, VGA_ADDR_B;
034 CLEAR:
034 RR SB
035 JUMP NC, INTEND;
036 LOAD S0, 00
037 LOAD S1, 00
038 LOAD S2, 00
039 LOAD S3, 00
03A LOAD S4, 00;
03B LOAD S5, 00;
03C LOAD S6, 00;
03D OUTPUT S0, SEGLED_ADDR_LED;
03E OUTPUT S1, SEGLED_ADDR_SEGUP;
03F OUTPUT S2, SEGLED_ADDR_SEGLOW;
040 OUTPUT S3, SEGLED_ADDR_SEGDOT;
041 INTEND:
041 LOAD SD, 00
042 OUTPUT SD, PUSHBUTTON_ADDR;
043 RETURNI ENABLE; Return from interrupt service routine
044 ; Use RETURNI DISABLE to leave interrupts
044 ; disabled
044 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, 10; Define constant <name>, assign value
000 CONSTANT VGA_ADDR_G, 11;
000 CONSTANT VGA_ADDR_B, 12;
000 CONSTANT PUSHBUTTON_ADDR, 20;
000 CONSTANT SEGLED_ADDR_LED, 00;
000 CONSTANT SEGLED_ADDR_SEGUP, 01;
000 CONSTANT SEGLED_ADDR_SEGLOW, 02;
000 CONSTANT SEGLED_ADDR_SEGDOT, 03;
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, 00;
002 LOAD S1, 00;
003 LOAD S2, 00;
004 LOAD S3, 00;
005 DEALS6:
005 COMPARE S6, FF;
006 JUMP Z, DEALS5;
007 ; LOAD S7,S7;
007 LOAD S7, S7;
008 LOAD S7, S7;
009 ADD S6, 01
00A JUMP DEALS6
00B DEALS5:
00B LOAD S6, 00;
00C ADD S5, 01;
00D COMPARE S5, FF;
00E JUMP Z, DEALS4;
00F JUMP DEALS6
010 DEALS4:
010 LOAD S5, 00;
011 ADD S4, 01;
012 COMPARE S4, 07;
013 JUMP Z, S407
014 JUMP DEALS6
015 S407:
015 ADD S0, 01
016 ADD S1, 01
017 ADD S2, 01
018 ADD S3, 01
019 OUTPUT S0, SEGLED_ADDR_LED;
01A OUTPUT S1, SEGLED_ADDR_SEGUP;
01B OUTPUT S2, SEGLED_ADDR_SEGLOW;
01C OUTPUT S3, SEGLED_ADDR_SEGDOT;
01D LOAD S4, 00;
01E LOAD S5, 00;
01F LOAD S6, 00;
020 JUMP DEALS6
021 JUMP BEGIN; Embedded applications never end
022 ISR: ; An Interrupt Service Routine (ISR) is
022 ; required if using interrupts
022 ; Interrupts are automatically disabled
022 ; when an interrupt is recognized
022 ; Never re-enable interrupts during the ISR
022 INPUT SA, PUSHBUTTON_ADDR; Read the ISR register from Push Button module
023 LOAD SB, SA;
024 AND SB, 0F; mask out the 3 bit of LSB ( B,G,R )
025 R:
025 RR SB; The LSB is in the carry => R field
026 JUMP NC, G;
027 INPUT SC, VGA_ADDR_R;
028 ADD SC, 01;
029 OUTPUT SC, VGA_ADDR_R;
02A G:
02A RR SB; The Less LSB is in the carry => G field
02B JUMP NC, B;
02C INPUT SC, VGA_ADDR_G;
02D ADD SC, 01;
02E OUTPUT SC, VGA_ADDR_G;
02F B:
02F RR SB; The 3rd LSB is in the carry => B field
030 JUMP NC, CLEAR;
031 INPUT SC, VGA_ADDR_B;
032 ADD SC, 01;
033 OUTPUT SC, VGA_ADDR_B;
034 CLEAR:
034 RR SB
035 JUMP NC, INTEND;
036 LOAD S0, 00
037 LOAD S1, 00
038 LOAD S2, 00
039 LOAD S3, 00
03A LOAD S4, 00;
03B LOAD S5, 00;
03C LOAD S6, 00;
03D OUTPUT S0, SEGLED_ADDR_LED;
03E OUTPUT S1, SEGLED_ADDR_SEGUP;
03F OUTPUT S2, SEGLED_ADDR_SEGLOW;
040 OUTPUT S3, SEGLED_ADDR_SEGDOT;
041 INTEND:
041 LOAD SD, 00
042 OUTPUT SD, PUSHBUTTON_ADDR;
043 RETURNI ENABLE; Return from interrupt service routine
044 ; Use RETURNI DISABLE to leave interrupts
044 ; 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 + -