Line 15... |
Line 15... |
//
|
//
|
// Revision:
|
// Revision:
|
// Revision 0.01 - File Created
|
// Revision 0.01 - File Created
|
// Additional Comments:
|
// Additional Comments:
|
//
|
//
|
|
// Simulation plugs exist in this code. Look for "????? SIMULATION PLUG"
|
|
//
|
|
// Debug plugs exist in this code. Look for "????? DEBUG PLUG"
|
|
//
|
//////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
//
|
//
|
// TERMINAL EMULATOR
|
// TERMINAL EMULATOR
|
Line 47... |
Line 51... |
// hurt the realisim of the emulation. An application that performs delays based
|
// hurt the realisim of the emulation. An application that performs delays based
|
// on real terminal operations won't be incorrect because it performs a delay,
|
// on real terminal operations won't be incorrect because it performs a delay,
|
// but a stupid application that relies on this "smart" implementation might
|
// but a stupid application that relies on this "smart" implementation might
|
// fail to run on the real thing.
|
// fail to run on the real thing.
|
//
|
//
|
|
// The ADM 3A terminal emulation is based on "ADM 3A Dumb Terminal Users
|
|
// Reference Manual" of April, 1986.
|
|
//
|
|
// It performs the basic cursor motions, but there was no way to know what many
|
|
// of the exact cursor actions would have been in the real terminal, because
|
|
// those kinds of things are undocumented. This includes what occurs when the
|
|
// cursor moves left when already at the extreme left hand side, up when already
|
|
// at the top, if the cursor is moved to home on clear, etc. I am sure there are
|
|
// plenty of others, these will just have to be implemented as I find out more
|
|
// information, or encounter programs that rely on these features.
|
|
//
|
|
// These are terminal features there is no plans to implement:
|
|
//
|
|
// 1. ENQ or answerback mode.
|
|
// 2. Bell (where would it go?).
|
|
// 3. Ctrl-N and Ctrl-O keyboard locking and extention port.
|
|
// 4. Graphics modes (I don't believe this was in the original ADM 3A in any
|
|
// case, but added later).
|
|
//
|
|
// These are terminal features that are not implemented, but will be:
|
|
//
|
|
// 1. Absolute cursor positioning.
|
|
// 2. Attribute codes.
|
|
//
|
|
|
//
|
//
|
// Terminal height and width
|
// Terminal height and width
|
//
|
//
|
`define scnchrs 80 // width
|
`define scnchrs 80 // width
|
`define scnlins 24 // height
|
`define scnlins 24 // height
|
|
|
//
|
//
|
// Terminal states
|
// Terminal states
|
//
|
//
|
`define term_idle 6'h00 // idle
|
`define term_idle 4'h0 // idle
|
`define term_wrtstd2 6'h01 // write standard character #2
|
`define term_wrtstd2 4'h1 // write standard character #2
|
`define term_wrtstd3 6'h02 // write standard character #3
|
`define term_wrtstd3 4'h2 // write standard character #3
|
`define term_clear 6'h03 // clear screen and home cursor
|
`define term_wrtstd4 4'h3 // write standard character #4
|
`define term_clear2 6'h04 // clear screen and home cursor #2
|
`define term_clear 4'h4 // clear screen and home cursor
|
`define term_clear3 6'h05 // clear screen and home cursor #3
|
`define term_clear2 4'h5 // clear screen and home cursor #2
|
`define term_clear4 6'h06 // clear screen and home cursor #4
|
`define term_clear3 4'h6 // clear screen and home cursor #3
|
|
`define term_clear4 4'h7 // clear screen and home cursor #4
|
|
`define term_fndstr 4'h8 // find start of current line
|
|
`define term_scroll 4'h9 // scroll screen
|
|
`define term_scroll1 4'ha // scroll screen #1
|
|
`define term_scroll2 4'hb // scroll screen #2
|
|
`define term_scroll3 4'hc // scroll screen #3
|
|
`define term_scroll4 4'hd // scroll screen #4
|
|
`define term_scroll5 4'he // scroll screen #5
|
|
`define term_scroll6 4'hf // scroll screen #6
|
|
|
module terminal(addr, data, write, read, select, r, g, b, hsync_n, vsync_n,
|
module terminal(addr, data, write, read, select, r, g, b, hsync_n, vsync_n,
|
reset, clock);
|
ps2_clk, ps2_data, reset, clock, diag);
|
|
|
input addr; // control reg/data reg address
|
input addr; // control reg/data reg address
|
inout [7:0] data; // CPU data
|
inout [7:0] data; // CPU data
|
input write; // CPU write
|
input write; // CPU write
|
input read; // CPU read
|
input read; // CPU read
|
Line 78... |
Line 115... |
input reset; // CPU reset
|
input reset; // CPU reset
|
input clock; // CPU clock
|
input clock; // CPU clock
|
output [2:0] r, g, b; // R,G,B color output buses
|
output [2:0] r, g, b; // R,G,B color output buses
|
output hsync_n; // horizontal sync pulse
|
output hsync_n; // horizontal sync pulse
|
output vsync_n; // vertical sync pulse
|
output vsync_n; // vertical sync pulse
|
|
input ps2_clk; // clock from keyboard
|
|
input ps2_data; // data from keyboard
|
|
output [7:0] diag; // diagnostic 8 bit port
|
|
|
reg [5:0] state; // terminal state machine
|
reg [3:0] state; // terminal state machine
|
reg [10:0] cursor; // cursor address
|
reg [10:0] cursor; // cursor address
|
|
reg [10:0] tcursor; // cursor temp address
|
reg [7:0] chrdatw; // character write data
|
reg [7:0] chrdatw; // character write data
|
reg outrdy; // output ready to send
|
reg outrdy; // output ready to send
|
reg wrtchr; // character ready to write
|
reg wrtchr; // character ready to write
|
reg [7:0] datao; // intermediate for data output
|
reg [7:0] datao; // intermediate for data output
|
|
|
Line 94... |
Line 135... |
reg cmwrite; // character map write from address
|
reg cmwrite; // character map write from address
|
wire [7:0] cmdata; // character map data to be written/read
|
wire [7:0] cmdata; // character map data to be written/read
|
reg [7:0] cmdatai; // character map data to be written
|
reg [7:0] cmdatai; // character map data to be written
|
reg cmdatae; // character map data enable
|
reg cmdatae; // character map data enable
|
|
|
|
// keyboard communication
|
|
wire [7:0] scancode; // key scancode
|
|
wire parity; // keyboard parity
|
|
wire busy; // busy scanning code
|
|
wire rdy; // ready with code
|
|
wire error; // scancode error
|
|
reg scnrdy; // scancode
|
|
reg capslock; // caps lock toggle
|
|
reg leftshift; // state of left shift key
|
|
reg rightshift; // state of right shift key
|
|
reg leftctrl; // state of left control key
|
|
reg rightctrl; // state of right control key
|
|
reg relcod; // release code active
|
|
reg extcod; // extention code active
|
|
wire [7:0] asciidata; // output of lookup rom
|
|
wire [7:0] asciidatau; // output of lookup rom
|
|
reg clrrdy; // clear input ready
|
|
|
|
// here we put signals out the diagnostic port if required.
|
|
assign diag[0] = busy;
|
|
assign diag[1] = rdy;
|
|
assign diag[2] = scnrdy;
|
|
assign diag[3] = ps2_clk;
|
|
assign diag[4] = ps2_data;
|
|
assign diag[5] = relcod;
|
|
assign diag[6] = leftctrl;
|
|
assign diag[7] = rightctrl;
|
|
|
// instantiate memory mapped character display
|
// instantiate memory mapped character display
|
chrmemmap display(!reset, clock, r, g, b, hsync_n, vsync_n, cmaddr, cmread,
|
chrmemmap display(!reset, clock, r, g, b, hsync_n, vsync_n, cmaddr, cmread,
|
cmwrite, cmdata);
|
cmwrite, cmdata, cursor);
|
|
|
// instantiate ps/2 keyboard
|
// instantiate ps/2 keyboard. Note that the keyboard decoder only generates
|
|
// codes on release, which has to be changed, since we need both asserts and
|
|
// deasserts.
|
ps2_kbd vgai(.clk(clock), .rst(reset), .ps2_clk(ps2_clk), .ps2_data(ps2_data),
|
ps2_kbd vgai(.clk(clock), .rst(reset), .ps2_clk(ps2_clk), .ps2_data(ps2_data),
|
.scancode(scancode), .parity(parity), .busy(busy), .rdy(rdy),
|
.scancode(scancode), .parity(parity), .busy(busy), .rdy(rdy),
|
.error(error));
|
.error(error));
|
|
|
// always @(posedge clock)
|
// instantiate keyboard scan lookup roms
|
always @(negedge clock)
|
scnrom kbdtbl(scancode, asciidata); // lower case
|
|
scnromu kbdtblu(scancode, asciidatau); // lower case
|
|
|
|
// process keyboard input state
|
|
always @(posedge clock)
|
|
if (reset) begin // perform reset actions
|
|
|
|
leftshift <= 0; // clear left shift key state
|
|
rightshift <= 0; // clear right shift key state
|
|
leftctrl <= 0; // clear left control key state
|
|
rightctrl <= 0; // clear right control key state
|
|
capslock <= 0; // clear caps lock state
|
|
relcod <= 0; // clear release status
|
|
scnrdy <= 0; // clear key ready
|
|
|
|
end else begin
|
|
|
|
if (rdy) begin
|
|
|
|
// if the release code $f0 occurs, set release until the next key occurs
|
|
if (scancode == 8'hf0) relcod <= 1;
|
|
// if the extention code $e0 occurs, set the extention flag
|
|
if (scancode == 8'he0) extcod <= 1;
|
|
else if (relcod) begin // release
|
|
|
|
relcod <= 0; // reset release code
|
|
// reset any extention code
|
|
if (scancode != 8'hf0 && scancode != 8'he0) extcod <= 0;
|
|
// if caps lock is hit, toggle caps lock status
|
|
if (scancode == 8'h58) capslock <= !capslock;
|
|
// process left and right shift key up
|
|
if (scancode == 8'h12) leftshift <= 0; // left up
|
|
if (scancode == 8'h59) rightshift <= 0; // right up
|
|
// process control key up
|
|
if (scancode == 8'h14) begin
|
|
|
|
if (extcod) rightctrl <= 0; // right up
|
|
else leftctrl <= 0; // left up
|
|
|
|
end
|
|
|
|
end else begin // assert
|
|
|
|
scnrdy <= 1; // set key is ready
|
|
// reset any extention code
|
|
if (scancode != 8'hf0 && scancode != 8'he0) extcod <= 0;
|
|
// process left and right shift key down
|
|
if (scancode == 8'h12) leftshift <= 1; // left down
|
|
if (scancode == 8'h59) rightshift <= 1; // right down
|
|
// process control key down
|
|
if (scancode == 8'h14) begin
|
|
|
|
if (extcod) rightctrl <= 1; // right down
|
|
else leftctrl <= 1; // left down
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end else if (clrrdy) scnrdy <= 0; // clear key ready
|
|
|
|
end
|
|
|
|
always @(posedge clock)
|
if (reset) begin // reset
|
if (reset) begin // reset
|
|
|
// on reset, we set the state machine to perform a screen clear and
|
// on reset, we set the state machine to perform a screen clear and
|
// home cursor
|
// home cursor
|
|
// ????? SIMULATION PLUG
|
|
// Don't clear screen, this takes too long in simulation
|
state <= `term_clear; // set to clear screen
|
state <= `term_clear; // set to clear screen
|
|
// state <= `term_idle; // continue
|
cursor <= 0; // set cursor to home
|
cursor <= 0; // set cursor to home
|
outrdy <= 0; // set not ready to send
|
outrdy <= 0; // set not ready to send
|
wrtchr <= 0; // set no character to write
|
wrtchr <= 0; // set no character to write
|
cmread <= 0; // clear read character
|
cmread <= 0; // clear read character
|
cmwrite <= 0; // clear write character
|
cmwrite <= 0; // clear write character
|
cmdatae <= 0; // no enable character map data
|
cmdatae <= 0; // no enable character map data
|
|
clrrdy <= 0; // set clear ready off
|
|
|
|
end else begin
|
|
|
end else if (write&select) begin // CPU write
|
if (write&select) begin // CPU write
|
|
|
if (addr) begin
|
if (addr) begin
|
|
|
chrdatw <= data & 8'h7f; // set character write data without parity
|
chrdatw <= data & 8'h7f; // set character write data without parity
|
wrtchr <= 1; // character ready to write
|
wrtchr <= 1; // character ready to write
|
Line 129... |
Line 269... |
|
|
end
|
end
|
|
|
end else if (read&select) begin // CPU read
|
end else if (read&select) begin // CPU read
|
|
|
if (addr) datao <= 0; // no keyboard data implemented yet
|
if (addr) begin
|
else datao <= !outrdy << 7; // return output ready status
|
|
|
// Return decoded keyboard, with shifting. The letter keys, 'a'-'z',
|
|
// can be shifted by the shift keys, but not by caps lock state.
|
|
// The other keys can be shifted by either. This matches PC
|
|
// behavior, which lets you have cap locks on without shifting the
|
|
// letter keys. The control codes are shifted as a block from `($60)
|
|
// to ~($7e) down to $00. This leaves out \US and \DEL, but these
|
|
// codes get generated by the DEL key.
|
|
if (asciidata >= 8'h60 && asciidata <= 8'h7e && (leftctrl || rightctrl))
|
|
datao <= asciidata & 8'h1f;
|
|
else if (asciidata >= 8'h61 && asciidata <= 8'h7a)
|
|
datao <= leftshift||rightshift||capslock ? asciidatau: asciidata;
|
|
else
|
|
datao <= leftshift||rightshift ? asciidatau: asciidata;
|
|
clrrdy <= 1; // clear scancode ready f/f
|
|
|
end else case (state) // run output state
|
end else
|
|
datao <= (!outrdy << 7) | (scnrdy << 5); // return ready statuses
|
|
|
|
end else clrrdy <= 0; // clear keyboard ready signal
|
|
|
|
case (state) // run output state
|
|
|
`term_idle: begin // idle waiting for character
|
`term_idle: begin // idle waiting for character
|
|
|
// We wait for the cpu cycle to end before running the state machine
|
// We wait for the cpu cycle to end before running the state machine
|
// write procedure. This allows this module to run at full speed, while
|
// write procedure. This allows this module to run at full speed,
|
// the rest of the CPU logic runs slow. The vga logic must run at a
|
// while the rest of the CPU logic runs slow. The vga logic must run
|
// fixed speed because it has the display to run, but the rest can be
|
// at a fixed speed because it has the display to run, but the rest
|
// slow to allow debugging.
|
// can be slow to allow debugging.
|
if (wrtchr&!select) begin // process character after CPU goes away
|
if (wrtchr&!(select&read|select&write)) begin
|
|
|
|
// process character after CPU goes away
|
if (chrdatw >= 8'h20 && chrdatw != 8'h7f) begin
|
if (chrdatw >= 8'h20 && chrdatw != 8'h7f) begin
|
|
|
// write standard (non-control) character
|
// write standard (non-control) character
|
cmaddr <= cursor; // set address at cursor
|
cmaddr <= cursor; // set address at cursor
|
cmdatai <= chrdatw; // place character data to write
|
cmdatai <= chrdatw; // place character data to write
|
cmdatae <= 1; // enable data to memory
|
cmdatae <= 1; // enable data to memory
|
outrdy <= 0; // set not ready to send
|
|
state <= `term_wrtstd2; // continue
|
state <= `term_wrtstd2; // continue
|
|
|
end else begin // control character, just dump it for now
|
end else begin // control character
|
|
|
|
if (chrdatw == 8'h0a) begin // line down (line feed)
|
|
|
|
if (cursor < 23*80) begin // not at screen end
|
|
|
|
cursor <= cursor+80;
|
|
wrtchr <= 0; // remove ready to write
|
|
outrdy <= 1; // set ready to send
|
|
|
|
end else begin
|
|
|
|
tcursor <= 0; // set temp cursor to screen start
|
|
state <= `term_scroll; // go to scroll screen
|
|
|
|
end
|
|
|
|
end else if (chrdatw == 8'h0b) begin // line up
|
|
|
|
if (cursor >= 80) cursor <= cursor-80;
|
|
wrtchr <= 0; // remove ready to write
|
|
outrdy <= 1; // set ready to send
|
|
|
|
end else if (chrdatw == 8'h0d) begin // carriage return
|
|
|
|
tcursor <= 0; // set start of line cursor
|
|
state <= `term_fndstr; // go to find start of line
|
|
|
|
end else if (chrdatw == 8'h08) begin // character left
|
|
|
|
// if not at home position, back up
|
|
if (cursor > 0) cursor <= cursor-1;
|
|
wrtchr <= 0; // remove ready to write
|
|
outrdy <= 1; // set ready to send
|
|
|
|
end else if (chrdatw == 8'h0c) begin // character right
|
|
|
|
// if not at screen end, go forward
|
|
if (cursor < 80*24-1) cursor <= cursor+1;
|
|
wrtchr <= 0; // remove ready to write
|
|
outrdy <= 1; // set ready to send
|
|
|
|
end else if (chrdatw == 8'h1e) begin // home
|
|
|
|
cursor <= 0; // set to home position
|
|
wrtchr <= 0; // remove ready to write
|
|
outrdy <= 1; // set ready to send
|
|
|
|
end else if (chrdatw == 8'h1a) begin // clear screen
|
|
|
|
state <= `term_clear; // go to screen clear
|
|
wrtchr <= 0; // remove ready to write
|
|
outrdy <= 1; // set ready to send
|
|
|
|
end else begin // unsupported control character
|
|
|
wrtchr <= 0; // remove ready to write
|
wrtchr <= 0; // remove ready to write
|
outrdy <= 1; // set ready to send
|
outrdy <= 1; // set ready to send
|
|
|
end
|
end
|
|
|
end
|
end
|
|
|
end
|
end
|
|
|
|
end
|
|
|
`term_wrtstd2: begin // write standard character #2
|
`term_wrtstd2: begin // write standard character #2
|
|
|
cmwrite <= 1; // set write to memory
|
cmwrite <= 1; // set write to memory
|
state <= `term_wrtstd3; // continue
|
state <= `term_wrtstd3; // continue
|
|
|
end
|
end
|
|
|
`term_wrtstd3: begin // write standard character #3
|
`term_wrtstd3: begin // write standard character #3
|
|
|
cmwrite <= 0; // remove write to memory
|
cmwrite <= 0; // remove write to memory
|
|
state <= `term_wrtstd4; // continue
|
|
|
|
end
|
|
|
|
`term_wrtstd4: begin // write standard character #3
|
|
|
cmdatae <= 0; // release data enable to memory
|
cmdatae <= 0; // release data enable to memory
|
outrdy <= 1; // set ready to send
|
outrdy <= 1; // set ready to send
|
cursor <= cursor+1; // advance cursor
|
cursor <= cursor+1; // advance cursor
|
wrtchr <= 0; // remove ready to write
|
wrtchr <= 0; // remove ready to write
|
state <= `term_idle; // continue
|
state <= `term_idle; // continue
|
Line 225... |
Line 446... |
|
|
end
|
end
|
|
|
end
|
end
|
|
|
|
`term_fndstr: begin // find start of current line
|
|
|
|
if (tcursor+80 > cursor) begin // found
|
|
|
|
cursor <= tcursor; // set cursor to line start
|
|
wrtchr <= 0; // remove ready to write
|
|
outrdy <= 1; // set ready to send
|
|
state <= `term_idle; // continue
|
|
|
|
end else tcursor <= tcursor+80; // advance to next line
|
|
|
|
end
|
|
|
|
`term_scroll: begin // scroll screen up
|
|
|
|
// move all data up a line
|
|
if (tcursor < 80*23) begin // scroll up
|
|
|
|
cmread <= 1; // set read display
|
|
cmaddr <= tcursor+80; // set address to read
|
|
state <= `term_scroll1; // continue
|
|
|
|
end else state <= `term_scroll5; // go blank last line
|
|
|
|
end
|
|
|
|
`term_scroll1: begin // scroll screen up #1
|
|
|
|
state <= `term_scroll2; // hold read
|
|
|
|
end
|
|
|
|
`term_scroll2: begin // scroll screen up #2
|
|
|
|
cmdatai <= cmdata; // get data at address
|
|
cmread <= 0; // turn off read
|
|
state <= `term_scroll3; // continue
|
|
|
|
end
|
|
|
|
`term_scroll3: begin // scroll screen up #3
|
|
|
|
cmdatae <= 1; // enable data to write
|
|
cmwrite <= 1; // set to write
|
|
cmaddr <= tcursor;
|
|
state <= `term_scroll4; // continue
|
|
|
|
end
|
|
|
|
`term_scroll4: begin // scroll screen up #4
|
|
|
|
cmwrite <= 0; // turn off write
|
|
cmdatae <= 0; // turn off enable
|
|
tcursor <= tcursor+1; // next address
|
|
state <= `term_scroll; // repeat character move
|
|
|
|
end
|
|
|
|
`term_scroll5: begin // scroll screen up #5
|
|
|
|
// blank out last line
|
|
if (tcursor < 80*24) begin // blank out
|
|
|
|
cmdatai <= 8'h20; // set to write spaces
|
|
cmdatae <= 1; // enable data to write
|
|
cmwrite <= 1; // set to write
|
|
cmaddr <= tcursor;
|
|
state <= `term_scroll6; // continue
|
|
|
|
end else begin // terminate
|
|
|
|
wrtchr <= 0; // remove ready to write
|
|
outrdy <= 1; // set ready to send
|
|
state <= `term_idle; // continue
|
|
|
|
end
|
|
|
|
end
|
|
|
|
`term_scroll6: begin // scroll screen up #6
|
|
|
|
cmwrite <= 0; // turn off write
|
|
cmdatae <= 0; // turn off enable
|
|
tcursor <= tcursor+1; // next address
|
|
state <= `term_scroll5; // repeat blank out
|
|
|
|
end
|
|
|
default: state <= 6'bx;
|
default: state <= 6'bx;
|
|
|
endcase
|
endcase
|
|
|
|
end
|
|
|
// Enable drive to character memory
|
// Enable drive to character memory
|
assign cmdata = cmdatae ? cmdatai: 8'bz;
|
assign cmdata = cmdatae ? cmdatai: 8'bz;
|
|
|
// Enable drive for data output
|
// Enable drive for data output
|
assign data = read&select ? datao: 8'bz;
|
assign data = read&select ? datao: 8'bz;
|
Line 250... |
Line 561... |
// This block can either be directly mapped to CPU main memory, or can be run
|
// This block can either be directly mapped to CPU main memory, or can be run
|
// via a terminal emulator.
|
// via a terminal emulator.
|
//
|
//
|
|
|
module chrmemmap(rst_n, clk, r, g, b, hsync_n, vsync_n, addr, read, write,
|
module chrmemmap(rst_n, clk, r, g, b, hsync_n, vsync_n, addr, read, write,
|
data);
|
data, cursor);
|
|
|
input rst_n; // reset
|
input rst_n; // reset
|
input clk; // master clock
|
input clk; // master clock
|
output [2:0] r, g, b; // R,G,B color output buses
|
output [2:0] r, g, b; // R,G,B color output buses
|
output hsync_n; // horizontal sync pulse
|
output hsync_n; // horizontal sync pulse
|
output vsync_n; // vertical sync pulse
|
output vsync_n; // vertical sync pulse
|
input [10:0] addr; // address to read or write
|
input [10:0] addr; // address to read or write
|
input read; // read from address
|
input read; // read from address
|
input write; // write from address
|
input write; // write from address
|
inout [7:0] data; // data to be written/read
|
inout [7:0] data; // data to be written/read
|
|
input [10:0] cursor; // cursor address
|
|
|
reg [15:0] pixeldata; // 16 bit pixel feed
|
reg [15:0] pixeldata; // 16 bit pixel feed
|
|
|
reg [6:0] chrcnt; // character counter
|
reg [6:0] chrcnt; // character counter
|
reg [4:0] rowcnt; // character row counter
|
reg [4:0] rowcnt; // character row counter
|
Line 273... |
Line 585... |
reg [7:0] curchr; // current character indexed by scnadr
|
reg [7:0] curchr; // current character indexed by scnadr
|
reg [1:0] fchsta; // character fetch state, 0 = load high, 1 = load low
|
reg [1:0] fchsta; // character fetch state, 0 = load high, 1 = load low
|
wire [10:0] chradr; // character generator address
|
wire [10:0] chradr; // character generator address
|
wire [7:0] chrdata; // character generator data
|
wire [7:0] chrdata; // character generator data
|
reg [7:0] datao; // intermediate for data output
|
reg [7:0] datao; // intermediate for data output
|
|
reg [7:0] pixdatl; // pixel data low holding
|
|
|
// storage for character based screen
|
// storage for character based screen
|
|
|
reg [7:0] scnbuf[1919:0];
|
reg [7:0] scnbuf[1919:0];
|
|
|
Line 288... |
Line 601... |
|
|
chrrom crom(chradr, chrdata); // place character generator
|
chrrom crom(chradr, chrdata); // place character generator
|
|
|
// run the character to screen scan
|
// run the character to screen scan
|
always @(posedge clk)
|
always @(posedge clk)
|
if (rst|eof) begin // if reset or end of frame
|
if (rst) begin // if reset
|
|
|
chrcnt <= 7'h0; // clear counters
|
// ????? SIMULATION PLUG
|
|
// starting the character counter at the end of the line allows the scan
|
|
// to cross the area the CPU is filling, and is ok at hardware time.
|
|
// chrcnt <= 7'h0; // clear counters
|
|
chrcnt <= 80-20; // clear counters
|
|
// ????? SIMULATION PLUG
|
|
// Starting the row count at 1 allows pixels to appear on the simulation,
|
|
// and produces only a single bad line in real hardware
|
rowcnt <= 5'h0;
|
rowcnt <= 5'h0;
|
|
// rowcnt <= 5'h1;
|
lincnt <= 5'h0;
|
lincnt <= 5'h0;
|
scnadr <= 11'h0;
|
scnadr <= 11'h0;
|
fchsta <= 0;
|
fchsta <= 0;
|
|
|
|
end else if (eof) begin // if end of frame
|
|
|
|
chrcnt <= 7'h0; // clear counters
|
|
rowcnt <= 5'h0;
|
|
lincnt <= 5'h0;
|
|
scnadr <= 11'h0;
|
|
fchsta <= 1; // set to fetch first set of characters
|
|
|
end else if (rd || fchsta) begin
|
end else if (rd || fchsta) begin
|
|
|
if (fchsta == 1 || fchsta == 3) begin
|
if (fchsta == 1 || fchsta == 3) begin
|
|
|
// advance counters
|
// advance counters
|
Line 326... |
Line 655... |
|
|
0: fchsta <= 1; // delay until rd cycle is over
|
0: fchsta <= 1; // delay until rd cycle is over
|
|
|
1: begin
|
1: begin
|
|
|
// set low bits of pixel register
|
// Set low bits of pixel register, with all bits set if cursor
|
pixeldata <= { chrdata[0], chrdata[1], chrdata[2], chrdata[3],
|
// and row match.
|
|
if (scnadr+chrcnt == cursor)
|
|
pixdatl <= ~{ chrdata[0], chrdata[1], chrdata[2], chrdata[3],
|
|
chrdata[4], chrdata[5], chrdata[6], chrdata[7] };
|
|
else
|
|
pixdatl <= { chrdata[0], chrdata[1], chrdata[2], chrdata[3],
|
chrdata[4], chrdata[5], chrdata[6], chrdata[7] };
|
chrdata[4], chrdata[5], chrdata[6], chrdata[7] };
|
fchsta <= 2; // next state
|
fchsta <= 2; // next state
|
|
|
end
|
end
|
|
|
2: fchsta <= 3; // delay a cycle for ROM read time
|
2: fchsta <= 3; // delay a cycle for ROM read time
|
|
|
3: begin
|
3: begin
|
|
|
// set just high bits of pixel register
|
// Set just high bits of pixel register, with all bits set if cursor
|
pixeldata <=
|
// and row match.
|
pixeldata & 16'h00ff |
|
if (scnadr+chrcnt == cursor)
|
|
pixeldata <= pixdatl |
|
|
(~{ chrdata[0], chrdata[1], chrdata[2], chrdata[3],
|
|
chrdata[4], chrdata[5], chrdata[6], chrdata[7] } &
|
|
8'hff) << 8;
|
|
else
|
|
pixeldata <= pixdatl |
|
{ chrdata[0], chrdata[1], chrdata[2], chrdata[3],
|
{ chrdata[0], chrdata[1], chrdata[2], chrdata[3],
|
chrdata[4], chrdata[5], chrdata[6], chrdata[7] } << 8;
|
chrdata[4], chrdata[5], chrdata[6], chrdata[7] } << 8;
|
fchsta <= 0; // back to start
|
fchsta <= 0; // back to start
|
|
|
end
|
end
|
Line 354... |
Line 694... |
|
|
// operate dual port screen character RAM
|
// operate dual port screen character RAM
|
always @(posedge clk) begin
|
always @(posedge clk) begin
|
|
|
// set current indexed character without parity
|
// set current indexed character without parity
|
assign curchr = scnbuf[scnadr+chrcnt] & 8'h7f;
|
curchr <= scnbuf[scnadr+chrcnt] & 8'h7f;
|
if (write) scnbuf[addr] <= data;
|
if (write) scnbuf[addr] <= data;
|
datao <= scnbuf[addr];
|
datao <= scnbuf[addr];
|
|
|
end
|
end
|
|
|
Line 386... |
Line 726... |
|
|
reg [7:0] data;
|
reg [7:0] data;
|
|
|
always @(addr) case (addr)
|
always @(addr) case (addr)
|
|
|
// character set starting with space, and ending with '~'
|
// Character set starting with space, and ending with '~'
|
|
|
|
// The design of characters is such that they are embedded into an odd
|
|
// number of pixels, 7x19, with one space pixel to the right and bottom
|
|
// of each cell. The character layout works best on an odd cell width
|
|
// and height, because this gives a clear center to the character.
|
|
// Each characters baseline is marked. The baseline is where the capital
|
|
// characters sit, and only the descenders go below this position.
|
|
|
11'h000: data = 8'b00000000; // ' '
|
11'h000: data = 8'b00000000; // ' '
|
11'h001: data = 8'b00000000;
|
11'h001: data = 8'b00000000;
|
11'h002: data = 8'b00000000;
|
11'h002: data = 8'b00000000;
|
11'h003: data = 8'b00000000;
|
11'h003: data = 8'b00000000;
|
Line 409... |
Line 756... |
11'h010: data = 8'b00000000;
|
11'h010: data = 8'b00000000;
|
11'h011: data = 8'b00000000;
|
11'h011: data = 8'b00000000;
|
11'h012: data = 8'b00000000;
|
11'h012: data = 8'b00000000;
|
11'h013: data = 8'b00000000;
|
11'h013: data = 8'b00000000;
|
|
|
11'h014: data = 8'b00000000; // '!'
|
11'h014: data = 8'b00010000; // '!'
|
11'h015: data = 8'b00010000;
|
11'h015: data = 8'b00010000;
|
11'h016: data = 8'b00010000;
|
11'h016: data = 8'b00010000;
|
11'h017: data = 8'b00010000;
|
11'h017: data = 8'b00010000;
|
11'h018: data = 8'b00010000;
|
11'h018: data = 8'b00010000;
|
11'h019: data = 8'b00010000;
|
11'h019: data = 8'b00010000;
|
11'h01A: data = 8'b00010000;
|
11'h01A: data = 8'b00010000;
|
11'h01B: data = 8'b00010000;
|
11'h01B: data = 8'b00010000;
|
11'h01C: data = 8'b00010000;
|
11'h01C: data = 8'b00010000;
|
11'h01D: data = 8'b00010000;
|
11'h01D: data = 8'b00010000;
|
11'h01E: data = 8'b00010000;
|
11'h01E: data = 8'b00000000;
|
11'h01F: data = 8'b00000000;
|
11'h01F: data = 8'b00010000;
|
11'h020: data = 8'b00000000;
|
11'h020: data = 8'b00010000;
|
11'h021: data = 8'b00010000;
|
11'h021: data = 8'b00000000; // B
|
11'h022: data = 8'b00010000;
|
11'h022: data = 8'b00000000;
|
11'h023: data = 8'b00000000;
|
11'h023: data = 8'b00000000;
|
11'h024: data = 8'b00000000;
|
11'h024: data = 8'b00000000;
|
11'h025: data = 8'b00000000;
|
11'h025: data = 8'b00000000;
|
11'h026: data = 8'b00000000;
|
11'h026: data = 8'b00000000;
|
11'h027: data = 8'b00000000;
|
11'h027: data = 8'b00000000;
|
Line 443... |
Line 790... |
11'h030: data = 8'b00000000;
|
11'h030: data = 8'b00000000;
|
11'h031: data = 8'b00000000;
|
11'h031: data = 8'b00000000;
|
11'h032: data = 8'b00000000;
|
11'h032: data = 8'b00000000;
|
11'h033: data = 8'b00000000;
|
11'h033: data = 8'b00000000;
|
11'h034: data = 8'b00000000;
|
11'h034: data = 8'b00000000;
|
11'h035: data = 8'b00000000;
|
11'h035: data = 8'b00000000; // B
|
11'h036: data = 8'b00000000;
|
11'h036: data = 8'b00000000;
|
11'h037: data = 8'b00000000;
|
11'h037: data = 8'b00000000;
|
11'h038: data = 8'b00000000;
|
11'h038: data = 8'b00000000;
|
11'h039: data = 8'b00000000;
|
11'h039: data = 8'b00000000;
|
11'h03A: data = 8'b00000000;
|
11'h03A: data = 8'b00000000;
|
11'h03B: data = 8'b00000000;
|
11'h03B: data = 8'b00000000;
|
|
|
11'h03C: data = 8'b00000000; // '#'
|
11'h03C: data = 8'b00000000; // '#'
|
11'h03D: data = 8'b00100100;
|
11'h03D: data = 8'b01000100;
|
11'h03E: data = 8'b00100100;
|
11'h03E: data = 8'b01000100;
|
11'h03F: data = 8'b00100100;
|
11'h03F: data = 8'b01000100;
|
11'h040: data = 8'b00100100;
|
11'h040: data = 8'b01000100;
|
11'h041: data = 8'b01111110;
|
11'h041: data = 8'b11111110;
|
11'h042: data = 8'b00100100;
|
11'h042: data = 8'b01000100;
|
11'h043: data = 8'b00100100;
|
11'h043: data = 8'b01000100;
|
11'h044: data = 8'b00100100;
|
11'h044: data = 8'b01000100;
|
11'h045: data = 8'b00100100;
|
11'h045: data = 8'b01000100;
|
11'h046: data = 8'b01111110;
|
11'h046: data = 8'b11111110;
|
11'h047: data = 8'b00100100;
|
11'h047: data = 8'b01000100;
|
11'h048: data = 8'b00100100;
|
11'h048: data = 8'b01000100;
|
11'h049: data = 8'b00100100;
|
11'h049: data = 8'b01000100; // B
|
11'h04A: data = 8'b00100100;
|
11'h04A: data = 8'b01000100;
|
11'h04B: data = 8'b00000000;
|
11'h04B: data = 8'b00000000;
|
11'h04C: data = 8'b00000000;
|
11'h04C: data = 8'b00000000;
|
11'h04D: data = 8'b00000000;
|
11'h04D: data = 8'b00000000;
|
11'h04E: data = 8'b00000000;
|
11'h04E: data = 8'b00000000;
|
11'h04F: data = 8'b00000000;
|
11'h04F: data = 8'b00000000;
|
|
|
11'h050: data = 8'b00000000; // '$'
|
11'h050: data = 8'b00000000; // '$'
|
11'h051: data = 8'b00010000;
|
11'h051: data = 8'b00010000;
|
11'h052: data = 8'b00111100;
|
11'h052: data = 8'b01111100;
|
11'h053: data = 8'b01010010;
|
11'h053: data = 8'b10010010;
|
11'h054: data = 8'b01010000;
|
11'h054: data = 8'b10010000;
|
11'h055: data = 8'b01010000;
|
11'h055: data = 8'b10010000;
|
11'h056: data = 8'b00110000;
|
11'h056: data = 8'b01010000;
|
11'h057: data = 8'b00011000;
|
11'h057: data = 8'b00111000;
|
11'h058: data = 8'b00010100;
|
11'h058: data = 8'b00010100;
|
11'h059: data = 8'b00010010;
|
11'h059: data = 8'b00010010;
|
11'h05A: data = 8'b00010010;
|
11'h05A: data = 8'b00010010;
|
11'h05B: data = 8'b00010010;
|
11'h05B: data = 8'b00010010;
|
11'h05C: data = 8'b01010100;
|
11'h05C: data = 8'b01010100;
|
11'h05D: data = 8'b00111000;
|
11'h05D: data = 8'b00111000; // B
|
11'h05E: data = 8'b00010000;
|
11'h05E: data = 8'b00010000;
|
11'h05F: data = 8'b00000000;
|
11'h05F: data = 8'b00000000;
|
11'h060: data = 8'b00000000;
|
11'h060: data = 8'b00000000;
|
11'h061: data = 8'b00000000;
|
11'h061: data = 8'b00000000;
|
11'h062: data = 8'b00000000;
|
11'h062: data = 8'b00000000;
|
Line 506... |
Line 853... |
11'h06C: data = 8'b00010000;
|
11'h06C: data = 8'b00010000;
|
11'h06D: data = 8'b00010000;
|
11'h06D: data = 8'b00010000;
|
11'h06E: data = 8'b00010000;
|
11'h06E: data = 8'b00010000;
|
11'h06F: data = 8'b00100000;
|
11'h06F: data = 8'b00100000;
|
11'h070: data = 8'b00101110;
|
11'h070: data = 8'b00101110;
|
11'h071: data = 8'b01001010;
|
11'h071: data = 8'b01001010; // B
|
11'h072: data = 8'b01001110;
|
11'h072: data = 8'b01001110;
|
11'h073: data = 8'b00000000;
|
11'h073: data = 8'b00000000;
|
11'h074: data = 8'b00000000;
|
11'h074: data = 8'b00000000;
|
11'h075: data = 8'b00000000;
|
11'h075: data = 8'b00000000;
|
11'h076: data = 8'b00000000;
|
11'h076: data = 8'b00000000;
|
Line 527... |
Line 874... |
11'h080: data = 8'b01010000;
|
11'h080: data = 8'b01010000;
|
11'h081: data = 8'b01010000;
|
11'h081: data = 8'b01010000;
|
11'h082: data = 8'b01001000;
|
11'h082: data = 8'b01001000;
|
11'h083: data = 8'b01001000;
|
11'h083: data = 8'b01001000;
|
11'h084: data = 8'b01000100;
|
11'h084: data = 8'b01000100;
|
11'h085: data = 8'b00100100;
|
11'h085: data = 8'b00100100; // B
|
11'h086: data = 8'b00011010;
|
11'h086: data = 8'b00011010;
|
11'h087: data = 8'b00000000;
|
11'h087: data = 8'b00000000;
|
11'h088: data = 8'b00000000;
|
11'h088: data = 8'b00000000;
|
11'h089: data = 8'b00000000;
|
11'h089: data = 8'b00000000;
|
11'h08A: data = 8'b00000000;
|
11'h08A: data = 8'b00000000;
|
Line 548... |
Line 895... |
11'h094: data = 8'b00000000;
|
11'h094: data = 8'b00000000;
|
11'h095: data = 8'b00000000;
|
11'h095: data = 8'b00000000;
|
11'h096: data = 8'b00000000;
|
11'h096: data = 8'b00000000;
|
11'h097: data = 8'b00000000;
|
11'h097: data = 8'b00000000;
|
11'h098: data = 8'b00000000;
|
11'h098: data = 8'b00000000;
|
11'h099: data = 8'b00000000;
|
11'h099: data = 8'b00000000; // B
|
11'h09A: data = 8'b00000000;
|
11'h09A: data = 8'b00000000;
|
11'h09B: data = 8'b00000000;
|
11'h09B: data = 8'b00000000;
|
11'h09C: data = 8'b00000000;
|
11'h09C: data = 8'b00000000;
|
11'h09D: data = 8'b00000000;
|
11'h09D: data = 8'b00000000;
|
11'h09E: data = 8'b00000000;
|
11'h09E: data = 8'b00000000;
|
Line 569... |
Line 916... |
11'h0A8: data = 8'b01000000;
|
11'h0A8: data = 8'b01000000;
|
11'h0A9: data = 8'b01000000;
|
11'h0A9: data = 8'b01000000;
|
11'h0AA: data = 8'b00100000;
|
11'h0AA: data = 8'b00100000;
|
11'h0AB: data = 8'b00010000;
|
11'h0AB: data = 8'b00010000;
|
11'h0AC: data = 8'b00001000;
|
11'h0AC: data = 8'b00001000;
|
11'h0AD: data = 8'b00000100;
|
11'h0AD: data = 8'b00000100; // B
|
11'h0AE: data = 8'b00000010;
|
11'h0AE: data = 8'b00000010;
|
11'h0AF: data = 8'b00000000;
|
11'h0AF: data = 8'b00000000;
|
11'h0B0: data = 8'b00000000;
|
11'h0B0: data = 8'b00000000;
|
11'h0B1: data = 8'b00000000;
|
11'h0B1: data = 8'b00000000;
|
11'h0B2: data = 8'b00000000;
|
11'h0B2: data = 8'b00000000;
|
Line 590... |
Line 937... |
11'h0BC: data = 8'b00000010;
|
11'h0BC: data = 8'b00000010;
|
11'h0BD: data = 8'b00000010;
|
11'h0BD: data = 8'b00000010;
|
11'h0BE: data = 8'b00000100;
|
11'h0BE: data = 8'b00000100;
|
11'h0BF: data = 8'b00001000;
|
11'h0BF: data = 8'b00001000;
|
11'h0C0: data = 8'b00010000;
|
11'h0C0: data = 8'b00010000;
|
11'h0C1: data = 8'b00100000;
|
11'h0C1: data = 8'b00100000; // B
|
11'h0C2: data = 8'b01000000;
|
11'h0C2: data = 8'b01000000;
|
11'h0C3: data = 8'b00000000;
|
11'h0C3: data = 8'b00000000;
|
11'h0C4: data = 8'b00000000;
|
11'h0C4: data = 8'b00000000;
|
11'h0C5: data = 8'b00000000;
|
11'h0C5: data = 8'b00000000;
|
11'h0C6: data = 8'b00000000;
|
11'h0C6: data = 8'b00000000;
|
Line 611... |
Line 958... |
11'h0D0: data = 8'b01111110;
|
11'h0D0: data = 8'b01111110;
|
11'h0D1: data = 8'b00011000;
|
11'h0D1: data = 8'b00011000;
|
11'h0D2: data = 8'b00011000;
|
11'h0D2: data = 8'b00011000;
|
11'h0D3: data = 8'b00100100;
|
11'h0D3: data = 8'b00100100;
|
11'h0D4: data = 8'b00100100;
|
11'h0D4: data = 8'b00100100;
|
11'h0D5: data = 8'b01000010;
|
11'h0D5: data = 8'b01000010; // B
|
11'h0D6: data = 8'b01000010;
|
11'h0D6: data = 8'b01000010;
|
11'h0D7: data = 8'b00000000;
|
11'h0D7: data = 8'b00000000;
|
11'h0D8: data = 8'b00000000;
|
11'h0D8: data = 8'b00000000;
|
11'h0D9: data = 8'b00000000;
|
11'h0D9: data = 8'b00000000;
|
11'h0DA: data = 8'b00000000;
|
11'h0DA: data = 8'b00000000;
|
Line 632... |
Line 979... |
11'h0E4: data = 8'b00010000;
|
11'h0E4: data = 8'b00010000;
|
11'h0E5: data = 8'b00010000;
|
11'h0E5: data = 8'b00010000;
|
11'h0E6: data = 8'b00010000;
|
11'h0E6: data = 8'b00010000;
|
11'h0E7: data = 8'b00010000;
|
11'h0E7: data = 8'b00010000;
|
11'h0E8: data = 8'b00000000;
|
11'h0E8: data = 8'b00000000;
|
11'h0E9: data = 8'b00000000;
|
11'h0E9: data = 8'b00000000; // B
|
11'h0EA: data = 8'b00000000;
|
11'h0EA: data = 8'b00000000;
|
11'h0EB: data = 8'b00000000;
|
11'h0EB: data = 8'b00000000;
|
11'h0EC: data = 8'b00000000;
|
11'h0EC: data = 8'b00000000;
|
11'h0ED: data = 8'b00000000;
|
11'h0ED: data = 8'b00000000;
|
11'h0EE: data = 8'b00000000;
|
11'h0EE: data = 8'b00000000;
|
Line 653... |
Line 1000... |
11'h0F8: data = 8'b00000000;
|
11'h0F8: data = 8'b00000000;
|
11'h0F9: data = 8'b00000000;
|
11'h0F9: data = 8'b00000000;
|
11'h0FA: data = 8'b00000000;
|
11'h0FA: data = 8'b00000000;
|
11'h0FB: data = 8'b00000000;
|
11'h0FB: data = 8'b00000000;
|
11'h0FC: data = 8'b00000000;
|
11'h0FC: data = 8'b00000000;
|
11'h0FD: data = 8'b00000000;
|
11'h0FD: data = 8'b00000000; // B
|
11'h0FE: data = 8'b00010000;
|
11'h0FE: data = 8'b00010000;
|
11'h0FF: data = 8'b00010000;
|
11'h0FF: data = 8'b00010000;
|
11'h100: data = 8'b00100000;
|
11'h100: data = 8'b00100000;
|
11'h101: data = 8'b00000000;
|
11'h101: data = 8'b00000000;
|
11'h102: data = 8'b00000000;
|
11'h102: data = 8'b00000000;
|
Line 674... |
Line 1021... |
11'h10C: data = 8'b00000000;
|
11'h10C: data = 8'b00000000;
|
11'h10D: data = 8'b00000000;
|
11'h10D: data = 8'b00000000;
|
11'h10E: data = 8'b00000000;
|
11'h10E: data = 8'b00000000;
|
11'h10F: data = 8'b00000000;
|
11'h10F: data = 8'b00000000;
|
11'h110: data = 8'b00000000;
|
11'h110: data = 8'b00000000;
|
11'h111: data = 8'b00000000;
|
11'h111: data = 8'b00000000; // B
|
11'h112: data = 8'b00000000;
|
11'h112: data = 8'b00000000;
|
11'h113: data = 8'b00000000;
|
11'h113: data = 8'b00000000;
|
11'h114: data = 8'b00000000;
|
11'h114: data = 8'b00000000;
|
11'h115: data = 8'b00000000;
|
11'h115: data = 8'b00000000;
|
11'h116: data = 8'b00000000;
|
11'h116: data = 8'b00000000;
|
Line 695... |
Line 1042... |
11'h120: data = 8'b00000000;
|
11'h120: data = 8'b00000000;
|
11'h121: data = 8'b00000000;
|
11'h121: data = 8'b00000000;
|
11'h122: data = 8'b00000000;
|
11'h122: data = 8'b00000000;
|
11'h123: data = 8'b00000000;
|
11'h123: data = 8'b00000000;
|
11'h124: data = 8'b00000000;
|
11'h124: data = 8'b00000000;
|
11'h125: data = 8'b00000000;
|
11'h125: data = 8'b00000000; // B
|
11'h126: data = 8'b00010000;
|
11'h126: data = 8'b00010000;
|
11'h127: data = 8'b00000000;
|
11'h127: data = 8'b00000000;
|
11'h128: data = 8'b00000000;
|
11'h128: data = 8'b00000000;
|
11'h129: data = 8'b00000000;
|
11'h129: data = 8'b00000000;
|
11'h12A: data = 8'b00000000;
|
11'h12A: data = 8'b00000000;
|
Line 716... |
Line 1063... |
11'h134: data = 8'b00001000;
|
11'h134: data = 8'b00001000;
|
11'h135: data = 8'b00010000;
|
11'h135: data = 8'b00010000;
|
11'h136: data = 8'b00010000;
|
11'h136: data = 8'b00010000;
|
11'h137: data = 8'b00100000;
|
11'h137: data = 8'b00100000;
|
11'h138: data = 8'b00100000;
|
11'h138: data = 8'b00100000;
|
11'h139: data = 8'b01000000;
|
11'h139: data = 8'b01000000; // B
|
11'h13A: data = 8'b01000000;
|
11'h13A: data = 8'b01000000;
|
11'h13B: data = 8'b00000000;
|
11'h13B: data = 8'b00000000;
|
11'h13C: data = 8'b00000000;
|
11'h13C: data = 8'b00000000;
|
11'h13D: data = 8'b00000000;
|
11'h13D: data = 8'b00000000;
|
11'h13E: data = 8'b00000000;
|
11'h13E: data = 8'b00000000;
|
Line 737... |
Line 1084... |
11'h148: data = 8'b01010010;
|
11'h148: data = 8'b01010010;
|
11'h149: data = 8'b01010010;
|
11'h149: data = 8'b01010010;
|
11'h14A: data = 8'b01100010;
|
11'h14A: data = 8'b01100010;
|
11'h14B: data = 8'b01100010;
|
11'h14B: data = 8'b01100010;
|
11'h14C: data = 8'b01000010;
|
11'h14C: data = 8'b01000010;
|
11'h14D: data = 8'b01000010;
|
11'h14D: data = 8'b01000010; // B
|
11'h14E: data = 8'b00111100;
|
11'h14E: data = 8'b00111100;
|
11'h14F: data = 8'b00000000;
|
11'h14F: data = 8'b00000000;
|
11'h150: data = 8'b00000000;
|
11'h150: data = 8'b00000000;
|
11'h151: data = 8'b00000000;
|
11'h151: data = 8'b00000000;
|
11'h152: data = 8'b00000000;
|
11'h152: data = 8'b00000000;
|
Line 758... |
Line 1105... |
11'h15C: data = 8'b00001000;
|
11'h15C: data = 8'b00001000;
|
11'h15D: data = 8'b00001000;
|
11'h15D: data = 8'b00001000;
|
11'h15E: data = 8'b00001000;
|
11'h15E: data = 8'b00001000;
|
11'h15F: data = 8'b00001000;
|
11'h15F: data = 8'b00001000;
|
11'h160: data = 8'b00001000;
|
11'h160: data = 8'b00001000;
|
11'h161: data = 8'b00001000;
|
11'h161: data = 8'b00001000; // B
|
11'h162: data = 8'b01111110;
|
11'h162: data = 8'b01111110;
|
11'h163: data = 8'b00000000;
|
11'h163: data = 8'b00000000;
|
11'h164: data = 8'b00000000;
|
11'h164: data = 8'b00000000;
|
11'h165: data = 8'b00000000;
|
11'h165: data = 8'b00000000;
|
11'h166: data = 8'b00000000;
|
11'h166: data = 8'b00000000;
|
Line 779... |
Line 1126... |
11'h170: data = 8'b00001000;
|
11'h170: data = 8'b00001000;
|
11'h171: data = 8'b00001000;
|
11'h171: data = 8'b00001000;
|
11'h172: data = 8'b00010000;
|
11'h172: data = 8'b00010000;
|
11'h173: data = 8'b00010000;
|
11'h173: data = 8'b00010000;
|
11'h174: data = 8'b00100000;
|
11'h174: data = 8'b00100000;
|
11'h175: data = 8'b01000000;
|
11'h175: data = 8'b01000000; // B
|
11'h176: data = 8'b01111110;
|
11'h176: data = 8'b01111110;
|
11'h177: data = 8'b00000000;
|
11'h177: data = 8'b00000000;
|
11'h178: data = 8'b00000000;
|
11'h178: data = 8'b00000000;
|
11'h179: data = 8'b00000000;
|
11'h179: data = 8'b00000000;
|
11'h17A: data = 8'b00000000;
|
11'h17A: data = 8'b00000000;
|
Line 800... |
Line 1147... |
11'h184: data = 8'b00000010;
|
11'h184: data = 8'b00000010;
|
11'h185: data = 8'b00000010;
|
11'h185: data = 8'b00000010;
|
11'h186: data = 8'b00000010;
|
11'h186: data = 8'b00000010;
|
11'h187: data = 8'b00000010;
|
11'h187: data = 8'b00000010;
|
11'h188: data = 8'b00000010;
|
11'h188: data = 8'b00000010;
|
11'h189: data = 8'b01000010;
|
11'h189: data = 8'b01000010; // B
|
11'h18A: data = 8'b00111100;
|
11'h18A: data = 8'b00111100;
|
11'h18B: data = 8'b00000000;
|
11'h18B: data = 8'b00000000;
|
11'h18C: data = 8'b00000000;
|
11'h18C: data = 8'b00000000;
|
11'h18D: data = 8'b00000000;
|
11'h18D: data = 8'b00000000;
|
11'h18E: data = 8'b00000000;
|
11'h18E: data = 8'b00000000;
|
Line 821... |
Line 1168... |
11'h198: data = 8'b00000010;
|
11'h198: data = 8'b00000010;
|
11'h199: data = 8'b00000010;
|
11'h199: data = 8'b00000010;
|
11'h19A: data = 8'b00000010;
|
11'h19A: data = 8'b00000010;
|
11'h19B: data = 8'b00000010;
|
11'h19B: data = 8'b00000010;
|
11'h19C: data = 8'b00000010;
|
11'h19C: data = 8'b00000010;
|
11'h19D: data = 8'b00000010;
|
11'h19D: data = 8'b00000010; // B
|
11'h19E: data = 8'b00000010;
|
11'h19E: data = 8'b00000010;
|
11'h19F: data = 8'b00000000;
|
11'h19F: data = 8'b00000000;
|
11'h1A0: data = 8'b00000000;
|
11'h1A0: data = 8'b00000000;
|
11'h1A1: data = 8'b00000000;
|
11'h1A1: data = 8'b00000000;
|
11'h1A2: data = 8'b00000000;
|
11'h1A2: data = 8'b00000000;
|
Line 842... |
Line 1189... |
11'h1AC: data = 8'b01111100;
|
11'h1AC: data = 8'b01111100;
|
11'h1AD: data = 8'b00000010;
|
11'h1AD: data = 8'b00000010;
|
11'h1AE: data = 8'b00000010;
|
11'h1AE: data = 8'b00000010;
|
11'h1AF: data = 8'b00000010;
|
11'h1AF: data = 8'b00000010;
|
11'h1B0: data = 8'b00000010;
|
11'h1B0: data = 8'b00000010;
|
11'h1B1: data = 8'b00000010;
|
11'h1B1: data = 8'b00000010; // B
|
11'h1B2: data = 8'b01111100;
|
11'h1B2: data = 8'b01111100;
|
11'h1B3: data = 8'b00000000;
|
11'h1B3: data = 8'b00000000;
|
11'h1B4: data = 8'b00000000;
|
11'h1B4: data = 8'b00000000;
|
11'h1B5: data = 8'b00000000;
|
11'h1B5: data = 8'b00000000;
|
11'h1B6: data = 8'b00000000;
|
11'h1B6: data = 8'b00000000;
|
Line 863... |
Line 1210... |
11'h1C0: data = 8'b01000010;
|
11'h1C0: data = 8'b01000010;
|
11'h1C1: data = 8'b01000010;
|
11'h1C1: data = 8'b01000010;
|
11'h1C2: data = 8'b01000010;
|
11'h1C2: data = 8'b01000010;
|
11'h1C3: data = 8'b01000010;
|
11'h1C3: data = 8'b01000010;
|
11'h1C4: data = 8'b01000010;
|
11'h1C4: data = 8'b01000010;
|
11'h1C5: data = 8'b01000010;
|
11'h1C5: data = 8'b01000010; // B
|
11'h1C6: data = 8'b00111100;
|
11'h1C6: data = 8'b00111100;
|
11'h1C7: data = 8'b00000000;
|
11'h1C7: data = 8'b00000000;
|
11'h1C8: data = 8'b00000000;
|
11'h1C8: data = 8'b00000000;
|
11'h1C9: data = 8'b00000000;
|
11'h1C9: data = 8'b00000000;
|
11'h1CA: data = 8'b00000000;
|
11'h1CA: data = 8'b00000000;
|
Line 884... |
Line 1231... |
11'h1D4: data = 8'b00010000;
|
11'h1D4: data = 8'b00010000;
|
11'h1D5: data = 8'b00100000;
|
11'h1D5: data = 8'b00100000;
|
11'h1D6: data = 8'b01000000;
|
11'h1D6: data = 8'b01000000;
|
11'h1D7: data = 8'b01000000;
|
11'h1D7: data = 8'b01000000;
|
11'h1D8: data = 8'b01000000;
|
11'h1D8: data = 8'b01000000;
|
11'h1D9: data = 8'b01000000;
|
11'h1D9: data = 8'b01000000; // B
|
11'h1DA: data = 8'b01000000;
|
11'h1DA: data = 8'b01000000;
|
11'h1DB: data = 8'b00000000;
|
11'h1DB: data = 8'b00000000;
|
11'h1DC: data = 8'b00000000;
|
11'h1DC: data = 8'b00000000;
|
11'h1DD: data = 8'b00000000;
|
11'h1DD: data = 8'b00000000;
|
11'h1DE: data = 8'b00000000;
|
11'h1DE: data = 8'b00000000;
|
Line 905... |
Line 1252... |
11'h1E8: data = 8'b00111100;
|
11'h1E8: data = 8'b00111100;
|
11'h1E9: data = 8'b01000010;
|
11'h1E9: data = 8'b01000010;
|
11'h1EA: data = 8'b01000010;
|
11'h1EA: data = 8'b01000010;
|
11'h1EB: data = 8'b01000010;
|
11'h1EB: data = 8'b01000010;
|
11'h1EC: data = 8'b01000010;
|
11'h1EC: data = 8'b01000010;
|
11'h1ED: data = 8'b01000010;
|
11'h1ED: data = 8'b01000010; // B
|
11'h1EE: data = 8'b01111100;
|
11'h1EE: data = 8'b01111100;
|
11'h1EF: data = 8'b00000000;
|
11'h1EF: data = 8'b00000000;
|
11'h1F0: data = 8'b00000000;
|
11'h1F0: data = 8'b00000000;
|
11'h1F1: data = 8'b00000000;
|
11'h1F1: data = 8'b00000000;
|
11'h1F2: data = 8'b00000000;
|
11'h1F2: data = 8'b00000000;
|
Line 926... |
Line 1273... |
11'h1FC: data = 8'b00000010;
|
11'h1FC: data = 8'b00000010;
|
11'h1FD: data = 8'b00000010;
|
11'h1FD: data = 8'b00000010;
|
11'h1FE: data = 8'b00000100;
|
11'h1FE: data = 8'b00000100;
|
11'h1FF: data = 8'b00001000;
|
11'h1FF: data = 8'b00001000;
|
11'h200: data = 8'b00010000;
|
11'h200: data = 8'b00010000;
|
11'h201: data = 8'b00100000;
|
11'h201: data = 8'b00100000; // B
|
11'h202: data = 8'b01000000;
|
11'h202: data = 8'b01000000;
|
11'h203: data = 8'b00000000;
|
11'h203: data = 8'b00000000;
|
11'h204: data = 8'b00000000;
|
11'h204: data = 8'b00000000;
|
11'h205: data = 8'b00000000;
|
11'h205: data = 8'b00000000;
|
11'h206: data = 8'b00000000;
|
11'h206: data = 8'b00000000;
|
Line 947... |
Line 1294... |
11'h210: data = 8'b00000000;
|
11'h210: data = 8'b00000000;
|
11'h211: data = 8'b00000000;
|
11'h211: data = 8'b00000000;
|
11'h212: data = 8'b00000000;
|
11'h212: data = 8'b00000000;
|
11'h213: data = 8'b00000000;
|
11'h213: data = 8'b00000000;
|
11'h214: data = 8'b00010000;
|
11'h214: data = 8'b00010000;
|
11'h215: data = 8'b00000000;
|
11'h215: data = 8'b00000000; // B
|
11'h216: data = 8'b00010000;
|
11'h216: data = 8'b00010000;
|
11'h217: data = 8'b00000000;
|
11'h217: data = 8'b00000000;
|
11'h218: data = 8'b00000000;
|
11'h218: data = 8'b00000000;
|
11'h219: data = 8'b00000000;
|
11'h219: data = 8'b00000000;
|
11'h21A: data = 8'b00000000;
|
11'h21A: data = 8'b00000000;
|
Line 968... |
Line 1315... |
11'h224: data = 8'b00000000;
|
11'h224: data = 8'b00000000;
|
11'h225: data = 8'b00000000;
|
11'h225: data = 8'b00000000;
|
11'h226: data = 8'b00000000;
|
11'h226: data = 8'b00000000;
|
11'h227: data = 8'b00000000;
|
11'h227: data = 8'b00000000;
|
11'h228: data = 8'b00010000;
|
11'h228: data = 8'b00010000;
|
11'h229: data = 8'b00000000;
|
11'h229: data = 8'b00000000; // B
|
11'h22A: data = 8'b00010000;
|
11'h22A: data = 8'b00010000;
|
11'h22B: data = 8'b00010000;
|
11'h22B: data = 8'b00010000;
|
11'h22C: data = 8'b00100000;
|
11'h22C: data = 8'b00100000;
|
11'h22D: data = 8'b00000000;
|
11'h22D: data = 8'b00000000;
|
11'h22E: data = 8'b00000000;
|
11'h22E: data = 8'b00000000;
|
Line 989... |
Line 1336... |
11'h238: data = 8'b01000000;
|
11'h238: data = 8'b01000000;
|
11'h239: data = 8'b00100000;
|
11'h239: data = 8'b00100000;
|
11'h23A: data = 8'b00010000;
|
11'h23A: data = 8'b00010000;
|
11'h23B: data = 8'b00001000;
|
11'h23B: data = 8'b00001000;
|
11'h23C: data = 8'b00000100;
|
11'h23C: data = 8'b00000100;
|
11'h23D: data = 8'b00000010;
|
11'h23D: data = 8'b00000010; // B
|
11'h23E: data = 8'b00000000;
|
11'h23E: data = 8'b00000000;
|
11'h23F: data = 8'b00000000;
|
11'h23F: data = 8'b00000000;
|
11'h240: data = 8'b00000000;
|
11'h240: data = 8'b00000000;
|
11'h241: data = 8'b00000000;
|
11'h241: data = 8'b00000000;
|
11'h242: data = 8'b00000000;
|
11'h242: data = 8'b00000000;
|
Line 1010... |
Line 1357... |
11'h24C: data = 8'b01111110;
|
11'h24C: data = 8'b01111110;
|
11'h24D: data = 8'b00000000;
|
11'h24D: data = 8'b00000000;
|
11'h24E: data = 8'b00000000;
|
11'h24E: data = 8'b00000000;
|
11'h24F: data = 8'b00000000;
|
11'h24F: data = 8'b00000000;
|
11'h250: data = 8'b00000000;
|
11'h250: data = 8'b00000000;
|
11'h251: data = 8'b00000000;
|
11'h251: data = 8'b00000000; // B
|
11'h252: data = 8'b00000000;
|
11'h252: data = 8'b00000000;
|
11'h253: data = 8'b00000000;
|
11'h253: data = 8'b00000000;
|
11'h254: data = 8'b00000000;
|
11'h254: data = 8'b00000000;
|
11'h255: data = 8'b00000000;
|
11'h255: data = 8'b00000000;
|
11'h256: data = 8'b00000000;
|
11'h256: data = 8'b00000000;
|
Line 1031... |
Line 1378... |
11'h260: data = 8'b00000010;
|
11'h260: data = 8'b00000010;
|
11'h261: data = 8'b00000100;
|
11'h261: data = 8'b00000100;
|
11'h262: data = 8'b00001000;
|
11'h262: data = 8'b00001000;
|
11'h263: data = 8'b00010000;
|
11'h263: data = 8'b00010000;
|
11'h264: data = 8'b00100000;
|
11'h264: data = 8'b00100000;
|
11'h265: data = 8'b01000000;
|
11'h265: data = 8'b01000000; // B
|
11'h266: data = 8'b00000000;
|
11'h266: data = 8'b00000000;
|
11'h267: data = 8'b00000000;
|
11'h267: data = 8'b00000000;
|
11'h268: data = 8'b00000000;
|
11'h268: data = 8'b00000000;
|
11'h269: data = 8'b00000000;
|
11'h269: data = 8'b00000000;
|
11'h26A: data = 8'b00000000;
|
11'h26A: data = 8'b00000000;
|
Line 1052... |
Line 1399... |
11'h274: data = 8'b00010000;
|
11'h274: data = 8'b00010000;
|
11'h275: data = 8'b00010000;
|
11'h275: data = 8'b00010000;
|
11'h276: data = 8'b00010000;
|
11'h276: data = 8'b00010000;
|
11'h277: data = 8'b00010000;
|
11'h277: data = 8'b00010000;
|
11'h278: data = 8'b00010000;
|
11'h278: data = 8'b00010000;
|
11'h279: data = 8'b00000000;
|
11'h279: data = 8'b00000000; // B
|
11'h27A: data = 8'b00010000;
|
11'h27A: data = 8'b00010000;
|
11'h27B: data = 8'b00000000;
|
11'h27B: data = 8'b00000000;
|
11'h27C: data = 8'b00000000;
|
11'h27C: data = 8'b00000000;
|
11'h27D: data = 8'b00000000;
|
11'h27D: data = 8'b00000000;
|
11'h27E: data = 8'b00000000;
|
11'h27E: data = 8'b00000000;
|
Line 1073... |
Line 1420... |
11'h288: data = 8'b01010010;
|
11'h288: data = 8'b01010010;
|
11'h289: data = 8'b01011110;
|
11'h289: data = 8'b01011110;
|
11'h28A: data = 8'b01000000;
|
11'h28A: data = 8'b01000000;
|
11'h28B: data = 8'b01000000;
|
11'h28B: data = 8'b01000000;
|
11'h28C: data = 8'b01000000;
|
11'h28C: data = 8'b01000000;
|
11'h28D: data = 8'b01000000;
|
11'h28D: data = 8'b01000000; // B
|
11'h28E: data = 8'b01111110;
|
11'h28E: data = 8'b01111110;
|
11'h28F: data = 8'b00000000;
|
11'h28F: data = 8'b00000000;
|
11'h290: data = 8'b00000000;
|
11'h290: data = 8'b00000000;
|
11'h291: data = 8'b00000000;
|
11'h291: data = 8'b00000000;
|
11'h292: data = 8'b00000000;
|
11'h292: data = 8'b00000000;
|
Line 1094... |
Line 1441... |
11'h29C: data = 8'b01111110;
|
11'h29C: data = 8'b01111110;
|
11'h29D: data = 8'b01000010;
|
11'h29D: data = 8'b01000010;
|
11'h29E: data = 8'b01000010;
|
11'h29E: data = 8'b01000010;
|
11'h29F: data = 8'b01000010;
|
11'h29F: data = 8'b01000010;
|
11'h2A0: data = 8'b01000010;
|
11'h2A0: data = 8'b01000010;
|
11'h2A1: data = 8'b01000010;
|
11'h2A1: data = 8'b01000010; // B
|
11'h2A2: data = 8'b01000010;
|
11'h2A2: data = 8'b01000010;
|
11'h2A3: data = 8'b00000000;
|
11'h2A3: data = 8'b00000000;
|
11'h2A4: data = 8'b00000000;
|
11'h2A4: data = 8'b00000000;
|
11'h2A5: data = 8'b00000000;
|
11'h2A5: data = 8'b00000000;
|
11'h2A6: data = 8'b00000000;
|
11'h2A6: data = 8'b00000000;
|
Line 1115... |
Line 1462... |
11'h2B0: data = 8'b01111100;
|
11'h2B0: data = 8'b01111100;
|
11'h2B1: data = 8'b01000010;
|
11'h2B1: data = 8'b01000010;
|
11'h2B2: data = 8'b01000010;
|
11'h2B2: data = 8'b01000010;
|
11'h2B3: data = 8'b01000010;
|
11'h2B3: data = 8'b01000010;
|
11'h2B4: data = 8'b01000010;
|
11'h2B4: data = 8'b01000010;
|
11'h2B5: data = 8'b01000010;
|
11'h2B5: data = 8'b01000010; // B
|
11'h2B6: data = 8'b01111100;
|
11'h2B6: data = 8'b01111100;
|
11'h2B7: data = 8'b00000000;
|
11'h2B7: data = 8'b00000000;
|
11'h2B8: data = 8'b00000000;
|
11'h2B8: data = 8'b00000000;
|
11'h2B9: data = 8'b00000000;
|
11'h2B9: data = 8'b00000000;
|
11'h2BA: data = 8'b00000000;
|
11'h2BA: data = 8'b00000000;
|
Line 1136... |
Line 1483... |
11'h2C4: data = 8'b01000000;
|
11'h2C4: data = 8'b01000000;
|
11'h2C5: data = 8'b01000000;
|
11'h2C5: data = 8'b01000000;
|
11'h2C6: data = 8'b01000000;
|
11'h2C6: data = 8'b01000000;
|
11'h2C7: data = 8'b01000000;
|
11'h2C7: data = 8'b01000000;
|
11'h2C8: data = 8'b01000000;
|
11'h2C8: data = 8'b01000000;
|
11'h2C9: data = 8'b01000010;
|
11'h2C9: data = 8'b01000010; // B
|
11'h2CA: data = 8'b00111100;
|
11'h2CA: data = 8'b00111100;
|
11'h2CB: data = 8'b00000000;
|
11'h2CB: data = 8'b00000000;
|
11'h2CC: data = 8'b00000000;
|
11'h2CC: data = 8'b00000000;
|
11'h2CD: data = 8'b00000000;
|
11'h2CD: data = 8'b00000000;
|
11'h2CE: data = 8'b00000000;
|
11'h2CE: data = 8'b00000000;
|
Line 1157... |
Line 1504... |
11'h2D8: data = 8'b01000010;
|
11'h2D8: data = 8'b01000010;
|
11'h2D9: data = 8'b01000010;
|
11'h2D9: data = 8'b01000010;
|
11'h2DA: data = 8'b01000010;
|
11'h2DA: data = 8'b01000010;
|
11'h2DB: data = 8'b01000010;
|
11'h2DB: data = 8'b01000010;
|
11'h2DC: data = 8'b01000010;
|
11'h2DC: data = 8'b01000010;
|
11'h2DD: data = 8'b01000010;
|
11'h2DD: data = 8'b01000010; // B
|
11'h2DE: data = 8'b01111100;
|
11'h2DE: data = 8'b01111100;
|
11'h2DF: data = 8'b00000000;
|
11'h2DF: data = 8'b00000000;
|
11'h2E0: data = 8'b00000000;
|
11'h2E0: data = 8'b00000000;
|
11'h2E1: data = 8'b00000000;
|
11'h2E1: data = 8'b00000000;
|
11'h2E2: data = 8'b00000000;
|
11'h2E2: data = 8'b00000000;
|
Line 1178... |
Line 1525... |
11'h2EC: data = 8'b01000000;
|
11'h2EC: data = 8'b01000000;
|
11'h2ED: data = 8'b01000000;
|
11'h2ED: data = 8'b01000000;
|
11'h2EE: data = 8'b01000000;
|
11'h2EE: data = 8'b01000000;
|
11'h2EF: data = 8'b01000000;
|
11'h2EF: data = 8'b01000000;
|
11'h2F0: data = 8'b01000000;
|
11'h2F0: data = 8'b01000000;
|
11'h2F1: data = 8'b01000000;
|
11'h2F1: data = 8'b01000000; // B
|
11'h2F2: data = 8'b01111110;
|
11'h2F2: data = 8'b01111110;
|
11'h2F3: data = 8'b00000000;
|
11'h2F3: data = 8'b00000000;
|
11'h2F4: data = 8'b00000000;
|
11'h2F4: data = 8'b00000000;
|
11'h2F5: data = 8'b00000000;
|
11'h2F5: data = 8'b00000000;
|
11'h2F6: data = 8'b00000000;
|
11'h2F6: data = 8'b00000000;
|
Line 1199... |
Line 1546... |
11'h300: data = 8'b01000000;
|
11'h300: data = 8'b01000000;
|
11'h301: data = 8'b01000000;
|
11'h301: data = 8'b01000000;
|
11'h302: data = 8'b01000000;
|
11'h302: data = 8'b01000000;
|
11'h303: data = 8'b01000000;
|
11'h303: data = 8'b01000000;
|
11'h304: data = 8'b01000000;
|
11'h304: data = 8'b01000000;
|
11'h305: data = 8'b01000000;
|
11'h305: data = 8'b01000000; // B
|
11'h306: data = 8'b01000000;
|
11'h306: data = 8'b01000000;
|
11'h307: data = 8'b00000000;
|
11'h307: data = 8'b00000000;
|
11'h308: data = 8'b00000000;
|
11'h308: data = 8'b00000000;
|
11'h309: data = 8'b00000000;
|
11'h309: data = 8'b00000000;
|
11'h30A: data = 8'b00000000;
|
11'h30A: data = 8'b00000000;
|
Line 1220... |
Line 1567... |
11'h314: data = 8'b01011100;
|
11'h314: data = 8'b01011100;
|
11'h315: data = 8'b01000010;
|
11'h315: data = 8'b01000010;
|
11'h316: data = 8'b01000010;
|
11'h316: data = 8'b01000010;
|
11'h317: data = 8'b01000010;
|
11'h317: data = 8'b01000010;
|
11'h318: data = 8'b01000010;
|
11'h318: data = 8'b01000010;
|
11'h319: data = 8'b01000010;
|
11'h319: data = 8'b01000010; // B
|
11'h31A: data = 8'b00111100;
|
11'h31A: data = 8'b00111100;
|
11'h31B: data = 8'b00000000;
|
11'h31B: data = 8'b00000000;
|
11'h31C: data = 8'b00000000;
|
11'h31C: data = 8'b00000000;
|
11'h31D: data = 8'b00000000;
|
11'h31D: data = 8'b00000000;
|
11'h31E: data = 8'b00000000;
|
11'h31E: data = 8'b00000000;
|
Line 1241... |
Line 1588... |
11'h328: data = 8'b01000010;
|
11'h328: data = 8'b01000010;
|
11'h329: data = 8'b01000010;
|
11'h329: data = 8'b01000010;
|
11'h32A: data = 8'b01000010;
|
11'h32A: data = 8'b01000010;
|
11'h32B: data = 8'b01000010;
|
11'h32B: data = 8'b01000010;
|
11'h32C: data = 8'b01000010;
|
11'h32C: data = 8'b01000010;
|
11'h32D: data = 8'b01000010;
|
11'h32D: data = 8'b01000010; // B
|
11'h32E: data = 8'b01000010;
|
11'h32E: data = 8'b01000010;
|
11'h32F: data = 8'b00000000;
|
11'h32F: data = 8'b00000000;
|
11'h330: data = 8'b00000000;
|
11'h330: data = 8'b00000000;
|
11'h331: data = 8'b00000000;
|
11'h331: data = 8'b00000000;
|
11'h332: data = 8'b00000000;
|
11'h332: data = 8'b00000000;
|
Line 1262... |
Line 1609... |
11'h33C: data = 8'b00010000;
|
11'h33C: data = 8'b00010000;
|
11'h33D: data = 8'b00010000;
|
11'h33D: data = 8'b00010000;
|
11'h33E: data = 8'b00010000;
|
11'h33E: data = 8'b00010000;
|
11'h33F: data = 8'b00010000;
|
11'h33F: data = 8'b00010000;
|
11'h340: data = 8'b00010000;
|
11'h340: data = 8'b00010000;
|
11'h341: data = 8'b00010000;
|
11'h341: data = 8'b00010000; // B
|
11'h342: data = 8'b01111110;
|
11'h342: data = 8'b01111110;
|
11'h343: data = 8'b00000000;
|
11'h343: data = 8'b00000000;
|
11'h344: data = 8'b00000000;
|
11'h344: data = 8'b00000000;
|
11'h345: data = 8'b00000000;
|
11'h345: data = 8'b00000000;
|
11'h346: data = 8'b00000000;
|
11'h346: data = 8'b00000000;
|
Line 1283... |
Line 1630... |
11'h350: data = 8'b00000010;
|
11'h350: data = 8'b00000010;
|
11'h351: data = 8'b00000010;
|
11'h351: data = 8'b00000010;
|
11'h352: data = 8'b00000010;
|
11'h352: data = 8'b00000010;
|
11'h353: data = 8'b00000010;
|
11'h353: data = 8'b00000010;
|
11'h354: data = 8'b00000010;
|
11'h354: data = 8'b00000010;
|
11'h355: data = 8'b01000010;
|
11'h355: data = 8'b01000010; // B
|
11'h356: data = 8'b00111100;
|
11'h356: data = 8'b00111100;
|
11'h357: data = 8'b00000000;
|
11'h357: data = 8'b00000000;
|
11'h358: data = 8'b00000000;
|
11'h358: data = 8'b00000000;
|
11'h359: data = 8'b00000000;
|
11'h359: data = 8'b00000000;
|
11'h35A: data = 8'b00000000;
|
11'h35A: data = 8'b00000000;
|
Line 1304... |
Line 1651... |
11'h364: data = 8'b01100000;
|
11'h364: data = 8'b01100000;
|
11'h365: data = 8'b01010000;
|
11'h365: data = 8'b01010000;
|
11'h366: data = 8'b01001000;
|
11'h366: data = 8'b01001000;
|
11'h367: data = 8'b01000100;
|
11'h367: data = 8'b01000100;
|
11'h368: data = 8'b01000010;
|
11'h368: data = 8'b01000010;
|
11'h369: data = 8'b01000010;
|
11'h369: data = 8'b01000010; // B
|
11'h36A: data = 8'b01000010;
|
11'h36A: data = 8'b01000010;
|
11'h36B: data = 8'b00000000;
|
11'h36B: data = 8'b00000000;
|
11'h36C: data = 8'b00000000;
|
11'h36C: data = 8'b00000000;
|
11'h36D: data = 8'b00000000;
|
11'h36D: data = 8'b00000000;
|
11'h36E: data = 8'b00000000;
|
11'h36E: data = 8'b00000000;
|
Line 1325... |
Line 1672... |
11'h378: data = 8'b01000000;
|
11'h378: data = 8'b01000000;
|
11'h379: data = 8'b01000000;
|
11'h379: data = 8'b01000000;
|
11'h37A: data = 8'b01000000;
|
11'h37A: data = 8'b01000000;
|
11'h37B: data = 8'b01000000;
|
11'h37B: data = 8'b01000000;
|
11'h37C: data = 8'b01000000;
|
11'h37C: data = 8'b01000000;
|
11'h37D: data = 8'b01000000;
|
11'h37D: data = 8'b01000000; // B
|
11'h37E: data = 8'b01111110;
|
11'h37E: data = 8'b01111110;
|
11'h37F: data = 8'b00000000;
|
11'h37F: data = 8'b00000000;
|
11'h380: data = 8'b00000000;
|
11'h380: data = 8'b00000000;
|
11'h381: data = 8'b00000000;
|
11'h381: data = 8'b00000000;
|
11'h382: data = 8'b00000000;
|
11'h382: data = 8'b00000000;
|
Line 1346... |
Line 1693... |
11'h38C: data = 8'b01000010;
|
11'h38C: data = 8'b01000010;
|
11'h38D: data = 8'b01000010;
|
11'h38D: data = 8'b01000010;
|
11'h38E: data = 8'b01000010;
|
11'h38E: data = 8'b01000010;
|
11'h38F: data = 8'b01000010;
|
11'h38F: data = 8'b01000010;
|
11'h390: data = 8'b01000010;
|
11'h390: data = 8'b01000010;
|
11'h391: data = 8'b01000010;
|
11'h391: data = 8'b01000010; // B
|
11'h392: data = 8'b01000010;
|
11'h392: data = 8'b01000010;
|
11'h393: data = 8'b00000000;
|
11'h393: data = 8'b00000000;
|
11'h394: data = 8'b00000000;
|
11'h394: data = 8'b00000000;
|
11'h395: data = 8'b00000000;
|
11'h395: data = 8'b00000000;
|
11'h396: data = 8'b00000000;
|
11'h396: data = 8'b00000000;
|
Line 1367... |
Line 1714... |
11'h3A0: data = 8'b01000010;
|
11'h3A0: data = 8'b01000010;
|
11'h3A1: data = 8'b01000010;
|
11'h3A1: data = 8'b01000010;
|
11'h3A2: data = 8'b01000010;
|
11'h3A2: data = 8'b01000010;
|
11'h3A3: data = 8'b01000010;
|
11'h3A3: data = 8'b01000010;
|
11'h3A4: data = 8'b01000010;
|
11'h3A4: data = 8'b01000010;
|
11'h3A5: data = 8'b01000010;
|
11'h3A5: data = 8'b01000010; // B
|
11'h3A6: data = 8'b01000010;
|
11'h3A6: data = 8'b01000010;
|
11'h3A7: data = 8'b00000000;
|
11'h3A7: data = 8'b00000000;
|
11'h3A8: data = 8'b00000000;
|
11'h3A8: data = 8'b00000000;
|
11'h3A9: data = 8'b00000000;
|
11'h3A9: data = 8'b00000000;
|
11'h3AA: data = 8'b00000000;
|
11'h3AA: data = 8'b00000000;
|
Line 1388... |
Line 1735... |
11'h3B4: data = 8'b01000010;
|
11'h3B4: data = 8'b01000010;
|
11'h3B5: data = 8'b01000010;
|
11'h3B5: data = 8'b01000010;
|
11'h3B6: data = 8'b01000010;
|
11'h3B6: data = 8'b01000010;
|
11'h3B7: data = 8'b01000010;
|
11'h3B7: data = 8'b01000010;
|
11'h3B8: data = 8'b01000010;
|
11'h3B8: data = 8'b01000010;
|
11'h3B9: data = 8'b01000010;
|
11'h3B9: data = 8'b01000010; // B
|
11'h3BA: data = 8'b00111100;
|
11'h3BA: data = 8'b00111100;
|
11'h3BB: data = 8'b00000000;
|
11'h3BB: data = 8'b00000000;
|
11'h3BC: data = 8'b00000000;
|
11'h3BC: data = 8'b00000000;
|
11'h3BD: data = 8'b00000000;
|
11'h3BD: data = 8'b00000000;
|
11'h3BE: data = 8'b00000000;
|
11'h3BE: data = 8'b00000000;
|
Line 1409... |
Line 1756... |
11'h3C8: data = 8'b01000000;
|
11'h3C8: data = 8'b01000000;
|
11'h3C9: data = 8'b01000000;
|
11'h3C9: data = 8'b01000000;
|
11'h3CA: data = 8'b01000000;
|
11'h3CA: data = 8'b01000000;
|
11'h3CB: data = 8'b01000000;
|
11'h3CB: data = 8'b01000000;
|
11'h3CC: data = 8'b01000000;
|
11'h3CC: data = 8'b01000000;
|
11'h3CD: data = 8'b01000000;
|
11'h3CD: data = 8'b01000000; // B
|
11'h3CE: data = 8'b01000000;
|
11'h3CE: data = 8'b01000000;
|
11'h3CF: data = 8'b00000000;
|
11'h3CF: data = 8'b00000000;
|
11'h3D0: data = 8'b00000000;
|
11'h3D0: data = 8'b00000000;
|
11'h3D1: data = 8'b00000000;
|
11'h3D1: data = 8'b00000000;
|
11'h3D2: data = 8'b00000000;
|
11'h3D2: data = 8'b00000000;
|
Line 1430... |
Line 1777... |
11'h3DC: data = 8'b01000010;
|
11'h3DC: data = 8'b01000010;
|
11'h3DD: data = 8'b01000010;
|
11'h3DD: data = 8'b01000010;
|
11'h3DE: data = 8'b01000010;
|
11'h3DE: data = 8'b01000010;
|
11'h3DF: data = 8'b01000010;
|
11'h3DF: data = 8'b01000010;
|
11'h3E0: data = 8'b01001010;
|
11'h3E0: data = 8'b01001010;
|
11'h3E1: data = 8'b01000110;
|
11'h3E1: data = 8'b01000110; // B
|
11'h3E2: data = 8'b00011110;
|
11'h3E2: data = 8'b00011110;
|
11'h3E3: data = 8'b00000000;
|
11'h3E3: data = 8'b00000000;
|
11'h3E4: data = 8'b00000000;
|
11'h3E4: data = 8'b00000000;
|
11'h3E5: data = 8'b00000000;
|
11'h3E5: data = 8'b00000000;
|
11'h3E6: data = 8'b00000000;
|
11'h3E6: data = 8'b00000000;
|
Line 1451... |
Line 1798... |
11'h3F0: data = 8'b01100000;
|
11'h3F0: data = 8'b01100000;
|
11'h3F1: data = 8'b01100000;
|
11'h3F1: data = 8'b01100000;
|
11'h3F2: data = 8'b01010000;
|
11'h3F2: data = 8'b01010000;
|
11'h3F3: data = 8'b01001000;
|
11'h3F3: data = 8'b01001000;
|
11'h3F4: data = 8'b01000100;
|
11'h3F4: data = 8'b01000100;
|
11'h3F5: data = 8'b01000100;
|
11'h3F5: data = 8'b01000100; // B
|
11'h3F6: data = 8'b01000010;
|
11'h3F6: data = 8'b01000010;
|
11'h3F7: data = 8'b00000000;
|
11'h3F7: data = 8'b00000000;
|
11'h3F8: data = 8'b00000000;
|
11'h3F8: data = 8'b00000000;
|
11'h3F9: data = 8'b00000000;
|
11'h3F9: data = 8'b00000000;
|
11'h3FA: data = 8'b00000000;
|
11'h3FA: data = 8'b00000000;
|
Line 1472... |
Line 1819... |
11'h404: data = 8'b00111100;
|
11'h404: data = 8'b00111100;
|
11'h405: data = 8'b00000010;
|
11'h405: data = 8'b00000010;
|
11'h406: data = 8'b00000010;
|
11'h406: data = 8'b00000010;
|
11'h407: data = 8'b00000010;
|
11'h407: data = 8'b00000010;
|
11'h408: data = 8'b00000010;
|
11'h408: data = 8'b00000010;
|
11'h409: data = 8'b01000010;
|
11'h409: data = 8'b01000010; // B
|
11'h40A: data = 8'b00111100;
|
11'h40A: data = 8'b00111100;
|
11'h40B: data = 8'b00000000;
|
11'h40B: data = 8'b00000000;
|
11'h40C: data = 8'b00000000;
|
11'h40C: data = 8'b00000000;
|
11'h40D: data = 8'b00000000;
|
11'h40D: data = 8'b00000000;
|
11'h40E: data = 8'b00000000;
|
11'h40E: data = 8'b00000000;
|
Line 1493... |
Line 1840... |
11'h418: data = 8'b00010000;
|
11'h418: data = 8'b00010000;
|
11'h419: data = 8'b00010000;
|
11'h419: data = 8'b00010000;
|
11'h41A: data = 8'b00010000;
|
11'h41A: data = 8'b00010000;
|
11'h41B: data = 8'b00010000;
|
11'h41B: data = 8'b00010000;
|
11'h41C: data = 8'b00010000;
|
11'h41C: data = 8'b00010000;
|
11'h41D: data = 8'b00010000;
|
11'h41D: data = 8'b00010000; // B
|
11'h41E: data = 8'b00010000;
|
11'h41E: data = 8'b00010000;
|
11'h41F: data = 8'b00000000;
|
11'h41F: data = 8'b00000000;
|
11'h420: data = 8'b00000000;
|
11'h420: data = 8'b00000000;
|
11'h421: data = 8'b00000000;
|
11'h421: data = 8'b00000000;
|
11'h422: data = 8'b00000000;
|
11'h422: data = 8'b00000000;
|
Line 1514... |
Line 1861... |
11'h42C: data = 8'b01000010;
|
11'h42C: data = 8'b01000010;
|
11'h42D: data = 8'b01000010;
|
11'h42D: data = 8'b01000010;
|
11'h42E: data = 8'b01000010;
|
11'h42E: data = 8'b01000010;
|
11'h42F: data = 8'b01000010;
|
11'h42F: data = 8'b01000010;
|
11'h430: data = 8'b01000010;
|
11'h430: data = 8'b01000010;
|
11'h431: data = 8'b01000010;
|
11'h431: data = 8'b01000010; // B
|
11'h432: data = 8'b00111100;
|
11'h432: data = 8'b00111100;
|
11'h433: data = 8'b00000000;
|
11'h433: data = 8'b00000000;
|
11'h434: data = 8'b00000000;
|
11'h434: data = 8'b00000000;
|
11'h435: data = 8'b00000000;
|
11'h435: data = 8'b00000000;
|
11'h436: data = 8'b00000000;
|
11'h436: data = 8'b00000000;
|
Line 1535... |
Line 1882... |
11'h440: data = 8'b01000010;
|
11'h440: data = 8'b01000010;
|
11'h441: data = 8'b01000010;
|
11'h441: data = 8'b01000010;
|
11'h442: data = 8'b01000010;
|
11'h442: data = 8'b01000010;
|
11'h443: data = 8'b01000010;
|
11'h443: data = 8'b01000010;
|
11'h444: data = 8'b01000100;
|
11'h444: data = 8'b01000100;
|
11'h445: data = 8'b00101000;
|
11'h445: data = 8'b00101000; // B
|
11'h446: data = 8'b00010000;
|
11'h446: data = 8'b00010000;
|
11'h447: data = 8'b00000000;
|
11'h447: data = 8'b00000000;
|
11'h448: data = 8'b00000000;
|
11'h448: data = 8'b00000000;
|
11'h449: data = 8'b00000000;
|
11'h449: data = 8'b00000000;
|
11'h44A: data = 8'b00000000;
|
11'h44A: data = 8'b00000000;
|
Line 1556... |
Line 1903... |
11'h454: data = 8'b01000010;
|
11'h454: data = 8'b01000010;
|
11'h455: data = 8'b01000010;
|
11'h455: data = 8'b01000010;
|
11'h456: data = 8'b01000010;
|
11'h456: data = 8'b01000010;
|
11'h457: data = 8'b01000010;
|
11'h457: data = 8'b01000010;
|
11'h458: data = 8'b01010010;
|
11'h458: data = 8'b01010010;
|
11'h459: data = 8'b01101010;
|
11'h459: data = 8'b01101010; // B
|
11'h45A: data = 8'b01000110;
|
11'h45A: data = 8'b01000110;
|
11'h45B: data = 8'b00000000;
|
11'h45B: data = 8'b00000000;
|
11'h45C: data = 8'b00000000;
|
11'h45C: data = 8'b00000000;
|
11'h45D: data = 8'b00000000;
|
11'h45D: data = 8'b00000000;
|
11'h45E: data = 8'b00000000;
|
11'h45E: data = 8'b00000000;
|
Line 2387... |
Line 2734... |
|
|
default data = 8'b00000000; // blank
|
default data = 8'b00000000; // blank
|
|
|
endcase
|
endcase
|
|
|
|
endmodule
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// KEYBOARD SCAN CODE CONVERTER
|
|
//
|
|
// Converts an 8 bit scan code to ASCII characters. Note that we don't represent
|
|
// any control or other special characters in this table. Controls, shifts and
|
|
// other keys are created at a higher level.
|
|
//
|
|
// There are two tables, the lower case or "normal" lookup table, and a shifted
|
|
// table that gives either the upper case for the key, or an alternate
|
|
// character.
|
|
//
|
|
// To determine the proper arrangement of scan codes to ascii codes, a keyboard
|
|
// scan code table was used, which can be found various places on the internet.
|
|
//
|
|
|
|
module scnrom(addr, data);
|
|
|
|
input [7:0] addr;
|
|
output [7:0] data;
|
|
|
|
reg [7:0] data;
|
|
|
|
always @(addr) case (addr)
|
|
|
|
8'h00: data = 8'h00; //
|
|
8'h01: data = 8'h00; // f9
|
|
8'h02: data = 8'h00; //
|
|
8'h03: data = 8'h00; // f5
|
|
8'h04: data = 8'h00; // f3
|
|
8'h05: data = 8'h00; // f1
|
|
8'h06: data = 8'h00; // f2
|
|
8'h07: data = 8'h00; // f12
|
|
8'h08: data = 8'h00; //
|
|
8'h09: data = 8'h00; // f10
|
|
8'h0A: data = 8'h00; // f8
|
|
8'h0B: data = 8'h00; // f6
|
|
8'h0C: data = 8'h00; // f4
|
|
8'h0D: data = 8'h09; // tab
|
|
8'h0E: data = 8'h60; // `
|
|
8'h0F: data = 8'h00; //
|
|
8'h10: data = 8'h00; //
|
|
8'h11: data = 8'h00; // lft alt
|
|
8'h12: data = 8'h00; // lft shift
|
|
8'h13: data = 8'h00; //
|
|
8'h14: data = 8'h00; // left ctl
|
|
8'h15: data = 8'h71; // q
|
|
8'h16: data = 8'h31; // 1
|
|
8'h17: data = 8'h00; //
|
|
8'h18: data = 8'h00; //
|
|
8'h19: data = 8'h00; //
|
|
8'h1A: data = 8'h7a; // z
|
|
8'h1B: data = 8'h73; // s
|
|
8'h1C: data = 8'h61; // a
|
|
8'h1D: data = 8'h77; // w
|
|
8'h1E: data = 8'h32; // 2
|
|
8'h1F: data = 8'h00; //
|
|
8'h20: data = 8'h00; //
|
|
8'h21: data = 8'h63; // c
|
|
8'h22: data = 8'h78; // x
|
|
8'h23: data = 8'h64; // d
|
|
8'h24: data = 8'h65; // e
|
|
8'h25: data = 8'h34; // 4
|
|
8'h26: data = 8'h33; // 3
|
|
8'h27: data = 8'h00; //
|
|
8'h28: data = 8'h00; //
|
|
8'h29: data = 8'h20; // sp
|
|
8'h2A: data = 8'h76; // v
|
|
8'h2B: data = 8'h66; // f
|
|
8'h2C: data = 8'h74; // t
|
|
8'h2D: data = 8'h72; // r
|
|
8'h2E: data = 8'h35; // 5
|
|
8'h2F: data = 8'h00; //
|
|
8'h30: data = 8'h00; //
|
|
8'h31: data = 8'h6e; // n
|
|
8'h32: data = 8'h62; // b
|
|
8'h33: data = 8'h68; // h
|
|
8'h34: data = 8'h67; // g
|
|
8'h35: data = 8'h79; // y
|
|
8'h36: data = 8'h36; // 6
|
|
8'h37: data = 8'h00; //
|
|
8'h38: data = 8'h00; //
|
|
8'h39: data = 8'h00; //
|
|
8'h3A: data = 8'h6d; // m
|
|
8'h3B: data = 8'h6a; // j
|
|
8'h3C: data = 8'h75; // u
|
|
8'h3D: data = 8'h37; // 7
|
|
8'h3E: data = 8'h38; // 8
|
|
8'h3F: data = 8'h00; //
|
|
8'h40: data = 8'h00; //
|
|
8'h41: data = 8'h2c; // ,
|
|
8'h42: data = 8'h6b; // k
|
|
8'h43: data = 8'h69; // i
|
|
8'h44: data = 8'h6f; // o
|
|
8'h45: data = 8'h30; // 0
|
|
8'h46: data = 8'h39; // 9
|
|
8'h47: data = 8'h00; //
|
|
8'h48: data = 8'h00; //
|
|
8'h49: data = 8'h2e; // .
|
|
8'h4A: data = 8'h2f; // /
|
|
8'h4B: data = 8'h6c; // l
|
|
8'h4C: data = 8'h3b; // ;
|
|
8'h4D: data = 8'h70; // p
|
|
8'h4E: data = 8'h2d; // -
|
|
8'h4F: data = 8'h00; //
|
|
8'h50: data = 8'h00; //
|
|
8'h51: data = 8'h00; //
|
|
8'h52: data = 8'h27; // '
|
|
8'h53: data = 8'h00; //
|
|
8'h54: data = 8'h5b; // [
|
|
8'h55: data = 8'h3d; // =
|
|
8'h56: data = 8'h00; //
|
|
8'h57: data = 8'h00; //
|
|
8'h58: data = 8'h00; // caps lock
|
|
8'h59: data = 8'h00; // rgt shift
|
|
8'h5A: data = 8'h0D; // ent
|
|
8'h5B: data = 8'h5d; // ]
|
|
8'h5C: data = 8'h00; //
|
|
8'h5D: data = 8'h5c; // \
|
|
8'h5E: data = 8'h00; //
|
|
8'h5F: data = 8'h00; //
|
|
8'h60: data = 8'h00; //
|
|
8'h61: data = 8'h00; //
|
|
8'h62: data = 8'h00; //
|
|
8'h63: data = 8'h00; //
|
|
8'h64: data = 8'h00; //
|
|
8'h65: data = 8'h00; //
|
|
8'h66: data = 8'h08; // bcksp
|
|
8'h67: data = 8'h00; //
|
|
8'h68: data = 8'h00; //
|
|
8'h69: data = 8'h31; // 1
|
|
8'h6A: data = 8'h00; //
|
|
8'h6B: data = 8'h34; // 4
|
|
8'h6C: data = 8'h37; // 7
|
|
8'h6D: data = 8'h00; //
|
|
8'h6E: data = 8'h00; //
|
|
8'h6F: data = 8'h00; //
|
|
8'h70: data = 8'h30; // 0
|
|
8'h71: data = 8'h2e; // .
|
|
8'h72: data = 8'h32; // 2
|
|
8'h73: data = 8'h35; // 5
|
|
8'h74: data = 8'h36; // 6
|
|
8'h75: data = 8'h38; // 8
|
|
8'h76: data = 8'h1B; // esc
|
|
8'h77: data = 8'h00; // num lock
|
|
8'h78: data = 8'h00; // f11
|
|
8'h79: data = 8'h2b; // +
|
|
8'h7A: data = 8'h33; // 3
|
|
8'h7B: data = 8'h2d; // -
|
|
8'h7C: data = 8'h2a; // -
|
|
8'h7D: data = 8'h39; // 9
|
|
8'h7E: data = 8'h00; // scl lock
|
|
8'h7F: data = 8'h00; //
|
|
8'h80: data = 8'h00; //
|
|
8'h81: data = 8'h00; //
|
|
8'h82: data = 8'h00; //
|
|
8'h83: data = 8'h00; // f7
|
|
8'h84: data = 8'h00; //
|
|
8'h85: data = 8'h00; //
|
|
8'h86: data = 8'h00; //
|
|
8'h87: data = 8'h00; //
|
|
8'h88: data = 8'h00; //
|
|
8'h89: data = 8'h00; //
|
|
8'h8A: data = 8'h00; //
|
|
8'h8B: data = 8'h00; //
|
|
8'h8C: data = 8'h00; //
|
|
8'h8D: data = 8'h00; //
|
|
8'h8E: data = 8'h00; //
|
|
8'h8F: data = 8'h00; //
|
|
|
|
default data = 8'b00000000; // blank
|
|
|
|
endcase
|
|
|
|
endmodule
|
|
|
|
// upper case version
|
|
|
|
module scnromu(addr, data);
|
|
|
|
input [7:0] addr;
|
|
output [7:0] data;
|
|
|
|
reg [7:0] data;
|
|
|
|
always @(addr) case (addr)
|
|
|
|
8'h00: data = 8'h00; //
|
|
8'h01: data = 8'h00; // f9
|
|
8'h02: data = 8'h00; //
|
|
8'h03: data = 8'h00; // f5
|
|
8'h04: data = 8'h00; // f3
|
|
8'h05: data = 8'h00; // f1
|
|
8'h06: data = 8'h00; // f2
|
|
8'h07: data = 8'h00; // f12
|
|
8'h08: data = 8'h00; //
|
|
8'h09: data = 8'h00; // f10
|
|
8'h0A: data = 8'h00; // f8
|
|
8'h0B: data = 8'h00; // f6
|
|
8'h0C: data = 8'h00; // f4
|
|
8'h0D: data = 8'h09; // tab
|
|
8'h0E: data = 8'h7e; // ~
|
|
8'h0F: data = 8'h00; //
|
|
8'h10: data = 8'h00; //
|
|
8'h11: data = 8'h00; // lft alt
|
|
8'h12: data = 8'h00; // lft shift
|
|
8'h13: data = 8'h00; //
|
|
8'h14: data = 8'h00; // lft ctl
|
|
8'h15: data = 8'h51; // Q
|
|
8'h16: data = 8'h21; // !
|
|
8'h17: data = 8'h00; //
|
|
8'h18: data = 8'h00; //
|
|
8'h19: data = 8'h00; //
|
|
8'h1A: data = 8'h5a; // Z
|
|
8'h1B: data = 8'h53; // S
|
|
8'h1C: data = 8'h41; // A
|
|
8'h1D: data = 8'h57; // W
|
|
8'h1E: data = 8'h40; // @
|
|
8'h1F: data = 8'h00; //
|
|
8'h20: data = 8'h00; //
|
|
8'h21: data = 8'h43; // C
|
|
8'h22: data = 8'h58; // X
|
|
8'h23: data = 8'h44; // D
|
|
8'h24: data = 8'h45; // E
|
|
8'h25: data = 8'h24; // $
|
|
8'h26: data = 8'h23; // #
|
|
8'h27: data = 8'h00; //
|
|
8'h28: data = 8'h00; //
|
|
8'h29: data = 8'h20; // sp
|
|
8'h2A: data = 8'h56; // V
|
|
8'h2B: data = 8'h46; // F
|
|
8'h2C: data = 8'h54; // T
|
|
8'h2D: data = 8'h52; // R
|
|
8'h2E: data = 8'h25; // %
|
|
8'h2F: data = 8'h00; //
|
|
8'h30: data = 8'h00; //
|
|
8'h31: data = 8'h4e; // N
|
|
8'h32: data = 8'h42; // B
|
|
8'h33: data = 8'h48; // H
|
|
8'h34: data = 8'h47; // G
|
|
8'h35: data = 8'h59; // Y
|
|
8'h36: data = 8'h5e; // ^
|
|
8'h37: data = 8'h00; //
|
|
8'h38: data = 8'h00; //
|
|
8'h39: data = 8'h00; //
|
|
8'h3A: data = 8'h4d; // M
|
|
8'h3B: data = 8'h4a; // J
|
|
8'h3C: data = 8'h55; // U
|
|
8'h3D: data = 8'h26; // &
|
|
8'h3E: data = 8'h2a; // *
|
|
8'h3F: data = 8'h00; //
|
|
8'h40: data = 8'h00; //
|
|
8'h41: data = 8'h3c; // <
|
|
8'h42: data = 8'h4b; // K
|
|
8'h43: data = 8'h49; // I
|
|
8'h44: data = 8'h4f; // O
|
|
8'h45: data = 8'h29; // )
|
|
8'h46: data = 8'h28; // (
|
|
8'h47: data = 8'h00; //
|
|
8'h48: data = 8'h00; //
|
|
8'h49: data = 8'h3e; // >
|
|
8'h4A: data = 8'h3f; // ?
|
|
8'h4B: data = 8'h4c; // L
|
|
8'h4C: data = 8'h3a; // :
|
|
8'h4D: data = 8'h50; // P
|
|
8'h4E: data = 8'h5f; // _
|
|
8'h4F: data = 8'h00; //
|
|
8'h50: data = 8'h00; //
|
|
8'h51: data = 8'h00; //
|
|
8'h52: data = 8'h22; // "
|
|
8'h53: data = 8'h00; //
|
|
8'h54: data = 8'h7b; // {
|
|
8'h55: data = 8'h2b; // +
|
|
8'h56: data = 8'h00; //
|
|
8'h57: data = 8'h00; //
|
|
8'h58: data = 8'h00; // caps lock
|
|
8'h59: data = 8'h00; // rgt shift
|
|
8'h5A: data = 8'h0D; // ent
|
|
8'h5B: data = 8'h7d; // }
|
|
8'h5C: data = 8'h00; //
|
|
8'h5D: data = 8'h7c; // |
|
|
8'h5E: data = 8'h00; //
|
|
8'h5F: data = 8'h00; //
|
|
8'h60: data = 8'h00; //
|
|
8'h61: data = 8'h00; //
|
|
8'h62: data = 8'h00; //
|
|
8'h63: data = 8'h00; //
|
|
8'h64: data = 8'h00; //
|
|
8'h65: data = 8'h00; //
|
|
8'h66: data = 8'h08; // bcksp
|
|
8'h67: data = 8'h00; //
|
|
8'h68: data = 8'h00; //
|
|
8'h69: data = 8'h31; // 1
|
|
8'h6A: data = 8'h00; //
|
|
8'h6B: data = 8'h34; // 4
|
|
8'h6C: data = 8'h37; // 7
|
|
8'h6D: data = 8'h00; //
|
|
8'h6E: data = 8'h00; //
|
|
8'h6F: data = 8'h00; //
|
|
8'h70: data = 8'h30; // 0
|
|
8'h71: data = 8'h2e; // .
|
|
8'h72: data = 8'h32; // 2
|
|
8'h73: data = 8'h35; // 5
|
|
8'h74: data = 8'h36; // 6
|
|
8'h75: data = 8'h38; // 8
|
|
8'h76: data = 8'h1B; // esc
|
|
8'h77: data = 8'h00; // num lock
|
|
8'h78: data = 8'h00; // f11
|
|
8'h79: data = 8'h2b; // +
|
|
8'h7A: data = 8'h33; // 3
|
|
8'h7B: data = 8'h2d; // -
|
|
8'h7C: data = 8'h2a; // *
|
|
8'h7D: data = 8'h39; // 9
|
|
8'h7E: data = 8'h00; // scl lock
|
|
8'h7F: data = 8'h00; //
|
|
8'h80: data = 8'h00; //
|
|
8'h81: data = 8'h00; //
|
|
8'h82: data = 8'h00; //
|
|
8'h83: data = 8'h00; // f7
|
|
8'h84: data = 8'h00; //
|
|
8'h85: data = 8'h00; //
|
|
8'h86: data = 8'h00; //
|
|
8'h87: data = 8'h00; //
|
|
8'h88: data = 8'h00; //
|
|
8'h89: data = 8'h00; //
|
|
8'h8A: data = 8'h00; //
|
|
8'h8B: data = 8'h00; //
|
|
8'h8C: data = 8'h00; //
|
|
8'h8D: data = 8'h00; //
|
|
8'h8E: data = 8'h00; //
|
|
8'h8F: data = 8'h00; //
|
|
|
|
default data = 8'b00000000; // blank
|
|
|
|
endcase
|
|
|
endmodule
|
endmodule
|
|
|
No newline at end of file
|
No newline at end of file
|