OpenCores
URL https://opencores.org/ocsvn/rf6809/rf6809/trunk

Subversion Repositories rf6809

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 20 to Rev 21
    Reverse comparison

Rev 20 → Rev 21

/rf6809/trunk/rtl/cpu/rf6809.sv
51,9 → 51,10
parameter LOAD1 = 6'd7;
parameter LOAD2 = 6'd8;
parameter STORE1 = 6'd9;
parameter STORE2 = 6'd10;
parameter OUTER_INDEXING = 6'd11;
parameter OUTER_INDEXING2 = 6'd12;
parameter STORE1a = 6'd10;
parameter STORE2 = 6'd11;
parameter OUTER_INDEXING = 6'd12;
parameter OUTER_INDEXING2 = 6'd13;
parameter ICACHE1 = 6'd31;
parameter ICACHE2 = 6'd32;
parameter ICACHE3 = 6'd33;
130,7 → 131,13
reg sync_state,wait_state;
wire [`LOBYTE] ccr = {ef,firqim,hf,im,nf,zf,vf,cf};
reg [`LOBYTE] acca,accb;
`ifdef SUPPORT_6309
reg [`LOBYTE] acce,accf;
`endif
reg [`DBLBYTE] accd;
`ifdef SUPPORT_6309
reg [`DBLBYTE] accw;
`endif
reg [`DBLBYTE] xr,yr,usp,ssp;
wire [`DBLBYTE] prod = acca * accb;
reg [`DBLBYTE] vect;
167,6 → 174,24
reg isLEA;
reg isRMW;
 
function fnAddOverflow;
input a;
input b;
input r;
begin
fnAddOverflow = (r ^ b) & (1'b1 ^ a ^ b);
end
endfunction
 
function fnSubOverflow;
input a;
input b;
input r;
begin
fnSubOverflow = (1'b1 ^ r ^ b) & (a ^ b);
end
endfunction
 
// Data input path multiplexing
reg [bitsPerByte-1:0] dati;
always_comb
209,6 → 234,10
(ir[bitsPerByte+5] ? 5'd2 : 5'd0) +
(ir[bitsPerByte+6] ? 5'd2 : 5'd0) +
(ir[bitsPerByte+7] ? (isFar ? 5'd3 : 5'd2) : 5'd0)
`ifdef SUPPORT_6309
+ (ir[bitsPerByte+8] ? 5'd1 : 5'd0) +
+ (ir[bitsPerByte+9] ? 5'd1 : 5'd0)
`endif
;
// cnt = 0;
// if (ir[8]) cnt = cnt + 5'd1; // CC
221,10 → 250,25
// if (ir[bitsPerByte+3]) cnt = cnt + 5'd4; // PC
end
 
`ifdef SUPPORT_6309
wire isInMem = ir12==`AIM_DP || ir12==`EIM_DP || ir12==`OIM_DP || ir12==`TIM_DP ||
ir12==`AIM_NDX || ir12==`EIM_NDX || ir12==`OIM_NDX || ir12==`TIM_NDX ||
ir12==`AIM_EXT || ir12==`EIM_EXT || ir12==`OIM_EXT || ir12==`TIM_EXT
;
wire isRMW1 = ir12==`AIM_DP || ir12==`EIM_DP || ir12==`OIM_DP ||
ir12==`NEG_DP || ir12==`COM_DP || ir12==`LSR_DP || ir12==`ROR_DP || ir12==`ASR_DP || ir12==`ASL_DP || ir12==`ROL_DP || ir12==`DEC_DP || ir12==`INC_DP ||
ir12==`AIM_NDX || ir12==`EIM_NDX || ir12==`OIM_NDX ||
ir12==`NEG_NDX || ir12==`COM_NDX || ir12==`LSR_NDX || ir12==`ROR_NDX || ir12==`ASR_NDX || ir12==`ASL_NDX || ir12==`ROL_NDX || ir12==`DEC_NDX || ir12==`INC_NDX ||
ir12==`AIM_EXT || ir12==`EIM_EXT || ir12==`OIM_EXT ||
ir12==`NEG_EXT || ir12==`COM_EXT || ir12==`LSR_EXT || ir12==`ROR_EXT || ir12==`ASR_EXT || ir12==`ASL_EXT || ir12==`ROL_EXT || ir12==`DEC_EXT || ir12==`INC_EXT
;
`else
wire isInMem = 1'b0;
wire isRMW1 = ir12==`NEG_DP || ir12==`COM_DP || ir12==`LSR_DP || ir12==`ROR_DP || ir12==`ASR_DP || ir12==`ASL_DP || ir12==`ROL_DP || ir12==`DEC_DP || ir12==`INC_DP ||
ir12==`NEG_NDX || ir12==`COM_NDX || ir12==`LSR_NDX || ir12==`ROR_NDX || ir12==`ASR_NDX || ir12==`ASL_NDX || ir12==`ROL_NDX || ir12==`DEC_NDX || ir12==`INC_NDX ||
ir12==`NEG_EXT || ir12==`COM_EXT || ir12==`LSR_EXT || ir12==`ROR_EXT || ir12==`ASR_EXT || ir12==`ASL_EXT || ir12==`ROL_EXT || ir12==`DEC_EXT || ir12==`INC_EXT
;
`endif
 
wire isIndexed =
ir12[7:4]==4'h6 || ir12[7:4]==4'hA || ir12[7:4]==4'hE ||
434,8 → 478,14
4'b1011: src1 <= dpr;
4'b1100: src1 <= usppg;
4'b1101: src1 <= 24'h0000;
`ifdef SUPPORT_6309
4'b0110: src1 <= {acce[`LOBYTE],accf[`LOBYTE]};
4'b1110: src1 <= acce;
4'b1111: src1 <= accf;
`else
4'b1110: src1 <= 24'h0000;
4'b1111: src1 <= 24'h0000;
`endif
default: src1 <= 24'h0000;
endcase
always_comb
452,11 → 502,25
4'b1011: src2 <= dpr;
4'b1100: src2 <= usppg;
4'b1101: src2 <= 24'h0000;
`ifdef SUPPORT_6309
4'b0110: src2 <= {acce[`LOBYTE],accf[`LOBYTE]};
4'b1110: src2 <= acce;
4'b1111: src2 <= accf;
`else
4'b1110: src2 <= 24'h0000;
4'b1111: src2 <= 24'h0000;
`endif
default: src2 <= 24'h0000;
endcase
 
wire [bitsPerByte*2:0] sum12 = src1 + src2;
wire [bitsPerByte*2:0] sum12c = src1 + src2 + cf;
wire [bitsPerByte*2-1:0] and12 = src1 & src2;
wire [bitsPerByte*2-1:0] eor12 = src1 ^ src2;
wire [bitsPerByte*2-1:0] or12 = src1 | src2;
wire [bitsPerByte*2:0] dif12 = src1 - src2;
wire [bitsPerByte*2:0] dif12c = src1 - src2 - cf;
 
wire isAcca = ir12==`NEGA || ir12==`COMA || ir12==`LSRA || ir12==`RORA || ir12==`ASRA || ir12==`ASLA ||
ir12==`ROLA || ir12==`DECA || ir12==`INCA || ir12==`TSTA || ir12==`CLRA ||
ir12==`SUBA_IMM || ir12==`CMPA_IMM || ir12==`SBCA_IMM || ir12==`ANDA_IMM || ir12==`BITA_IMM ||
469,15 → 533,31
ir12==`LDA_EXT || ir12==`EORA_EXT || ir12==`ADCA_EXT || ir12==`ORA_EXT || ir12==`ADDA_EXT
;
 
`ifdef SUPPORT_6309
wire isAcce = ir12 == `ADDE_IMM || ir12==`ADDE_DP || ir12==`ADDE_NDX || ir12==`ADDE_EXT || ir12==`CLRE || ir12==`COME ||
ir12 == `SUBE_IMM || ir12==`SUBE_DP || ir12==`SUBE_NDX || ir12==`SUBE_EXT ||
ir12 == `LDE_IMM || ir12==`LDE_DP || ir12==`LDE_NDX || ir12==`LDE_EXT ||
ir12 == `DECE || ir12==`INCE ||
ir12 == `CMPE_IMM || ir12==`CMPE_DP || ir12==`CMPE_NDX || ir12==`CMPE_EXT
;
wire isAccf = ir12 == `ADDF_IMM || ir12==`ADDF_DP || ir12==`ADDF_NDX || ir12==`ADDF_EXT || ir12==`CLRF || ir12==`COMF ||
ir12 == `SUBF_IMM || ir12==`SUBF_DP || ir12==`SUBF_NDX || ir12==`SUBF_EXT ||
ir12 == `LDF_IMM || ir12==`LDF_DP || ir12==`LDF_NDX || ir12==`LDF_EXT ||
ir12 == `DECF || ir12==`INCF ||
ir12 == `CMPF_IMM || ir12==`CMPF_DP || ir12==`CMPF_NDX || ir12==`CMPF_EXT
;
wire [`DBLBYTE] acc = isAcce ? acce : isAccf ? accf : isAcca ? acca : accb;
`else
wire [`DBLBYTE] acc = isAcca ? acca : accb;
`endif
 
wire [`DBLBYTE] sum12 = src1 + src2;
 
always_ff @(posedge clk_i)
if (state==DECODE) begin
isStore <= ir12==`STA_DP || ir12==`STB_DP || ir12==`STD_DP || ir12==`STX_DP || ir12==`STY_DP || ir12==`STU_DP || ir12==`STS_DP ||
ir12==`STA_NDX || ir12==`STB_NDX || ir12==`STD_NDX || ir12==`STX_NDX || ir12==`STY_NDX || ir12==`STU_NDX || ir12==`STS_NDX ||
ir12==`STA_EXT || ir12==`STB_EXT || ir12==`STD_EXT || ir12==`STX_EXT || ir12==`STY_EXT || ir12==`STU_EXT || ir12==`STS_EXT
ir12==`STA_EXT || ir12==`STB_EXT || ir12==`STD_EXT || ir12==`STX_EXT || ir12==`STY_EXT || ir12==`STU_EXT || ir12==`STS_EXT ||
ir12==`STE_DP || ir12==`STE_NDX || ir12==`STE_EXT || ir12==`STF_DP || ir12==`STF_NDX || ir12==`STF_EXT ||
ir12==`STW_DP || ir12==`STW_NDX || ir12==`STW_EXT
;
isPULU <= ir12==`PULU;
isPULS <= ir12==`PULS;
498,12 → 578,18
(state==DECODE && (
ir12==`NOP || ir12==`ORCC || ir12==`ANDCC || ir12==`DAA || ir12==`LDMD || ir12==`TFR || ir12==`EXG ||
ir12==`NEGA || ir12==`COMA || ir12==`LSRA || ir12==`RORA || ir12==`ASRA || ir12==`ROLA || ir12==`DECA || ir12==`INCA || ir12==`TSTA || ir12==`CLRA ||
ir12==`DECE || ir12==`DECF || ir12==`DECD || ir12==`DECW || ir12==`INCE || ir12==`INCF || ir12==`INCD || ir12==`INCW ||
ir12==`NEGB || ir12==`COMB || ir12==`LSRB || ir12==`RORB || ir12==`ASRB || ir12==`ROLB || ir12==`DECB || ir12==`INCB || ir12==`TSTB || ir12==`CLRB ||
ir12==`ASLD || ir12==`TSTD || //ir12==`ADDR ||
ir12==`COME || ir12==`COMF || ir12==`COMD || ir12==`COMW ||
ir12==`ASLD || ir12==`ASRD || ir12==`TSTD || ir12==`ADDR || ir12==`ADCR || ir12==`ANDR ||
ir12==`TSTE || ir12==`TSTF || ir12==`TSTW ||
ir12==`LSRD || ir12==`LSRW || ir12==`NEGD || ir12==`ROLD || ir12==`ROLW || ir12==`RORD || ir12==`RORW ||
ir12==`SUBA_IMM || ir12==`CMPA_IMM || ir12==`SBCA_IMM || ir12==`ANDA_IMM || ir12==`BITA_IMM || ir12==`LDA_IMM || ir12==`EORA_IMM || ir12==`ADCA_IMM || ir12==`ORA_IMM || ir12==`ADDA_IMM ||
ir12==`SUBB_IMM || ir12==`CMPB_IMM || ir12==`SBCB_IMM || ir12==`ANDB_IMM || ir12==`BITB_IMM || ir12==`LDB_IMM || ir12==`EORB_IMM || ir12==`ADCB_IMM || ir12==`ORB_IMM || ir12==`ADDB_IMM ||
ir12==`ANDD_IMM || ir12==`ADDD_IMM || ir12==`ADCD_IMM || ir12==`SUBD_IMM || ir12==`SBCD_IMM || ir12==`LDD_IMM ||
ir12==`LDQ_IMM || ir12==`CMPD_IMM || ir12==`CMPX_IMM || ir12==`CMPY_IMM || ir12==`CMPU_IMM || ir12==`CMPS_IMM ||
ir12==`EORD_IMM || ir12==`ANDD_IMM || ir12==`ORD_IMM || ir12==`BITD_IMM || ir12==`ADDD_IMM || ir12==`ADCD_IMM || ir12==`SUBD_IMM || ir12==`SBCD_IMM || ir12==`LDD_IMM || ir12==`LDW_IMM ||
ir12==`LDQ_IMM || ir12==`CMPD_IMM || ir12==`CMPX_IMM || ir12==`CMPY_IMM || ir12==`CMPU_IMM || ir12==`CMPS_IMM || ir12==`CMPW_IMM ||
ir12==`LDE_IMM || ir12==`LDF_IMM ||
ir12==`SUBE_IMM || ir12==`SUBF_IMM || ir12==`SUBW_IMM ||
ir12==`BEQ || ir12==`BNE || ir12==`BMI || ir12==`BPL || ir12==`BVS || ir12==`BVC || ir12==`BRA || ir12==`BRN ||
ir12==`BHI || ir12==`BLS || ir12==`BHS || ir12==`BLO ||
ir12==`BGT || ir12==`BGE || ir12==`BLT || ir12==`BLE ||
546,13 → 632,13
;
 
wire lock_bus = load_what==`LW_XH || load_what==`LW_YH || load_what==`LW_USPH || load_what==`LW_SSPH ||
load_what==`LW_PCH || load_what==`LW_BH || load_what==`LW_IAH || load_what==`LW_PC3124 ||
load_what==`LW_IA3124 || load_what==`LW_B3124 ||
load_what==`LW_X3124 || load_what==`LW_Y3124 || load_what==`LW_USP3124 || load_what==`LW_SSP3124 ||
load_what==`LW_PCH || load_what==`LW_BH || load_what==`LW_IAH || load_what==`LW_PC2316 ||
load_what==`LW_IA2316 || load_what==`LW_B2316 ||
load_what==`LW_X2316 || load_what==`LW_Y2316 || load_what==`LW_USP2316 || load_what==`LW_SSP2316 ||
isRMW ||
store_what==`SW_ACCDH || store_what==`SW_XH || store_what==`SW_YH || store_what==`SW_USPH || store_what==`SW_SSPH ||
store_what==`SW_PCH || store_what==`SW_PC3124 || store_what==`SW_ACCQ3124 ||
store_what==`SW_X3124 || store_what==`SW_Y3124 || store_what==`SW_USP3124 || store_what==`SW_SSP3124
store_what==`SW_PCH || store_what==`SW_PC2316 || store_what==`SW_ACCQ2316 ||
store_what==`SW_X2316 || store_what==`SW_Y2316 || store_what==`SW_USP2316 || store_what==`SW_SSP2316
;
 
wire isPrefix = ir12==`PG2 || ir12==`PG3 || ir12==`OUTER;
592,6 → 678,17
.hit1(hit1)
);
 
/* Need to account for signed division
reg [35:0] divtbl [0:4095];
genvar g;
generate begin: gDivtbl
for (g = 0; g < 4096; g = g + 1)
divtbl[g] = 36'h800000000 / g;
endgenerate
wire [`DBLBYTE] divres = ({acca,accb} * divtbl[b12]) >> 36;
wire [11:0] divrem = {acca,accb} - divres * b12;
*/
 
// For asynchronous reads,
// The read response might come back in any order (the packets could loop
// around in the network.
691,7 → 788,7
else if (state==DECODE && ir12==`INT)
nmi_edge <= 1'b0;
 
reg [9:0] rst_cnt;
reg [11:0] rst_cnt;
 
always @(posedge clk_i)
if (rst_i) begin
767,6 → 864,7
LOAD2: tLoad2();
CALC: tExecute();
STORE1: tStore1();
STORE1a: tStore1a();
STORE2: tStore2();
 
// ============================================================================
798,6 → 896,16
store_what <= `SW_ACCB;
ir[bitsPerByte+2] <= 1'b0;
end
`ifdef SUPPORT_6309
else if (ir[bitsPerByte+8]) begin
store_what <= `SW_ACCE;
ir[bitsPerByte+8] <= 1'b0;
end
else if (ir[bitsPerByte+9]) begin
store_what <= `SW_ACCF;
ir[bitsPerByte+9] <= 1'b0;
end
`endif
else if (ir[bitsPerByte+3]) begin
store_what <= `SW_DPR;
ir[bitsPerByte+3] <= 1'b0;
854,6 → 962,16
load_what <= `LW_ACCB;
ir[bitsPerByte+2] <= 1'b0;
end
`ifdef SUPPORT_6309
else if (ir[bitsPerByte+8]) begin
load_what <= `LW_ACCE;
ir[bitsPerByte+8] <= 1'b0;
end
else if (ir[bitsPerByte+9]) begin
load_what <= `LW_ACCF;
ir[bitsPerByte+9] <= 1'b0;
end
`endif
else if (ir[bitsPerByte+3]) begin
load_what <= `LW_DPR;
ir[bitsPerByte+3] <= 1'b0;
1420,7 → 1538,238
`INCA,`INCB: begin res12 <= acc[`LOBYTE] + 2'd1; end
`TSTA,`TSTB: begin res12 <= acc[`LOBYTE]; end
`CLRA,`CLRB: begin res12 <= 13'h000; end
 
`ifdef SUPPORT_6309
`TSTD: res <= {acca,accb};
`TSTW: res <= {acce,accf};
`TSTE: res12 <= acce;
`TSTF: res12 <= accf;
`NEGD: begin res <= -{acca,accb}; a <= 'd0; b <= {acca,accb}; end
`INCE,`INCF: begin res12 <= acc[`LOBYTE] + 2'd1; end
`INCD: res <= {acca,accb} + 2'd1;
`INCW: res <= {acce,accf} + 2'd1;
`DECE,`DECF: begin res12 <= acc[`LOBYTE] - 2'd1; end
`DECD: res <= {acca,accb} - 2'd1;
`DECW: res <= {acce,accf} - 2'd1;
`COMD: res <= ~{acca,accb};
`COME,`COMF: res <= ~acc[`LOBYTE];
`COMW: res <= ~{acce,accf};
`CLRD: res <= 'b0;
`CLRW: res <= 'b0;
`CLRE: res12 <= 'b0;
`CLRF: res12 <= 'b0;
`ASLD:
res <= {acca,accb,1'b0};
`ASRD:
res <= {accb[0],acca[bitsPerByte-1],acca,accb[bitsPerByte-1:1]};
`LSRD:
res <= {accb[0],acca,accb[bitsPerByte-1:1]};
`LSRW:
res <= {accf[0],accw,accf[bitsPerByte-1:1]};
`ROLD:
res <= {acca,accb,cf};
`ROLW:
res <= {acce,accf,cf};
`RORD:
res <= {accb[0],cf,acca,accb[bitsPerByte-1:1]};
`RORW:
res <= {accf[0],cf,acce,accf[bitsPerByte-1:1]};
`ADDR:
begin
case(ir[bitsPerByte+3:bitsPerByte])
4'b0000: begin {acca,accb} <= sum12; nf <= sum12[bitsPerByte*2-1]; zf <= sum12[`DBLBYTE]=='b0; cf <= sum12[bitsPerByte*2]; vf <= fnAddOverflow(src1[bitsPerByte*2-1],src2[bitsPerByte*2-1],sum12[bitsPerByte*2-1]); end
4'b0001: begin xr <= sum12; nf <= sum12[bitsPerByte*2-1]; zf <= sum12[`DBLBYTE]=='b0; cf <= sum12[bitsPerByte*2]; vf <= fnAddOverflow(src1[bitsPerByte*2-1],src2[bitsPerByte*2-1],sum12[bitsPerByte*2-1]); end
4'b0010: begin yr <= sum12; nf <= sum12[bitsPerByte*2-1]; zf <= sum12[`DBLBYTE]=='b0; cf <= sum12[bitsPerByte*2]; vf <= fnAddOverflow(src1[bitsPerByte*2-1],src2[bitsPerByte*2-1],sum12[bitsPerByte*2-1]); end
4'b0011: begin usp <= sum12; nf <= sum12[bitsPerByte*2-1]; zf <= sum12[`DBLBYTE]=='b0; cf <= sum12[bitsPerByte*2]; vf <= fnAddOverflow(src1[bitsPerByte*2-1],src2[bitsPerByte*2-1],sum12[bitsPerByte*2-1]); end
4'b0100: begin ssp <= sum12; nf <= sum12[bitsPerByte*2-1]; zf <= sum12[`DBLBYTE]=='b0; cf <= sum12[bitsPerByte*2]; vf <= fnAddOverflow(src1[bitsPerByte*2-1],src2[bitsPerByte*2-1],sum12[bitsPerByte*2-1]); end
4'b0101: begin pc <= sum12; nf <= sum12[bitsPerByte*2-1]; zf <= sum12[`DBLBYTE]=='b0; cf <= sum12[bitsPerByte*2]; vf <= fnAddOverflow(src1[bitsPerByte*2-1],src2[bitsPerByte*2-1],sum12[bitsPerByte*2-1]); end
4'b1000: begin acca <= sum12; nf <= sum12[bitsPerByte-1]; zf <= sum12[`LOBYTE]=='b0; cf <= sum12[bitsPerByte]; vf <= fnAddOverflow(src1[bitsPerByte-1],src2[bitsPerByte-1],sum12[bitsPerByte-1]); end
4'b1001: begin accb <= sum12; nf <= sum12[bitsPerByte-1]; zf <= sum12[`LOBYTE]=='b0; cf <= sum12[bitsPerByte]; vf <= fnAddOverflow(src1[bitsPerByte-1],src2[bitsPerByte-1],sum12[bitsPerByte-1]); end
4'b1010:
begin
cf <= sum12[0];
vf <= sum12[1];
zf <= sum12[2];
nf <= sum12[3];
im <= sum12[4];
hf <= sum12[5];
firqim <= sum12[6];
ef <= sum12[7];
end
4'b1011: begin dpr <= sum12; nf <= sum12[bitsPerByte-1]; zf <= sum12[`LOBYTE]=='b0; cf <= sum12[bitsPerByte]; vf <= fnAddOverflow(src1[bitsPerByte-1],src2[bitsPerByte-1],sum12[bitsPerByte-1]); end
endcase
end
`ADCR:
begin
case(ir[bitsPerByte+3:bitsPerByte])
4'b0000: begin {acca,accb} <= sum12c; nf <= sum12c[bitsPerByte*2-1]; zf <= sum12c[`DBLBYTE]=='b0; cf <= sum12c[bitsPerByte*2]; vf <= fnAddOverflow(src1[bitsPerByte*2-1],src2[bitsPerByte*2-1],sum12c[bitsPerByte*2-1]); end
4'b0001: begin xr <= sum12c; nf <= sum12c[bitsPerByte*2-1]; zf <= sum12c[`DBLBYTE]=='b0; cf <= sum12c[bitsPerByte*2]; vf <= fnAddOverflow(src1[bitsPerByte*2-1],src2[bitsPerByte*2-1],sum12c[bitsPerByte*2-1]); end
4'b0010: begin yr <= sum12c; nf <= sum12c[bitsPerByte*2-1]; zf <= sum12c[`DBLBYTE]=='b0; cf <= sum12c[bitsPerByte*2]; vf <= fnAddOverflow(src1[bitsPerByte*2-1],src2[bitsPerByte*2-1],sum12c[bitsPerByte*2-1]); end
4'b0011: begin usp <= sum12c; nf <= sum12c[bitsPerByte*2-1]; zf <= sum12c[`DBLBYTE]=='b0; cf <= sum12c[bitsPerByte*2]; vf <= fnAddOverflow(src1[bitsPerByte*2-1],src2[bitsPerByte*2-1],sum12c[bitsPerByte*2-1]); end
4'b0100: begin ssp <= sum12c; nf <= sum12c[bitsPerByte*2-1]; zf <= sum12c[`DBLBYTE]=='b0; cf <= sum12c[bitsPerByte*2]; vf <= fnAddOverflow(src1[bitsPerByte*2-1],src2[bitsPerByte*2-1],sum12c[bitsPerByte*2-1]); end
4'b0101: begin pc <= sum12c; nf <= sum12c[bitsPerByte*2-1]; zf <= sum12c[`DBLBYTE]=='b0; cf <= sum12c[bitsPerByte*2]; vf <= fnAddOverflow(src1[bitsPerByte*2-1],src2[bitsPerByte*2-1],sum12c[bitsPerByte*2-1]); end
4'b1000: begin acca <= sum12c; nf <= sum12c[bitsPerByte-1]; zf <= sum12c[`LOBYTE]=='b0; cf <= sum12c[bitsPerByte]; vf <= fnAddOverflow(src1[bitsPerByte-1],src2[bitsPerByte-1],sum12c[bitsPerByte-1]); end
4'b1001: begin accb <= sum12c; nf <= sum12c[bitsPerByte-1]; zf <= sum12c[`LOBYTE]=='b0; cf <= sum12c[bitsPerByte]; vf <= fnAddOverflow(src1[bitsPerByte-1],src2[bitsPerByte-1],sum12c[bitsPerByte-1]); end
4'b1010:
begin
cf <= sum12c[0];
vf <= sum12c[1];
zf <= sum12c[2];
nf <= sum12c[3];
im <= sum12c[4];
hf <= sum12c[5];
firqim <= sum12c[6];
ef <= sum12c[7];
end
4'b1011: begin dpr <= sum12c; nf <= sum12c[bitsPerByte-1]; zf <= sum12c[`LOBYTE]=='b0; cf <= sum12c[bitsPerByte]; vf <= fnAddOverflow(src1[bitsPerByte-1],src2[bitsPerByte-1],sum12c[bitsPerByte-1]); end
endcase
end
`ANDR:
begin
case(ir[bitsPerByte+3:bitsPerByte])
4'b0000: begin {acca,accb} <= and12; nf <= and12[bitsPerByte*2-1]; zf <= and12[`DBLBYTE]=='b0; vf <= 1'b0; end
4'b0001: begin xr <= and12; nf <= and12[bitsPerByte*2-1]; zf <= and12[`DBLBYTE]=='b0; vf <= 1'b0; end
4'b0010: begin yr <= and12; nf <= and12[bitsPerByte*2-1]; zf <= and12[`DBLBYTE]=='b0; vf <= 1'b0; end
4'b0011: begin usp <= and12; nf <= and12[bitsPerByte*2-1]; zf <= and12[`DBLBYTE]=='b0; vf <= 1'b0; end
4'b0100: begin ssp <= and12; nf <= and12[bitsPerByte*2-1]; zf <= and12[`DBLBYTE]=='b0; vf <= 1'b0; end
4'b0101: begin pc <= and12; nf <= and12[bitsPerByte*2-1]; zf <= and12[`DBLBYTE]=='b0; vf <= 1'b0; end
4'b1000: begin acca <= and12; nf <= and12[bitsPerByte-1]; zf <= and12[`LOBYTE]=='b0; vf <= 1'b0; end
4'b1001: begin accb <= and12; nf <= and12[bitsPerByte-1]; zf <= and12[`LOBYTE]=='b0; vf <= 1'b0; end
4'b1010:
begin
cf <= and12[0];
vf <= and12[1];
zf <= and12[2];
nf <= and12[3];
im <= and12[4];
hf <= and12[5];
firqim <= and12[6];
ef <= and12[7];
end
4'b1011: begin dpr <= and12; nf <= and12[bitsPerByte-1]; zf <= and12[`LOBYTE]=='b0; vf <= 1'b0; end
endcase
end
`EORR:
begin
case(ir[bitsPerByte+3:bitsPerByte])
4'b0000: begin {acca,accb} <= eor12; nf <= eor12[bitsPerByte*2-1]; zf <= eor12[`DBLBYTE]=='b0; vf <= 1'b0; end
4'b0001: begin xr <= eor12; nf <= eor12[bitsPerByte*2-1]; zf <= eor12[`DBLBYTE]=='b0; vf <= 1'b0; end
4'b0010: begin yr <= eor12; nf <= eor12[bitsPerByte*2-1]; zf <= eor12[`DBLBYTE]=='b0; vf <= 1'b0; end
4'b0011: begin usp <= eor12; nf <= eor12[bitsPerByte*2-1]; zf <= eor12[`DBLBYTE]=='b0; vf <= 1'b0; end
4'b0100: begin ssp <= eor12; nf <= eor12[bitsPerByte*2-1]; zf <= eor12[`DBLBYTE]=='b0; vf <= 1'b0; end
4'b0101: begin pc <= eor12; nf <= eor12[bitsPerByte*2-1]; zf <= eor12[`DBLBYTE]=='b0; vf <= 1'b0; end
4'b1000: begin acca <= eor12; nf <= eor12[bitsPerByte-1]; zf <= eor12[`LOBYTE]=='b0; vf <= 1'b0; end
4'b1001: begin accb <= eor12; nf <= eor12[bitsPerByte-1]; zf <= eor12[`LOBYTE]=='b0; vf <= 1'b0; end
4'b1010:
begin
cf <= eor12[0];
vf <= eor12[1];
zf <= eor12[2];
nf <= eor12[3];
im <= eor12[4];
hf <= eor12[5];
firqim <= eor12[6];
ef <= eor12[7];
end
4'b1011: begin dpr <= eor12; nf <= eor12[bitsPerByte-1]; zf <= eor12[`LOBYTE]=='b0; vf <= 1'b0; end
endcase
end
`ORR:
begin
case(ir[bitsPerByte+3:bitsPerByte])
4'b0000: begin {acca,accb} <= or12; nf <= or12[bitsPerByte*2-1]; zf <= or12[`DBLBYTE]=='b0; vf <= 1'b0; end
4'b0001: begin xr <= or12; nf <= or12[bitsPerByte*2-1]; zf <= or12[`DBLBYTE]=='b0; vf <= 1'b0; end
4'b0010: begin yr <= or12; nf <= or12[bitsPerByte*2-1]; zf <= or12[`DBLBYTE]=='b0; vf <= 1'b0; end
4'b0011: begin usp <= or12; nf <= or12[bitsPerByte*2-1]; zf <= or12[`DBLBYTE]=='b0; vf <= 1'b0; end
4'b0100: begin ssp <= or12; nf <= or12[bitsPerByte*2-1]; zf <= or12[`DBLBYTE]=='b0; vf <= 1'b0; end
4'b0101: begin pc <= or12; nf <= or12[bitsPerByte*2-1]; zf <= or12[`DBLBYTE]=='b0; vf <= 1'b0; end
4'b1000: begin acca <= or12; nf <= or12[bitsPerByte-1]; zf <= or12[`LOBYTE]=='b0; vf <= 1'b0; end
4'b1001: begin accb <= or12; nf <= or12[bitsPerByte-1]; zf <= or12[`LOBYTE]=='b0; vf <= 1'b0; end
4'b1010:
begin
cf <= or12[0];
vf <= or12[1];
zf <= or12[2];
nf <= or12[3];
im <= or12[4];
hf <= or12[5];
firqim <= or12[6];
ef <= or12[7];
end
4'b1011: begin dpr <= or12; nf <= or12[bitsPerByte-1]; zf <= or12[`LOBYTE]=='b0; vf <= 1'b0; end
endcase
end
`CMPR:
begin
case(ir[bitsPerByte+3:bitsPerByte])
4'b0000: begin nf <= dif12[bitsPerByte*2-1]; zf <= dif12[`DBLBYTE]=='b0; cf <= dif12[bitsPerByte*2]; vf <= fnSubOverflow(src1[bitsPerByte*2-1],src2[bitsPerByte*2-1],dif12[bitsPerByte*2-1]); end
4'b0001: begin nf <= dif12[bitsPerByte*2-1]; zf <= dif12[`DBLBYTE]=='b0; cf <= dif12[bitsPerByte*2]; vf <= fnSubOverflow(src1[bitsPerByte*2-1],src2[bitsPerByte*2-1],dif12[bitsPerByte*2-1]); end
4'b0010: begin nf <= dif12[bitsPerByte*2-1]; zf <= dif12[`DBLBYTE]=='b0; cf <= dif12[bitsPerByte*2]; vf <= fnSubOverflow(src1[bitsPerByte*2-1],src2[bitsPerByte*2-1],dif12[bitsPerByte*2-1]); end
4'b0011: begin nf <= dif12[bitsPerByte*2-1]; zf <= dif12[`DBLBYTE]=='b0; cf <= dif12[bitsPerByte*2]; vf <= fnSubOverflow(src1[bitsPerByte*2-1],src2[bitsPerByte*2-1],dif12[bitsPerByte*2-1]); end
4'b0100: begin nf <= dif12[bitsPerByte*2-1]; zf <= dif12[`DBLBYTE]=='b0; cf <= dif12[bitsPerByte*2]; vf <= fnSubOverflow(src1[bitsPerByte*2-1],src2[bitsPerByte*2-1],dif12[bitsPerByte*2-1]); end
4'b0101: begin nf <= dif12[bitsPerByte*2-1]; zf <= dif12[`DBLBYTE]=='b0; cf <= dif12[bitsPerByte*2]; vf <= fnSubOverflow(src1[bitsPerByte*2-1],src2[bitsPerByte*2-1],dif12[bitsPerByte*2-1]); end
4'b1000: begin nf <= dif12[bitsPerByte-1]; zf <= dif12[`LOBYTE]=='b0; cf <= dif12[bitsPerByte]; vf <= fnSubOverflow(src1[bitsPerByte-1],src2[bitsPerByte-1],dif12[bitsPerByte-1]); end
4'b1001: begin nf <= dif12[bitsPerByte-1]; zf <= dif12[`LOBYTE]=='b0; cf <= dif12[bitsPerByte]; vf <= fnSubOverflow(src1[bitsPerByte-1],src2[bitsPerByte-1],dif12[bitsPerByte-1]); end
4'b1010: ;
4'b1011: begin nf <= dif12[bitsPerByte-1]; zf <= dif12[`LOBYTE]=='b0; cf <= dif12[bitsPerByte]; vf <= fnSubOverflow(src1[bitsPerByte-1],src2[bitsPerByte-1],dif12[bitsPerByte-1]); end
endcase
end
`SBCR:
begin
case(ir[bitsPerByte+3:bitsPerByte])
4'b0000: begin {acca,accb} <= dif12c; nf <= dif12c[bitsPerByte*2-1]; zf <= dif12c[`DBLBYTE]=='b0; cf <= dif12c[bitsPerByte*2]; vf <= fnSubOverflow(src1[bitsPerByte*2-1],src2[bitsPerByte*2-1],dif12c[bitsPerByte*2-1]); end
4'b0001: begin xr <= dif12c; nf <= dif12c[bitsPerByte*2-1]; zf <= dif12c[`DBLBYTE]=='b0; cf <= dif12c[bitsPerByte*2]; vf <= fnSubOverflow(src1[bitsPerByte*2-1],src2[bitsPerByte*2-1],dif12c[bitsPerByte*2-1]); end
4'b0010: begin yr <= dif12c; nf <= dif12c[bitsPerByte*2-1]; zf <= dif12c[`DBLBYTE]=='b0; cf <= dif12c[bitsPerByte*2]; vf <= fnSubOverflow(src1[bitsPerByte*2-1],src2[bitsPerByte*2-1],dif12c[bitsPerByte*2-1]); end
4'b0011: begin usp <= dif12c; nf <= dif12c[bitsPerByte*2-1]; zf <= dif12c[`DBLBYTE]=='b0; cf <= dif12c[bitsPerByte*2]; vf <= fnSubOverflow(src1[bitsPerByte*2-1],src2[bitsPerByte*2-1],dif12c[bitsPerByte*2-1]); end
4'b0100: begin ssp <= dif12c; nf <= dif12c[bitsPerByte*2-1]; zf <= dif12c[`DBLBYTE]=='b0; cf <= dif12c[bitsPerByte*2]; vf <= fnSubOverflow(src1[bitsPerByte*2-1],src2[bitsPerByte*2-1],dif12c[bitsPerByte*2-1]); end
4'b0101: begin pc <= dif12c; nf <= dif12c[bitsPerByte*2-1]; zf <= dif12c[`DBLBYTE]=='b0; cf <= dif12c[bitsPerByte*2]; vf <= fnSubOverflow(src1[bitsPerByte*2-1],src2[bitsPerByte*2-1],dif12c[bitsPerByte*2-1]); end
4'b1000: begin acca <= dif12c; nf <= dif12c[bitsPerByte-1]; zf <= dif12c[`LOBYTE]=='b0; cf <= dif12c[bitsPerByte]; vf <= fnSubOverflow(src1[bitsPerByte-1],src2[bitsPerByte-1],dif12c[bitsPerByte-1]); end
4'b1001: begin accb <= dif12c; nf <= dif12c[bitsPerByte-1]; zf <= dif12c[`LOBYTE]=='b0; cf <= dif12c[bitsPerByte]; vf <= fnSubOverflow(src1[bitsPerByte-1],src2[bitsPerByte-1],dif12c[bitsPerByte-1]); end
4'b1010:
begin
cf <= dif12c[0];
vf <= dif12c[1];
zf <= dif12c[2];
nf <= dif12c[3];
im <= dif12c[4];
hf <= dif12c[5];
firqim <= dif12c[6];
ef <= dif12c[7];
end
4'b1011: begin dpr <= dif12c; nf <= dif12c[bitsPerByte-1]; zf <= dif12c[`LOBYTE]=='b0; cf <= dif12c[bitsPerByte]; vf <= fnSubOverflow(src1[bitsPerByte-1],src2[bitsPerByte-1],dif12c[bitsPerByte-1]); end
endcase
end
`SUBR:
begin
case(ir[bitsPerByte+3:bitsPerByte])
4'b0000: begin {acca,accb} <= dif12; nf <= dif12[bitsPerByte*2-1]; zf <= dif12[`DBLBYTE]=='b0; cf <= dif12[bitsPerByte*2]; vf <= fnSubOverflow(src1[bitsPerByte*2-1],src2[bitsPerByte*2-1],dif12[bitsPerByte*2-1]); end
4'b0001: begin xr <= dif12; nf <= dif12[bitsPerByte*2-1]; zf <= dif12[`DBLBYTE]=='b0; cf <= dif12[bitsPerByte*2]; vf <= fnSubOverflow(src1[bitsPerByte*2-1],src2[bitsPerByte*2-1],dif12[bitsPerByte*2-1]); end
4'b0010: begin yr <= dif12; nf <= dif12[bitsPerByte*2-1]; zf <= dif12[`DBLBYTE]=='b0; cf <= dif12[bitsPerByte*2]; vf <= fnSubOverflow(src1[bitsPerByte*2-1],src2[bitsPerByte*2-1],dif12[bitsPerByte*2-1]); end
4'b0011: begin usp <= dif12; nf <= dif12[bitsPerByte*2-1]; zf <= dif12[`DBLBYTE]=='b0; cf <= dif12[bitsPerByte*2]; vf <= fnSubOverflow(src1[bitsPerByte*2-1],src2[bitsPerByte*2-1],dif12[bitsPerByte*2-1]); end
4'b0100: begin ssp <= dif12; nf <= dif12[bitsPerByte*2-1]; zf <= dif12[`DBLBYTE]=='b0; cf <= dif12[bitsPerByte*2]; vf <= fnSubOverflow(src1[bitsPerByte*2-1],src2[bitsPerByte*2-1],dif12[bitsPerByte*2-1]); end
4'b0101: begin pc <= dif12; nf <= dif12[bitsPerByte*2-1]; zf <= dif12[`DBLBYTE]=='b0; cf <= dif12[bitsPerByte*2]; vf <= fnSubOverflow(src1[bitsPerByte*2-1],src2[bitsPerByte*2-1],dif12[bitsPerByte*2-1]); end
4'b1000: begin acca <= dif12; nf <= dif12[bitsPerByte-1]; zf <= dif12[`LOBYTE]=='b0; cf <= dif12[bitsPerByte]; vf <= fnSubOverflow(src1[bitsPerByte-1],src2[bitsPerByte-1],dif12[bitsPerByte-1]); end
4'b1001: begin accb <= dif12; nf <= dif12[bitsPerByte-1]; zf <= dif12[`LOBYTE]=='b0; cf <= dif12[bitsPerByte]; vf <= fnSubOverflow(src1[bitsPerByte-1],src2[bitsPerByte-1],dif12[bitsPerByte-1]); end
4'b1010:
begin
cf <= dif12[0];
vf <= dif12[1];
zf <= dif12[2];
nf <= dif12[3];
im <= dif12[4];
hf <= dif12[5];
firqim <= dif12[6];
ef <= dif12[7];
end
4'b1011: begin dpr <= dif12; nf <= dif12[bitsPerByte-1]; zf <= dif12[`LOBYTE]=='b0; cf <= dif12[bitsPerByte]; vf <= fnSubOverflow(src1[bitsPerByte-1],src2[bitsPerByte-1],dif12[bitsPerByte-1]); end
endcase
end
`endif
`ifdef SUPPORT_6309
`CMPE_IMM,`CMPF_IMM,`SUBE_IMM,`SUBF_IMM:
begin res12 <= acc[`LOBYTE] - ir[`HIBYTE]; pc <= pc + 4'd2; a <= acc[`LOBYTE]; b <= ir[`HIBYTE]; end
`LDE_IMM,`LDF_IMM:
begin res12 <= ir[`HIBYTE]; pc <= pc + 2'd2; end
`endif
// Immediate mode instructions
`SUBA_IMM,`SUBB_IMM,`CMPA_IMM,`CMPB_IMM:
begin res12 <= acc[`LOBYTE] - ir[`HIBYTE]; pc <= pc + 4'd2; a <= acc[`LOBYTE]; b <= ir[`HIBYTE]; end
1438,16 → 1787,63
begin res12 <= acc[`LOBYTE] | ir[`HIBYTE]; pc <= pc + 2'd2; a <= acc[`LOBYTE]; b <= ir[`HIBYTE]; end
`ADDA_IMM,`ADDB_IMM:
begin res12 <= acc[`LOBYTE] + ir[`HIBYTE]; pc <= pc + 2'd2; a <= acc[`LOBYTE]; b <= ir[`HIBYTE]; end
`ifdef SUPPORT_6309
`BITD_IMM,
`ANDD_IMM:
begin
res <= {acca[`LOBYTE],accb[`LOBYTE]} & {ir[`BYTE2],ir[`BYTE3]};
pc <= pc + 32'd3;
end
`EORD_IMM:
begin
res <= {acca[`LOBYTE],accb[`LOBYTE]} ^ {ir[`BYTE2],ir[`BYTE3]};
pc <= pc + 32'd3;
end
`ORD_IMM:
begin
res <= {acca[`LOBYTE],accb[`LOBYTE]} | {ir[`BYTE2],ir[`BYTE3]};
pc <= pc + 32'd3;
end
`endif
`ADDD_IMM:
begin
res <= {acca[`LOBYTE],accb[`LOBYTE]} + {ir[`HIBYTE],ir[`BYTE3]};
pc <= pc + 2'd3;
end
`ifdef SUPPORT_6309
`ADDW_IMM:
begin
res <= {acce[`LOBYTE],accf[`LOBYTE]} + {ir[`HIBYTE],ir[`BYTE3]};
pc <= pc + 2'd3;
end
`ADCD_IMM:
begin
res <= {acca[`LOBYTE],accb[`LOBYTE]} + {ir[`BYTE2],ir[`BYTE3]} + {23'b0,cf};
pc <= pc + 32'd3;
end
`endif
`SUBD_IMM:
begin
res <= {acca[`LOBYTE],accb[`LOBYTE]} + {ir[`HIBYTE],ir[`BYTE3]};
res <= {acca[`LOBYTE],accb[`LOBYTE]} - {ir[`HIBYTE],ir[`BYTE3]};
pc <= pc + 2'd3;
end
`SUBD_IMM:
`ifdef SUPPORT_6309
`SUBW_IMM:
begin
res <= {acca[`LOBYTE],accb[`LOBYTE]} - {ir[`HIBYTE],ir[`BYTE3]};
res <= {acce[`LOBYTE],accf[`LOBYTE]} - {ir[`HIBYTE],ir[`BYTE3]};
pc <= pc + 2'd3;
end
`SBCD_IMM:
begin
res <= {acca[`LOBYTE],accb[`LOBYTE]} - {ir[`BYTE2],ir[`BYTE3]} - {23'b0,cf};
pc <= pc + 32'd3;
end
`LDW_IMM:
begin
res <= {ir[`HIBYTE],ir[`BYTE3]};
pc <= pc + 2'd3;
end
`endif
`LDD_IMM:
begin
res <= {ir[`HIBYTE],ir[`BYTE3]};
1466,6 → 1862,15
a <= {acca[`LOBYTE],accb[`LOBYTE]};
b <= {ir[`HIBYTE],ir[`BYTE3]};
end
`ifdef SUPPORT_6309
`CMPW_IMM:
begin
res <= {acce[`LOBYTE],accf[`LOBYTE]} - {ir[`HIBYTE],ir[`BYTE3]};
pc <= pc + 2'd3;
a <= {acce[`LOBYTE],accf[`LOBYTE]};
b <= {ir[`HIBYTE],ir[`BYTE3]};
end
`endif
`CMPX_IMM:
begin
res <= xr[`DBLBYTE] - {ir[`HIBYTE],ir[`BYTE3]};
1503,6 → 1908,11
pc <= pc + 2'd2;
next_state(LOAD1);
end
`ifdef SUPPORT_6309
`CMPE_DP,`CMPF_DP,
`LDE_DP,`LDF_DP,
`SUBE_DP,`SUBF_DP,
`endif
`SUBA_DP,`CMPA_DP,`SBCA_DP,`ANDA_DP,`BITA_DP,`LDA_DP,`EORA_DP,`ADCA_DP,`ORA_DP,`ADDA_DP,
`SUBB_DP,`CMPB_DP,`SBCB_DP,`ANDB_DP,`BITB_DP,`LDB_DP,`EORB_DP,`ADCB_DP,`ORB_DP,`ADDB_DP:
begin
1511,6 → 1921,21
pc <= pc + 2'd2;
next_state(LOAD1);
end
`ifdef SUPPORT_6309
`BITD_DP,
`ANDD_DP,
`ORD_DP,
`EORD_DP:
begin
load_what <= `LW_BL;
radr <= dp_address;
pc <= pc + 2'd2;
next_state(LOAD1);
end
`endif
`ifdef SUPPORT_6309
`ADDW_DP,`CMPW_DP,`LDW_DP,`SUBW_DP,
`endif
`SUBD_DP,`ADDD_DP,`LDD_DP,`CMPD_DP,`ADCD_DP,`SBCD_DP:
begin
load_what <= `LW_BH;
1538,6 → 1963,11
`STS_DP: dp_store(`SW_SSPH);
`STX_DP: dp_store(`SW_XH);
`STY_DP: dp_store(`SW_YH);
`ifdef SUPPORT_6309
`STW_DP: dp_store(`SW_ACCWH);
`STE_DP: dp_store(`SW_ACCE);
`STF_DP: dp_store(`SW_ACCF);
`endif
// Indexed mode instructions
`NEG_NDX,`COM_NDX,`LSR_NDX,`ROR_NDX,`ASR_NDX,`ASL_NDX,`ROL_NDX,`DEC_NDX,`INC_NDX,`TST_NDX:
begin
1555,6 → 1985,11
next_state(LOAD1);
end
end
`ifdef SUPPORT_6309
`CMPE_NDX,`CMPF_NDX,
`LDE_NDX,`LDF_NDX,
`SUBE_NDX,`SUBF_NDX,
`endif
`SUBA_NDX,`CMPA_NDX,`SBCA_NDX,`ANDA_NDX,`BITA_NDX,`LDA_NDX,`EORA_NDX,`ADCA_NDX,`ORA_NDX,`ADDA_NDX,
`SUBB_NDX,`CMPB_NDX,`SBCB_NDX,`ANDB_NDX,`BITB_NDX,`LDB_NDX,`EORB_NDX,`ADCB_NDX,`ORB_NDX,`ADDB_NDX:
begin
1572,6 → 2007,30
next_state(LOAD1);
end
end
`ifdef SUPPORT_6309
`BITD_NDX,
`ANDD_NDX,
`ORD_NDX,
`EORD_NDX:
begin
pc <= pc + insnsz;
if (isIndirect) begin
load_what <= isFar ? `LW_IA2316 : `LW_IAH;
load_what2 <= `LW_BL;
radr <= NdxAddr;
next_state(LOAD1);
end
else begin
b <= 24'd0;
load_what <= `LW_BL;
radr <= NdxAddr;
next_state(LOAD1);
end
end
`endif
`ifdef SUPPORT_6309
`ADDW_NDX,`CMPW_NDX,`LDW_NDX,`SUBW_NDX,
`endif
`SUBD_NDX,`ADDD_NDX,`LDD_NDX,`CMPD_NDX,`ADCD_NDX,`SBCD_NDX:
begin
pc <= pc + insnsz;
1615,7 → 2074,37
`STS_NDX: indexed_store(`SW_SSPH);
`STX_NDX: indexed_store(`SW_XH);
`STY_NDX: indexed_store(`SW_YH);
 
`ifdef SUPPORT_6309
`STW_NDX: indexed_store(`SW_ACCWH);
`STE_NDX: indexed_store(`SW_ACCE);
`STF_NDX: indexed_store(`SW_ACCF);
`AIM_DP,`EIM_DP,`OIM_DP,`TIM_DP:
begin
load_what <= `LW_BL;
pc <= pc + 4'd3;
radr <= dp_address;
next_state(LOAD1);
end
`AIM_NDX,`EIM_NDX,`OIM_NDX,`TIM_NDX:
begin
pc <= pc + insnsz + 4'd1;
if (isIndirect) begin
load_what <= isFar ? `LW_IA2316 : `LW_IAH;
load_what2 <= `LW_BL;
radr <= NdxAddr;
next_state(LOAD1);
end
else begin
b <= 'd0;
load_what <= `LW_BL;
radr <= NdxAddr;
next_state(LOAD1);
end
end
`endif
`ifdef SUPPORT_6309
`AIM_EXT,`OIM_EXT,`EIM_EXT,`TIM_EXT,
`endif
// Extended mode instructions
`NEG_EXT,`COM_EXT,`LSR_EXT,`ROR_EXT,`ASR_EXT,`ASL_EXT,`ROL_EXT,`DEC_EXT,`INC_EXT,`TST_EXT:
begin
1624,6 → 2113,11
pc <= pc + (isFar ? 32'd4 : 32'd3);
next_state(LOAD1);
end
`ifdef SUPPORT_6309
`CMPE_EXT,`CMPF_EXT,
`LDE_EXT,`LDF_EXT,
`SUBE_EXT,`SUBF_EXT,
`endif
`SUBA_EXT,`CMPA_EXT,`SBCA_EXT,`ANDA_EXT,`BITA_EXT,`LDA_EXT,`EORA_EXT,`ADCA_EXT,`ORA_EXT,`ADDA_EXT,
`SUBB_EXT,`CMPB_EXT,`SBCB_EXT,`ANDB_EXT,`BITB_EXT,`LDB_EXT,`EORB_EXT,`ADCB_EXT,`ORB_EXT,`ADDB_EXT:
begin
1632,6 → 2126,21
pc <= pc + (isFar ? 32'd4 : 32'd3);
next_state(LOAD1);
end
`ifdef SUPPORT_6309
`BITD_EXT,
`ANDD_EXT,
`ORD_EXT,
`EORD_EXT:
begin
load_what <= `LW_BL;
radr <= ex_address;
pc <= pc + (isFar ? 32'd4 : 32'd3);
next_state(LOAD1);
end
`endif
`ifdef SUPPORT_6309
`ADDW_EXT,`CMPW_EXT,`LDW_EXT,`SUBW_EXT,
`endif
`SUBD_EXT,`ADDD_EXT,`LDD_EXT,`CMPD_EXT,`ADCD_EXT,`SBCD_EXT:
begin
load_what <= `LW_BH;
1659,7 → 2168,11
`STS_EXT: ex_store(`SW_SSPH);
`STX_EXT: ex_store(`SW_XH);
`STY_EXT: ex_store(`SW_YH);
 
`ifdef SUPPORT_6309
`STW_EXT: ex_store(`SW_ACCWH);
`STE_EXT: ex_store(`SW_ACCE);
`STF_EXT: ex_store(`SW_ACCF);
`endif
`BSR:
begin
store_what <= `SW_PCH;
1940,6 → 2453,21
a <= {acca[`LOBYTE],accb[`LOBYTE]};
res <= {acca[`LOBYTE],accb[`LOBYTE]} + b[`DBLBYTE];
end
`ifdef SUPPORT_6309
`SUBW_DP,`SUBW_NDX,`SUBW_EXT,
`CMPW_DP,`CMPW_NDX,`CMPW_EXT:
begin
a <= {acce[`LOBYTE],accf[`LOBYTE]};
res <= {acce[`LOBYTE],accf[`LOBYTE]} - b[`DBLBYTE];
end
`ADDW_DP,`ADDW_NDX,`ADDW_EXT:
begin
a <= {acce[`LOBYTE],accf[`LOBYTE]};
res <= {acce[`LOBYTE],accf[`LOBYTE]} + b[`DBLBYTE];
end
`LDW_DP,`LDW_NDX,`LDW_EXT:
res <= b[`DBLBYTE];
`endif
`ADCD_DP,`ADCD_NDX,`ADCD_EXT:
begin
a <= {acca[`LOBYTE],accb[`LOBYTE]};
1947,7 → 2475,12
end
`LDD_DP,`LDD_NDX,`LDD_EXT:
res <= b[`DBLBYTE];
 
`ifdef SUPPORT_6309
`CMPE_DP,`CMPE_NDX,`CMPE_EXT,
`CMPF_DP,`CMPF_NDX,`CMPF_EXT,
`SUBE_DP,`SUBE_NDX,`SUBE_EXT,
`SUBF_DP,`SUBF_NDX,`SUBF_EXT,
`endif
`CMPA_DP,`CMPA_NDX,`CMPA_EXT,
`SUBA_DP,`SUBA_NDX,`SUBA_EXT,
`CMPB_DP,`CMPB_NDX,`CMPB_EXT,
1968,6 → 2501,18
`BITB_DP,`BITB_NDX,`BITB_EXT,
`ANDB_DP,`ANDB_NDX,`ANDB_EXT:
res12 <= acc[`LOBYTE] & b12;
`ifdef SUPPORT_6309
`BITD_DP,`BITD_NDX,`BITD_EXT,
`ANDD_DP,`ANDD_NDX,`ANDD_EXT:
res <= {acca[`LOBYTE],accb[`LOBYTE]} & b[`DBLBYTE];
`EORD_DP,`EORD_NDX,`EORD_EXT:
res <= {acca[`LOBYTE],accb[`LOBYTE]} ^ b[`DBLBYTE];
`ORD_DP,`ORD_NDX,`ORD_EXT:
res <= {acca[`LOBYTE],accb[`LOBYTE]} | b[`DBLBYTE];
`LDE_DP,`LDE_NDX,`LDE_EXT,
`LDF_DP,`LDF_NDX,`LDF_EXT:
res12 <= b12;
`endif
`LDA_DP,`LDA_NDX,`LDA_EXT,
`LDB_DP,`LDB_NDX,`LDB_EXT:
res12 <= b12;
1983,6 → 2528,10
`ORA_DP,`ORA_NDX,`ORA_EXT,
`ORB_DP,`ORB_NDX,`ORB_EXT:
res12 <= acc[`LOBYTE] | b12;
`ifdef SUPPORT_6309
`ADDE_DP,`ADDE_NDX,`ADDE_EXT,
`ADDF_DP,`ADDF_NDX,`ADDF_EXT,
`endif
`ADDA_DP,`ADDA_NDX,`ADDA_EXT,
`ADDB_DP,`ADDB_NDX,`ADDB_EXT:
begin
2008,12 → 2557,12
`DEC_DP,`DEC_NDX,`DEC_EXT: begin res12 <= b12 - 2'd1; wadr <= radr; store_what <= `SW_RES8; next_state(STORE1); end
`INC_DP,`INC_NDX,`INC_EXT: begin res12 <= b12 + 2'd1; wadr <= radr; store_what <= `SW_RES8; next_state(STORE1); end
`TST_DP,`TST_NDX,`TST_EXT: res12 <= b12;
/*
`ifdef SUPPORT_6309
`AIM_DP,`AIM_NDX,`AIM_EXT: begin res12 <= ir[`HIBYTE] & b12; wadr <= radr; store_what <= `SW_RES8; next_state(STORE1); end
`OIM_DP,`OIM_NDX,`OIM_EXT: begin res12 <= ir[`HIBYTE] | b12; wadr <= radr; store_what <= `SW_RES8; next_state(STORE1); end
`EIM_DP,`EIM_NDX,`OIM_EXT: begin res12 <= ir[`HIBYTE] ^ b12; wadr <= radr; store_what <= `SW_RES8; next_state(STORE1); end
`TIM_DP,`TIM_NDX,`TIM_EXT: begin res12 <= ir[`HIBYTE] & b12; end
*/
`endif
default: ;
endcase
end
2038,6 → 2587,12
`SW_ACCDL: wb_write(wadr,accb[`LOBYTE]);
`SW_ACCA: wb_write(wadr,acca[`LOBYTE]);
`SW_ACCB: wb_write(wadr,accb[`LOBYTE]);
`ifdef SUPPORT_6309
`SW_ACCWH: wb_write(wadr,acce[`LOBYTE]);
`SW_ACCWL: wb_write(wadr,accf[`LOBYTE]);
`SW_ACCE: wb_write(wadr,acce[`LOBYTE]);
`SW_ACCF: wb_write(wadr,accf[`LOBYTE]);
`endif
`SW_DPR: wb_write(wadr,dpr);
`SW_XL: wb_write(wadr,xr[`LOBYTE]);
`SW_XH: wb_write(wadr,xr[`HIBYTE]);
2061,12 → 2616,22
radr <= wadr; // Do a cache read to test the hit
`endif
if (!tsc)
next_state(STORE2);
next_state(STORE1a);
end
end
end
endtask
 
task tStore1a;
begin
if (!tsc) begin
cyc_o <= 1'b1;
stb_o <= 1'b1;
next_state(STORE2);
end
end
endtask
 
// Terminal state for stores. Update the data cache if there was a cache hit.
// Clear any previously set lock status
task tStore2;
2100,6 → 2665,24
next_state(PUSH2);
else // STB
next_state(IFETCH);
`ifdef SUPPORT_6309
`SW_ACCE:
if (isINT | isPSHS | isPSHU)
next_state(PUSH2);
else // STE
next_state(IFETCH);
`SW_ACCF:
if (isINT | isPSHS | isPSHU)
next_state(PUSH2);
else // STF
next_state(IFETCH);
`SW_ACCWH:
begin
store_what <= `SW_ACCWL;
next_state(STORE1);
end
`SW_ACCWL: next_state(IFETCH);
`endif
`SW_ACCDH:
begin
store_what <= `SW_ACCDL;
2234,6 → 2817,26
zf <= res12[`LOBYTE]==12'h000;
accb <= res12[`LOBYTE];
end
`ifdef SUPPORT_6309
`ADDE_IMM,`ADDE_DP,`ADDE_NDX,`ADDE_EXT:
begin
cf <= (a[BPBM1]&b[BPBM1])|(a[BPBM1]&~res12[BPBM1])|(b[BPBM1]&~res12[BPBM1]);
hf <= (a[`HCBIT]&b[`HCBIT])|(a[`HCBIT]&~res12[`HCBIT])|(b[`HCBIT]&~res12[`HCBIT]);
vf <= (res12[BPBM1] ^ b[BPBM1]) & (1'b1 ^ a[BPBM1] ^ b[BPBM1]);
nf <= res12[BPBM1];
zf <= res12[`LOBYTE]==12'h000;
accf <= res12[`LOBYTE];
end
`ADDF_IMM,`ADDF_DP,`ADDF_NDX,`ADDF_EXT:
begin
cf <= (a[BPBM1]&b[BPBM1])|(a[BPBM1]&~res12[BPBM1])|(b[BPBM1]&~res12[BPBM1]);
hf <= (a[`HCBIT]&b[`HCBIT])|(a[`HCBIT]&~res12[`HCBIT])|(b[`HCBIT]&~res12[`HCBIT]);
vf <= (res12[BPBM1] ^ b[BPBM1]) & (1'b1 ^ a[BPBM1] ^ b[BPBM1]);
nf <= res12[BPBM1];
zf <= res12[`LOBYTE]==12'h000;
acce <= res12[`LOBYTE];
end
`endif
`ADDD_IMM,`ADDD_DP,`ADDD_NDX,`ADDD_EXT:
begin
cf <= (a[BPBX2M1]&b[BPBX2M1])|(a[BPBX2M1]&~res[BPBX2M1])|(b[BPBX2M1]&~res[BPBX2M1]);
2243,6 → 2846,35
acca <= res[`HIBYTE];
accb <= res[`LOBYTE];
end
`ifdef SUPPORT_6309
`ADDW_IMM,`ADDW_DP,`ADDW_NDX,`ADDW_EXT:
begin
cf <= (a[BPBX2M1]&b[BPBX2M1])|(a[BPBX2M1]&~res[BPBX2M1])|(b[BPBX2M1]&~res[BPBX2M1]);
vf <= (res[BPBX2M1] ^ b[BPBX2M1]) & (1'b1 ^ a[BPBX2M1] ^ b[BPBX2M1]);
nf <= res[BPBX2M1];
zf <= res[`DBLBYTE]==24'h000000;
acce <= res[`HIBYTE];
accf <= res[`LOBYTE];
end
`ADCD_IMM,`ADCD_DP,`ADCD_NDX,`ADCD_EXT:
begin
cf <= (a[BPBX2M1]&b[BPBX2M1])|(a[BPBX2M1]&~res[BPBX2M1])|(b[BPBX2M1]&~res[BPBX2M1]);
vf <= (res[BPBX2M1] ^ b[BPBX2M1]) & (1'b1 ^ a[BPBX2M1] ^ b[BPBX2M1]);
nf <= res[BPBX2M1];
zf <= res[`DBLBYTE]==24'h0000;
acca <= res[`HIBYTE];
accb <= res[`LOBYTE];
end
`OIM_DP,`OIM_NDX,`OIM_EXT,
`EIM_DP,`EIM_NDX,`EIM_EXT,
`TIM_DP,`TIM_NDX,`TIM_EXT,
`AIM_DP,`AIM_NDX,`AIM_EXT:
begin
vf <= 1'b0;
nf <= res12n;
zf <= res12z;
end
`endif
`ANDA_IMM,`ANDA_DP,`ANDA_NDX,`ANDA_EXT:
begin
nf <= res12n;
2257,6 → 2889,24
vf <= 1'b0;
accb <= res12[`LOBYTE];
end
`ifdef SUPPORT_6309
`ORD_IMM,`ORD_DP,`ORD_NDX,`ORD_EXT,
`EORD_IMM,`EORD_DP,`EORD_NDX,`EORD_EXT,
`ANDD_IMM,`ANDD_DP,`ANDD_NDX,`ANDD_EXT:
begin
nf <= res24n;
zf <= res24z;
vf <= 1'b0;
acca <= res[`HIBYTE];
accb <= res[`LOBYTE];
end
`BITD_IMM,`BITD_DP,`BITD_NDX,`BITD_EXT:
begin
nf <= res24n;
zf <= res24z;
vf <= 1'b0;
end
`endif
`ASLA:
begin
cf <= res12c;
2275,6 → 2925,53
zf <= res12[`LOBYTE]==12'h000;
accb <= res12[`LOBYTE];
end
`ifdef H6309
`ASLD,`ROLD:
begin
cf <= resc;
nf <= resn;
zf <= resz;
vf <= acca[bitsPerByte-1]^acca[bitsPerByte-2];
acca <= res[`HIBYTE];
accb <= res[`LOBYTE];
end
`ASRD:
begin
cf <= resc;
nf <= resn;
zf <= resz;
vf <= acca[bitsPerByte-1]^acca[bitsPerByte-2];
acca <= res[`HIBYTE];
accb <= res[`LOBYTE];
end
`LSRD,`RORD:
begin
cf <= resc;
nf <= resn;
zf <= resz;
vf <= acca[bitsPerByte-1]^acca[bitsPerByte-2];
acca <= res[`HIBYTE];
accb <= res[`LOBYTE];
end
`LSRW:
begin
cf <= resc;
nf <= resn;
zf <= resz;
vf <= acce[bitsPerByte-1]^acce[bitsPerByte-2];
acce <= res[`HIBYTE];
accf <= res[`LOBYTE];
end
`ROLW,`RORW:
begin
cf <= resc;
nf <= resn;
zf <= resz;
vf <= acce[bitsPerByte-1]^acce[bitsPerByte-2];
acce <= res[`HIBYTE];
accf <= res[`LOBYTE];
end
`endif
`ASL_DP,`ASL_NDX,`ASL_EXT:
begin
cf <= res12c;
2329,6 → 3026,42
zf <= 1'b1;
accb <= 12'h000;
end
`ifdef SUPPORT_6309
`CLRD:
begin
vf <= 1'b0;
cf <= 1'b0;
nf <= 1'b0;
zf <= 1'b1;
acca <= 12'h000;
accb <= 12'h000;
end
`CLRW:
begin
vf <= 1'b0;
cf <= 1'b0;
nf <= 1'b0;
zf <= 1'b1;
acce <= 12'h000;
accf <= 12'h000;
end
`CLRE:
begin
vf <= 1'b0;
cf <= 1'b0;
nf <= 1'b0;
zf <= 1'b1;
acce <= 12'h000;
end
`CLRF:
begin
vf <= 1'b0;
cf <= 1'b0;
nf <= 1'b0;
zf <= 1'b1;
accf <= 12'h000;
end
`endif
`CLR_DP,`CLR_NDX,`CLR_EXT:
begin
vf <= 1'b0;
2336,6 → 3069,10
nf <= 1'b0;
zf <= 1'b1;
end
`ifdef SUPPORT_6309
`CMPE_IMM,`CMPE_DP,`CMPE_NDX,`CMPE_EXT,
`CMPF_IMM,`CMPF_DP,`CMPF_NDX,`CMPF_EXT,
`endif
`CMPA_IMM,`CMPA_DP,`CMPA_NDX,`CMPA_EXT,
`CMPB_IMM,`CMPB_DP,`CMPB_NDX,`CMPB_EXT:
begin
2345,6 → 3082,9
nf <= res12[BPBM1];
zf <= res12[`LOBYTE]==12'h000;
end
`ifdef SUPPORT_6309
`CMPW_IMM,`CMPW_DP,`CMPW_NDX,`CMPW_EXT,
`endif
`CMPD_IMM,`CMPD_DP,`CMPD_NDX,`CMPD_EXT:
begin
cf <= (~a[BPBX2M1]&b[BPBX2M1])|(res[BPBX2M1]&~a[BPBX2M1])|(res[BPBX2M1]&b[BPBX2M1]);
2378,6 → 3118,40
zf <= res12z;
accb <= res12[`LOBYTE];
end
`ifdef SUPPORT_6309
`COME:
begin
cf <= 1'b1;
vf <= 1'b0;
nf <= res12n;
zf <= res12z;
acce <= res12[`LOBYTE];
end
`COMF:
begin
cf <= 1'b1;
vf <= 1'b0;
nf <= res12n;
zf <= res12z;
accf <= res12[`LOBYTE];
end
`COMD:
begin
cf <= 1'b1;
vf <= 1'b0;
nf <= res24n;
zf <= res24z;
{acca,accb} <= res;
end
`COMW:
begin
cf <= 1'b1;
vf <= 1'b0;
nf <= res24n;
zf <= res24z;
{acce,accf} <= res;
end
`endif
`COM_DP,`COM_NDX,`COM_EXT:
begin
cf <= 1'b1;
2407,6 → 3181,36
vf <= res12[BPBM1] != accb[BPBM1];
accb <= res12[`LOBYTE];
end
`ifdef SUPPORT_6309
`DECE:
begin
nf <= res12n;
zf <= res12z;
vf <= res12[BPBM1] != acce[BPBM1];
acce <= res12[`LOBYTE];
end
`DECF:
begin
nf <= res12n;
zf <= res12z;
vf <= res12[BPBM1] != accf[BPBM1];
accf <= res12[`LOBYTE];
end
`DECD:
begin
nf <= res24n;
zf <= res24z;
vf <= res[bitsPerByte*2-1] != acca[bitsPerByte-1];
{acca,accb} <= res;
end
`DECW:
begin
nf <= res24n;
zf <= res24z;
vf <= res[bitsPerByte*2-1] != acce[bitsPerByte-1];
{acce,accf} <= res;
end
`endif
`DEC_DP,`DEC_NDX,`DEC_EXT:
begin
nf <= res12n;
2456,8 → 3260,15
ef <= src1[7];
end
4'b1011: dpr <= src1[`LOBYTE];
4'b1110: usppg <= src1[`DBLBYTE];
4'b1100: usppg <= src1[`DBLBYTE];
`ifdef SUPPORT_6309
4'b0110: {acce,accf} <= src1[`DBLBYTE];
4'b1110: acce <= src1[`LOBYTE];
4'b1111: accf <= src1[`LOBYTE];
`else
4'b1110: ;
4'b1111: ;
`endif
default: ;
endcase
case(ir[bitsPerByte+7:bitsPerByte+4])
2485,8 → 3296,14
ef <= src2[7];
end
4'b1011: dpr <= src2[`LOBYTE];
4'b1110: usppg <= src2[`DBLBYTE];
4'b1100: usppg <= src2[`DBLBYTE];
`ifdef SUPPORT_6309
4'b1110: acce <= src2[`LOBYTE];
4'b1111: accf <= src2[`LOBYTE];
`else
4'b1110: ;
4'b1111: ;
`endif
default: ;
endcase
end
2504,6 → 3321,50
vf <= res12[BPBM1] != accb[BPBM1];
accb <= res12[`LOBYTE];
end
`ifdef SUPPORT_6309
`INCE:
begin
nf <= res12n;
zf <= res12z;
vf <= res12[BPBM1] != acce[BPBM1];
acce <= res12[`LOBYTE];
end
`INCF:
begin
nf <= res12n;
zf <= res12z;
vf <= res12[BPBM1] != accf[BPBM1];
accf <= res12[`LOBYTE];
end
`INCD:
begin
nf <= res24n;
zf <= res24z;
vf <= res[bitsPerByte*2-1] != acca[bitsPerByte-1];
{acca,accb} <= res[`LOBYTE];
end
`INCW:
begin
nf <= res24n;
zf <= res24z;
vf <= res[bitsPerByte*2-1] != acce[bitsPerByte-1];
{acce,accf} <= res[`LOBYTE];
end
`LDE_IMM,`LDE_DP,`LDE_NDX,`LDE_EXT:
begin
vf <= 1'b0;
zf <= res12z;
nf <= res12n;
acce <= res12[`LOBYTE];
end
`LDF_IMM,`LDF_DP,`LDF_NDX,`LDF_EXT:
begin
vf <= 1'b0;
zf <= res12z;
nf <= res12n;
accf <= res12[`LOBYTE];
end
`endif
`INC_DP,`INC_NDX,`INC_EXT:
begin
nf <= res12n;
2532,6 → 3393,16
acca <= res[`HIBYTE];
accb <= res[`LOBYTE];
end
`ifdef SUPPORT_6309
`LDW_IMM,`LDW_DP,`LDW_NDX,`LDW_EXT:
begin
vf <= 1'b0;
zf <= res24z;
nf <= res24n;
acce <= res[`HIBYTE];
accf <= res[`LOBYTE];
end
`endif
`LDU_IMM,`LDU_DP,`LDU_NDX,`LDU_EXT:
begin
vf <= 1'b0;
2620,6 → 3491,17
zf <= res12[`LOBYTE]==12'h000;
accb <= res12[`LOBYTE];
end
`ifdef SUPPORT_6309
`NEGD:
begin
cf <= (~a[bitsPerByte*2-1]&b[bitsPerByte*2-1])|(res[bitsPerByte*2-1]&~a[bitsPerByte*2-1])|(res[bitsPerByte*2-1]&b[bitsPerByte*2-1]);
hf <= (~a[`HCBIT]&b[`HCBIT])|(res[`HCBIT]&~a[`HCBIT])|(res[`HCBIT]&b[`HCBIT]);
vf <= (1'b1 ^ res[bitsPerByte*2-1] ^ b[bitsPerByte*2-1]) & (a[bitsPerByte*2-1] ^ b[bitsPerByte*2-1]);
nf <= res[bitsPerByte*2-1];
zf <= res[`DBLBYTE]=='h0;
{acca,accb} <= res;
end
`endif
`NEG_DP,`NEG_NDX,`NEG_EXT:
begin
cf <= (~a[BPBM1]&b[BPBM1])|(res12[BPBM1]&~a[BPBM1])|(res12[BPBM1]&b[BPBM1]);
2699,6 → 3581,10
zf <= res12z;
acca <= res12[`LOBYTE];
end
`ifdef SUPPORT_6309
`STE_DP,`STE_NDX,`STE_EXT,
`STF_DP,`STF_NDX,`STF_EXT,
`endif
`STA_DP,`STA_NDX,`STA_EXT,
`STB_DP,`STB_NDX,`STB_EXT:
begin
2706,6 → 3592,9
zf <= res12z;
nf <= res12n;
end
`ifdef SUPPORT_6309
`STW_DP,`STW_NDX,`STW_EXT,
`endif
`STD_DP,`STD_NDX,`STD_EXT,
`STU_DP,`STU_NDX,`STU_EXT,
`STX_DP,`STX_NDX,`STX_EXT,
2742,11 → 3631,19
ef <= src1[7];
end
4'b1011: dpr <= src1[`LOBYTE];
4'b1110: usppg <= src1[`DBLBYTE];
4'b1100: usppg <= src1[`DBLBYTE];
`ifdef SUPPORT_6309
4'b0110: {acce,accf} <= src1[`DBLBYTE];
4'b1110: acce <= src1[`LOBYTE];
4'b1111: accf <= src1[`LOBYTE];
`else
4'b1110: ;
4'b1111: ;
`endif
default: ;
endcase
end
`TSTE,`TSTF,
`TSTA,`TSTB:
begin
vf <= 1'b0;
2759,6 → 3656,14
nf <= res24n;
zf <= res24z;
end
`ifdef SUPPORT_6309
`TSTW:
begin
vf <= 1'b0;
nf <= res24n;
zf <= res24z;
end
`endif
`TST_DP,`TST_NDX,`TST_EXT:
begin
vf <= 1'b0;
2783,6 → 3688,36
cf <= res12c;
hf <= (~a[`HCBIT]&b[`HCBIT])|(res12[`HCBIT]&~a[`HCBIT])|(res12[`HCBIT]&b[`HCBIT]);
end
`ifdef SUPPORT_6309
`SUBE_IMM,`SUBE_DP,`SUBE_NDX,`SUBE_EXT:
begin
acce <= res12[`LOBYTE];
nf <= res12n;
zf <= res12z;
vf <= (1'b1 ^ res12[BPBM1] ^ b[BPBM1]) & (a[BPBM1] ^ b[BPBM1]);
cf <= res12c;
hf <= (~a[`HCBIT]&b[`HCBIT])|(res12[`HCBIT]&~a[`HCBIT])|(res12[`HCBIT]&b[`HCBIT]);
end
`SUBF_IMM,`SUBF_DP,`SUBF_NDX,`SUBF_EXT:
begin
accf <= res12[`LOBYTE];
nf <= res12n;
zf <= res12z;
vf <= (1'b1 ^ res12[BPBM1] ^ b[BPBM1]) & (a[BPBM1] ^ b[BPBM1]);
cf <= res12c;
hf <= (~a[`HCBIT]&b[`HCBIT])|(res12[`HCBIT]&~a[`HCBIT])|(res12[`HCBIT]&b[`HCBIT]);
end
`SUBW_IMM,`SUBW_DP,`SUBW_NDX,`SUBW_EXT:
begin
cf <= res24c;
vf <= (1'b1 ^ res[BPBX2M1] ^ b[BPBX2M1]) & (a[BPBX2M1] ^ b[BPBX2M1]);
nf <= res[BPBX2M1];
zf <= res[`DBLBYTE]==24'h000000;
acce <= res[`HIBYTE];
accf <= res[`LOBYTE];
end
`SBCD_IMM,`SBCD_DP,`SBCD_NDX,`SBCD_EXT,
`endif
`SUBD_IMM,`SUBD_DP,`SUBD_NDX,`SUBD_EXT:
begin
cf <= res24c;
2874,8 → 3809,6
input [`LOBYTE] dat;
begin
if (!tsc) begin
cyc_o <= 1'b1;
stb_o <= 1'b1;
we_o <= 1'b1;
adr_o <= adr;
dat_o <= dat;
2972,6 → 3905,46
else
next_state(IFETCH);
end
`ifdef SUPPORT_6309
`LW_ACCE: begin
acce <= dat;
radr <= radr + 2'd1;
if (isRTI) begin
$display("loaded acce=%h from %h", dat, radr);
ssp <= ssp + 2'd1;
next_state(PULL1);
end
else if (isPULU) begin
usp <= usp + 2'd1;
next_state(PULL1);
end
else if (isPULS) begin
ssp <= ssp + 2'd1;
next_state(PULL1);
end
else
next_state(IFETCH);
end
`LW_ACCF: begin
accf <= dat;
radr <= radr + 2'd1;
if (isRTI) begin
$display("loaded accf=%h from %h", dat, radr);
ssp <= ssp + 2'd1;
next_state(PULL1);
end
else if (isPULU) begin
usp <= usp + 2'd1;
next_state(PULL1);
end
else if (isPULS) begin
ssp <= ssp + 2'd1;
next_state(PULL1);
end
else
next_state(IFETCH);
end
`endif
`LW_DPR: begin
dpr <= dat;
radr <= radr + 2'd1;
/rf6809/trunk/rtl/cpu/rf6809_pic.sv
117,6 → 117,7
reg [31:0] iedge;
reg [31:0] rste;
reg [31:0] es;
reg [31:0] irq_active;
reg [3:0] irq [0:31];
reg [BPB:0] cause [0:31];
reg [5:0] server [0:31];
198,6 → 199,7
8'b1?????00: dat_o <= cause[adr_i[6:2]];
8'b1?????01: dat_o <= {es[adr_i[6:2]],ie[adr_i[6:2]],2'b0,irq[adr_i[6:2]]};
8'b1?????10: dat_o <= {2'b0,server[adr_i[6:2]]};
8'b1?????11: dat_o <= irq_active[adr_i[6:2]];
default: dat_o <= 12'h00;
endcase
else
229,10 → 231,16
// misreads
// nmi is not encoded
always @(posedge clk)
begin
if (rst_i)
irq_active <= 32'd0;
else begin
irqenc <= 5'd0;
for (n = 31; n > 0; n = n - 1)
for (n = 31; n > 0; n = n - 1) begin
if ((es[n] ? iedge[n] : i[n])) irqenc <= n;
if ((es[n] ? iedge[n] : i[n])) irq_active[n] <= 1'b1;
end
if (cs && wr_i && adr_i[7] && &adr_i[1:0])
irq_active[adr_i[6:2]] <= dat_i[0];
end
 
endmodule
/rf6809/trunk/rtl/cpu/rf6809_pkg.sv
9,6 → 9,9
parameter BPBM1 = BPB-1;
parameter BPBX2M1 = BPB*2-1;
 
// The following adds support for many 6309 instructions.
//`define SUPPORT_6309
 
// The following allows asynchronous reads for icache updating.
// It increases the size of the core.
//`define SUPPORT_AREAD 1
346,33 → 349,89
`define LBGT 12'h12E
`define LBLE 12'h12F
 
`define ADDR 12'h130
`define ADCR 12'h131
`define SUBR 12'h132
`define SBCR 12'h133
`define ANDR 12'h134
`define ORR 12'h135
`define EORR 12'h136
`define CMPR 12'h137
`define SWI2 12'h13F
`define NEGD 12'h140
`define COMD 12'h143
`define LSRD 12'h144
`define RORD 12'h146
`define ASRD 12'h147
`define ASLD 12'h148
`define ROLD 12'h149
`define DECD 12'h14A
`define INCD 12'h14C
`define TSTD 12'h14D
`define CLRD 12'h14F
`define COMW 12'h153
`define LSRW 12'h154
`define RORW 12'h156
`define ROLW 12'h159
`define DECW 12'h15A
`define INCW 12'h15C
`define TSTW 12'h15D
`define CLRW 12'h15F
`define SUBW_IMM 12'h180
`define CMPW_IMM 12'h181
`define SBCD_IMM 12'h182
`define CMPD_IMM 12'h183
`define ANDD_IMM 12'h184
`define BITD_IMM 12'h185
`define LDW_IMM 12'h186
`define EORD_IMM 12'h188
`define ADCD_IMM 12'h189
`define ORD_IMM 12'h18A
`define ADDW_IMM 12'h18B
`define CMPY_IMM 12'h18C
`define LDY_IMM 12'h18E
`define SUBW_DP 12'h190
`define CMPW_DP 12'h191
`define SBCD_DP 12'h192
`define CMPD_DP 12'h193
`define ANDD_DP 12'h194
`define BITD_DP 12'h195
`define LDW_DP 12'h196
`define STW_DP 12'h197
`define EORD_DP 12'h198
`define ADCD_DP 12'h199
`define ORD_DP 12'h19A
`define ADDW_DP 12'h19B
`define CMPY_DP 12'h19C
`define LDY_DP 12'h19E
`define STY_DP 12'h19F
`define SUBW_NDX 12'h1A0
`define CMPW_NDX 12'h1A1
`define SBCD_NDX 12'h1A2
`define CMPD_NDX 12'h1A3
`define ANDD_NDX 12'h1A4
`define BITD_NDX 12'h1A5
`define LDW_NDX 12'h1A6
`define STW_NDX 12'h1A7
`define EORD_NDX 12'h1A8
`define ADCD_NDX 12'h1A9
`define ORD_NDX 12'h1AA
`define ADDW_NDX 12'h1AB
`define CMPY_NDX 12'h1AC
`define LDY_NDX 12'h1AE
`define STY_NDX 12'h1AF
`define SUBW_EXT 12'h1B0
`define CMPW_EXT 12'h1B1
`define SBCD_EXT 12'h1B2
`define CMPD_EXT 12'h1B3
`define ANDD_EXT 12'h1B4
`define BITD_EXT 12'h1B5
`define LDW_EXT 12'h1B6
`define STW_EXT 12'h1B7
`define EORD_EXT 12'h1B8
`define ADCD_EXT 12'h1B9
`define ORD_EXT 12'h1BA
`define ADDW_EXT 12'h1BB
`define CMPY_EXT 12'h1BC
`define LDY_EXT 12'h1BE
`define STY_EXT 12'h1BF
391,7 → 450,59
`define STS_EXT 12'h1FF
`define LDMD 12'h23D
`define SWI3 12'h23F
`define COME 12'h243
`define DECE 12'h24A
`define INCE 12'h24C
`define TSTE 12'h24D
`define CLRE 12'h24F
`define COMF 12'h253
`define DECF 12'h25A
`define INCF 12'h25C
`define TSTF 12'h25D
`define CLRF 12'h25F
`define SUBE_IMM 12'h280
`define CMPU_IMM 12'h283
`define LDE_IMM 12'h286
`define ADDE_IMM 12'h28B
`define DIVD_IMM 12'h28D
`define SUBE_DP 12'h290
`define LDE_DP 12'h296
`define ADDE_DP 12'h29B
`define DIVD_DP 12'h29D
`define SUBE_NDX 12'h2A0
`define LDE_NDX 12'h2A6
`define ADDE_NDX 12'h2AB
`define DIVD_NDX 12'h2AD
`define SUBE_EXT 12'h2B0
`define LDE_EXT 12'h2B6
`define ADDE_EXT 12'h2BB
`define DIVD_EXT 12'h2BD
`define SUBF_IMM 12'h2C0
`define LDF_IMM 12'h2C6
`define ADDF_IMM 12'h2CB
`define SUBF_DP 12'h2D0
`define LDF_DP 12'h2D6
`define ADDF_DP 12'h2DB
`define SUBF_NDX 12'h2E0
`define LDF_NDX 12'h2E6
`define ADDF_NDX 12'h2EB
`define SUBF_EXT 12'h2F0
`define LDF_EXT 12'h2F6
`define ADDF_EXT 12'h2FB
`define CMPE_IMM 12'h281
`define CMPE_DP 12'h291
`define STE_DP 12'h297
`define STE_NDX 12'h2A7
`define STE_EXT 12'h2B7
`define STF_DP 12'h2D7
`define STF_NDX 12'h2E7
`define STF_EXT 12'h2F7
`define CMPE_NDX 12'h2A1
`define CMPE_EXT 12'h2B1
`define CMPF_IMM 12'h2C1
`define CMPF_DP 12'h2D1
`define CMPF_NDX 12'h2E1
`define CMPF_EXT 12'h2F1
`define CMPS_IMM 12'h28C
`define CMPU_DP 12'h293
`define CMPS_DP 12'h29C
435,6 → 546,8
`define LW_USP2316 6'd29
`define LW_SSP3124 6'd30
`define LW_SSP2316 6'd31
`define LW_ACCE 6'd32
`define LW_ACCF 6'd33
`define LW_NOTHING 6'd63
 
`define SW_ACCDH 6'd0
479,6 → 592,10
`define SW_ACCB2316 6'd39
`define SW_ACCB158 6'd40
`define SW_ACCB70 6'd41
`define SW_ACCE 6'd42
`define SW_ACCF 6'd43
`define SW_ACCWH 6'd44
`define SW_ACCWL 6'd45
`define SW_NOTHING 6'd63
 
endpackage
/rf6809/trunk/software/boot/boot_rom.asm
92,6 → 92,18
IrqSource EQU $FFC011
IRQFlag EQU $FFC012
RunningID EQU $FFC013
milliseconds EQU $FFC014
 
; One copy of serial buffer management
; 1 serial buffer for system.
SerHeadRcv EQU $FFC015
SerTailRcv EQU $FFC016
SerHeadXmit EQU $FFC017
SerTailXmit EQU $FFC018
SerRcvXon EQU $FFC019
SerRcvXoff EQU $FFC01A
SerRcvBuf EQU $FFB000 ; 4kB serial recieve buffer
 
; Top of boot stack is at $FFC0FF
 
; These variables use direct page access
110,15 → 122,9
kbdFifo EQU $40 ; in local RAM
kbdFifoAlias EQU $C00040 ; to $C0007F ; alias for $40 to $7F
SerhZero EQU $130
SerHeadRcv EQU $131
SertZero EQU $132
SerTailRcv EQU $133
SerHeadXmit EQU $136
SerTailXmit EQU $138
SerRcvXon EQU $139
SerRcvXoff EQU $140
SerRcvBuf EQU $BFF000 ; 4kB serial recieve buffer
 
 
farflag EQU $15F
asmbuf EQU $160 ; to $17F
 
140,7 → 146,7
CmdPromptJI EQU $808
MonErrVec EQU $80C
BreakpointFlag EQU $810
NumSetBreakpoints EQU $811
NumSetBreakpoints EQU $811 ; to 812
Breakpoints EQU $820 ; to $82F
BreakpointBytes EQU $830 ; to $83F
mon_vectb EQU $880
361,17 → 367,18
clr ,x+
decb
bne init1
ldx #128 ; register to start at
st1:
clr PIC,x ; cause code
sta PIC+1,x
stb PIC+2,x
leax 4,x
cmpx #256
cmpx #256 ; max reg
blo st1
lda #$81 ; make irq edge sensitive
lda #$C1 ; make irq edge sensitive (bit 7), enable interupt (bit 6), irq (bit 0)
sta PIC+$FD
lda #31 ; enable timer interrupt
sta PIC+9
lda #$41 ; level sensitive, enabled, irq
sta PIC+$D1 ; serial irq is #20
lda #COLS
sta TEXTREG+TEXT_COLS
lda #ROWS
809,6 → 816,7
;
DisplayChar:
lbsr SerialPutChar
ScreenDisplayChar:
pshs d,x
cmpb #CR ; carriage return ?
bne dccr
1095,6 → 1103,7
 
OPT INCLUDE "d:\cores2022\rf6809\software\boot\serial.asm"
OPT INCLUDE "d:\cores2022\rf6809\software\boot\S19Loader.asm"
OPT INCLUDE "d:\cores2022\rf6809\software\boot\xmodem.asm"
 
;------------------------------------------------------------------------------
; Check if there is a keyboard character available. If so return true (<0)
1116,10 → 1125,11
; bra GetKey
; jsr [CharInVec] ; vector is being overwritten somehow
lbsr SerialPeekCharDirect
; lbsr SerialGetChar
tsta
bmi INCH1 ; block if no key available
leas 1,s ; get rid of blocking status
rts
rts ; return character
INCH1:
puls b ; check blocking status
tstb
1293,8 → 1303,8
 
cmdTable1:
fcb '<','>'+$800
fcb 'b','s'+$800
fcb 'b','c'+$800
fcb 'B','+'+$800
fcb 'B','-'+$800
fcb 'D','R'+$800
fcb 'D'+$800
fcb ':'+$800
1309,8 → 1319,21
fcb "exi",'t'+$800
fcb '?'+$800
fcb "CL",'S'+$800
fcb "S1",'9'+$800
fcb "C1",'9'+$800
fcb "JD",'4'+$800
fcb "XM",'R'+$800
fcb "XM",'S'+$800
fcb 'R','A'+$800
fcb 'R','B'+$800
fcb "RDP",'R'+$800
fcb 'R','D'+$800
fcb 'R','X'+$800
fcb 'R','Y'+$800
fcb 'R','U'+$800
fcb 'R','S'+$800
fcb "RCC",'R'+$800
fcb "RP",'C'+$800
fcb 'L','B'+$800
fcw 0
 
cmdTable2:
1333,6 → 1356,19
fcw PromptClearscreen
fcw S19Loader
fcw $FFD400
fcw xm_ReceiveStart
fcw xm_SendStart
fcw SetRegA
fcw SetRegB
fcw SetRegDPR
fcw SetRegD
fcw SetRegX
fcw SetRegY
fcw SetRegU
fcw SetRegS
fcw SetRegCCR
fcw SetRegPC
fcw ListBreakpoints
 
CmdPrompt:
lbsr CRLF
1344,6 → 1380,9
fcb "Femtiki F09 Multi-core OS Starting",CR,LF,0
 
Monitor:
andcc #$EF ; SWI disables interrupts, re-enable them
lda #31 ; Timer is IRQ #31
sta PIC+16 ; register 16 is edge sense reset reg
ldd mon_init ; check special code to see if monitor has been initialized
cmpd #1234567
beq mon1
1393,6 → 1432,8
Prompt3:
ldd #-1 ; block until key present
lbsr INCH
tsta ; should not get this with blocking
bmi Prompt3
cmpb #CR ; carriage return?
beq Prompt1
lbsr OUTCH ; spit out the character
1756,8 → 1797,9
HelpMsg:
fcb "? = Display help",CR,LF
fcb "CLS = clear screen",CR,LF
fcb "bs = set breakpoint",CR,LF
fcb "bc = clear breakpoint",CR,LF
fcb "b+ = set breakpoint",CR,LF
fcb "b- = clear breakpoint",CR,LF
fcb "C19 = run C19 loader",CR,LF
; db "S = Boot from SD Card",CR,LF
fcb ": = Edit memory bytes",CR,LF
; db "L = Load sector",CR,LF
1772,12 → 1814,10
; db "b = start EhBasic 6502",CR,LF
fcb "J = Jump to code",CR,LF
fcb "JD4 = Jump to $FFD400",CR,LF
fcb "RAMTEST = test RAM",CR,LF
; db "R[n] = Set register value",CR,LF
fcb "R[n] = Set register value",CR,LF
; db "r = random lines - test bitmap",CR,LF
; db "e = ethernet test",CR,LF
fcb "s = serial output test",CR,LF
fcb "S19 = run S19 loader",CR,LF
fcb "SP = sprite demo",CR,LF
; db "T = Dump task list",CR,LF
; db "TO = Dump timeout list",CR,LF
1785,6 → 1825,7
; db "TEMP = display temperature",CR,LF
fcb "U = unassemble",CR,LF
; db "P = Piano",CR,LF
fcb "XM = xmodem transfer",CR,LF
fcb "x = exit monitor",CR,LF
fcb 0
 
1875,6 → 1916,7
 
EditMemory:
ldu #8 ; set max byte count
lbsr ignBlanks
lbsr GetHexNumber ; get the start address
ldx mon_numwka+2
EditMem2:
1978,6 → 2020,75
lbra Monitor
 
;------------------------------------------------------------------------------
; SetRegXXX
;
; Set the value to be loaded into a register.
;------------------------------------------------------------------------------
 
SetRegA:
lbsr ignBlanks
lbsr GetNumber
lda mon_numwka+3
sta mon_DSAVE
lbra Monitor
SetRegB:
lbsr ignBlanks
lbsr GetNumber
lda mon_numwka+3
sta mon_DSAVE+1
lbra Monitor
SetRegD:
lbsr ignBlanks
lbsr GetNumber
ldd mon_numwka+2
std mon_DSAVE
lbra Monitor
SetRegX:
lbsr ignBlanks
lbsr GetNumber
ldd mon_numwka+2
std mon_XSAVE
lbra Monitor
SetRegY:
lbsr ignBlanks
lbsr GetNumber
ldd mon_numwka+2
std mon_YSAVE
lbra Monitor
SetRegU:
lbsr ignBlanks
lbsr GetNumber
ldd mon_numwka+2
std mon_USAVE
lbra Monitor
SetRegS:
lbsr ignBlanks
lbsr GetNumber
ldd mon_numwka+2
std mon_SSAVE
lbra Monitor
SetRegDPR:
lbsr ignBlanks
lbsr GetNumber
lda mon_numwka+3
sta mon_DPRSAVE
lbra Monitor
SetRegCCR:
lbsr ignBlanks
lbsr GetNumber
lda mon_numwka+3
sta mon_CCRSAVE
lbra Monitor
SetRegPC:
lbsr ignBlanks
lbsr GetNumber
ldd mon_numwka+2
std mon_PCSAVE+2
ldb mon_numwka+1
stb mon_PCSAVE+1
lbra Monitor
 
;------------------------------------------------------------------------------
; Jump to code
;
; Registers are loaded with values from the monitor register save area before
1987,17 → 2098,14
;------------------------------------------------------------------------------
 
jump_to_code:
bsr GetNumber
lbsr ignBlanks
lbsr GetNumber
sei
lds mon_SSAVE
ldd #jtc_exit ; setup stack for RTS back to monitor
ldd #jtc_exit ; setup stack for RTS back to monitor
pshs d
ldb #0
pshs b
ldd mon_numwka+2 ; get the address parameter
pshs d
ldb mon_numwka+1
pshs b
ldd mon_USAVE
pshs d
ldd mon_YSAVE
2010,7 → 2118,8
pshs d
lda mon_CCRSAVE
pshs a
puls far ccr,d,dpr,x,y,u,pc
puls far ccr,d,dpr,x,y,u
jmp far [mon_numwka+1]
jtc_exit:
sts >mon_SSAVE ; need to use extended addressing, no direct page setting
leas $6FFF ; reset stack to system area, dont modify flags register!
2062,7 → 2171,7
boot_stack:
fcw $FFC0FF
numBreakpoints:
fcb 8
fcw 8
mon_rom_vectab:
fcw mon_rom_vecs
mon_rom_vecs:
2079,6 → 2188,7
fcw 0 ; operating system call
fcw GetRange
fcw GetNumber
fcw SerialPutChar
 
NumFuncs EQU (*-mon_rom_vectab)/2
 
2099,6 → 2209,7
fcb $C00 ; OS call
fcb 0 ; GetRange
fcb $800 ; GetNumber
fcb 0 ; SerialPutChar
;------------------------------------------------------------------------------
; SWI routine.
2117,7 → 2228,7
leau -1,u ; backup a byte
tst BreakpointFlag ; are we in breakpoint mode?
beq swiNotBkpt
ldu #Breakpoints
ldy #Breakpoints
ldb NumSetBreakpoints
beq swiNotBkpt
swi_rout2:
2161,6 → 2272,10
swi_rout4:
rti
 
;------------------------------------------------------------------------------
; A breakpoint was struck during program execution, process accordingly.
;------------------------------------------------------------------------------
 
processBreakpoint:
lda ,s
sta mon_CCRSAVE
2175,8 → 2290,10
ldd 8,s
std mon_USAVE
sts mon_SSAVE
ldb 10,s
stb mon_PCSAVE
ldd 11,s
std mon_PCSAVE
std mon_PCSAVE+1
lds boot_stack,pcr
ldd #swi_rout3 ; setup so monitor can return
pshs d
2186,6 → 2303,9
xitMonitor:
bra ArmAllBreakpoints
 
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
 
swiCallOS:
leau 1,u ; next byte is func number
ldb ,u+
2204,6 → 2324,10
clr OSSEMA+1
bra swi_rout3
 
;------------------------------------------------------------------------------
; DisarmAllBreakpoints, used when entering the monitor.
;------------------------------------------------------------------------------
 
DisarmAllBreakpoints:
pshs d,x,y
ldy #0
2222,6 → 2346,9
disarm1:
puls d,x,y,pc
 
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
 
ArmAllBreakpoints:
pshs d,x,y
ldy #0
2240,12 → 2367,18
arm1:
puls d,x,y,pc
 
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
 
ArmBreakpoint:
pshs d,x,y
lda NumSetBreakpoints ; check if too many breakpoints set
cmpa numBreakpoints
lbhs DisplayErr
lbsr ignBlanks
lbsr GetHexNumber ; get address parameter
tstb
lbmi DisplayErr
ldb NumSetBreakpoints ; bv= number of set breakpoints
ldy mon_numwka+2 ; get address
lda ,y ; get byte at address
2259,11 → 2392,18
lsrb ; size back to single byte
incb
stb NumSetBreakpoints
puls d,x,y,pc
puls d,x,y
lbra Monitor
 
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
 
DisarmBreakpoint:
pshs d,x,y,u
lbsr ignBlanks
lbsr GetHexNumber
tstb
lbmi Monitor
clrb
clrb
tfr d,x ; x = zero too
2307,10 → 2447,39
incb
bra disarm6
disarm4:
puls d,x,y,u,pc
puls d,x,y,u
lbra Monitor
 
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
 
ListBreakpoints:
pshs d,x
swi
fcb MF_CRLF
ldx #0
ldb #0
lbrk1:
cmpb numBreakpoints
bhs lbrk2
cmpb NumSetBreakpoints
bhs lbrk2
ldd Breakpoints,x
leax 2,x
incb
pshs b
swi
fcb MF_DisplayWordAsHex
swi
fcb MF_CRLF
puls b
bra lbrk1
lbrk2:
puls d,x
lbra Monitor
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
swi3_rout:
sei
lda ,s
2344,22 → 2513,12
rti
 
irq_rout:
clra
tfr a,dpr
setdp $000
; lbsr SerialIRQ ; check for recieved character
lbsr TimerIRQ
 
; Reset the edge sense circuit in the PIC
; lda #31 ; Timer is IRQ #31
; sta IrqSource ; stuff a byte indicating the IRQ source for PEEK()
; sta PIC+16 ; register 16 is edge sense reset reg
; lda VIA+VIA_IFR
; bpl notTimerIRQ2
; bita #$800
; beq notTimerIRQ2
; clr VIA+VIA_T3LL
; clr VIA+VIA_T3LH
; inc $E00037 ; update timer IRQ screen flag
;notTimerIRQ2:
 
lda IrqBase ; get the IRQ flag byte
lsra
ora IrqBase
2367,32 → 2526,18
sta IrqBase
 
; inc TEXTSCR+54 ; update IRQ live indicator on screen
; inc TEXTSCR+$2000+54
; flash the cursor
; only bother to flash the cursor for the task with the IO focus.
; lda COREID
; cmpa IOFocusID
; bne tr1a
; lda CursorFlash ; test if we want a flashing cursor
; beq tr1a
; lbsr CalcScreenLoc ; compute cursor location in memory
; tfr d,y
; lda $2000,y ; get color code $2000 higher in memory
; ldb IRQFlag ; get counter
; lsrb
; lsra
; lsra
; lsra
; lsra
; lsrb
; rola
; lsrb
; rola
; lsrb
; rola
; lsrb
; rola
; sta $E00000,y ; store the color code back to memory
lda COREID
cmpa IOFocusID
bne tr1a
lda CursorFlash ; test if we want a flashing cursor
beq tr1a
lbsr CalcScreenLoc ; compute cursor location in memory
tfr d,y
inc $2000,y ; get color code $2000 higher in memory
tr1a:
rti
 
/rf6809/trunk/software/boot/boot_rom.lst
1,4 → 1,4
3 error(s), 526 warning(s) unlisted in pass 1
3 error(s), 894 warning(s) unlisted in pass 1
; ============================================================================
; __
; \\__/ o\ (C) 2013-2022 Robert Finch, Waterloo
71,6 → 71,16
;
; ============================================================================
;
; ASCII control characters.
SOH equ 1
EOT equ 4
ACK equ 6
BS equ 8
NAK equ 21
ETB equ $17
CAN equ 24
DEL equ 127
CR EQU $0D ;ASCII equates
LF EQU $0A
TAB EQU $09
106,6 → 116,7
MF_OSCALL EQU 10
MF_GetRange EQU 11 ; gets a pair of numbers last>first
MF_GetNumber EQU 12
MF_SerialPutchar EQU 13
mon_numwka EQU $910
mon_r1 EQU $920
172,6 → 183,7
ACIA_STAT EQU 1
ACIA_CMD EQU 2
ACIA_CTRL EQU 3
ACIA_IRQS EQU 4
ACIA_CTRL2 EQU 11
RTC EQU $FFFE30500 ; I2C
RTCBuf EQU $7FC0
241,6 → 253,18
IrqSource EQU $FFC011
IRQFlag EQU $FFC012
RunningID EQU $FFC013
milliseconds EQU $FFC014
; One copy of serial buffer management
; 1 serial buffer for system.
SerHeadRcv EQU $FFC015
SerTailRcv EQU $FFC016
SerHeadXmit EQU $FFC017
SerTailXmit EQU $FFC018
SerRcvXon EQU $FFC019
SerRcvXoff EQU $FFC01A
SerRcvBuf EQU $FFB000 ; 4kB serial recieve buffer
; Top of boot stack is at $FFC0FF
; These variables use direct page access
259,15 → 283,9
kbdFifo EQU $40 ; in local RAM
kbdFifoAlias EQU $C00040 ; to $C0007F ; alias for $40 to $7F
SerhZero EQU $130
SerHeadRcv EQU $131
SertZero EQU $132
SerTailRcv EQU $133
SerHeadXmit EQU $136
SerTailXmit EQU $138
SerRcvXon EQU $139
SerRcvXoff EQU $140
SerRcvBuf EQU $BFF000 ; 4kB serial recieve buffer
farflag EQU $15F
asmbuf EQU $160 ; to $17F
289,7 → 307,7
CmdPromptJI EQU $808
MonErrVec EQU $80C
BreakpointFlag EQU $810
NumSetBreakpoints EQU $811
NumSetBreakpoints EQU $811 ; to 812
Breakpoints EQU $820 ; to $82F
BreakpointBytes EQU $830 ; to $83F
mon_vectb EQU $880
320,7 → 338,7
00FFD0AE 012 nop
XBLANK
00FFD0AF 0C6020 ldb #' '
00FFD0B1 017001E2D lbsr OUTCH
00FFD0B1 017002115 lbsr OUTCH
00FFD0B4 039 rts
org $FFD0D0
329,9 → 347,9
CRLF
CRLF1:
00FFD0D2 0C600D ldb #CR
00FFD0D4 017001E0A lbsr OUTCH
00FFD0D4 0170020F2 lbsr OUTCH
00FFD0D7 0C600A ldb #LF
00FFD0D9 017001E05 lbsr OUTCH
00FFD0D9 0170020ED lbsr OUTCH
00FFD0DC 039 rts
org $FFD0F0
345,7 → 363,7
org $FFD2C0
00FFD2C0 012 nop
LETTER
00FFD2C1 017001C1D lbsr OUTCH
00FFD2C1 017001F05 lbsr OUTCH
00FFD2C4 039 rts
org $FFD2CC
352,18 → 370,18
00FFD2CC 012 nop
00FFD2CD 012 nop
HEX2
00FFD2CE 017001166 lbsr DispByteAsHex
00FFD2CE 017001169 lbsr DispByteAsHex
00FFD2D1 039 rts
HEX4
00FFD2D2 017001159 lbsr DispWordAsHex
00FFD2D2 01700115C lbsr DispWordAsHex
00FFD2D5 039 rts
org $FFD300
ClearScreenJmp
00FFD300 016000F36 lbra ClearScreen
00FFD300 016000F39 lbra ClearScreen
org $FFD308
HomeCursorJmp
00FFD308 016000FA5 lbra HomeCursor
00FFD308 016000FA8 lbra HomeCursor
org $FFD400
408,21 → 426,21
org $FFE000
00FFE000 FFF039 FDB Monitor
00FFE000 FFF35C FDB Monitor
00FFE002 FFE022 FDB DumRts ; NEXTCMD
00FFE004 FFEEA9 FDB INCH
00FFE006 FFEEC7 FDB INCHE
00FFE008 FFEECB FDB INCHEK
00FFE00A FFEEE1 FDB OUTCH
00FFE00C FFE41B FDB PDATA
00FFE00E FFE40E FDB PCRLF
00FFE010 FFE40A FDB PSTRNG
00FFE004 FFF191 FDB INCH
00FFE006 FFF1AF FDB INCHE
00FFE008 FFF1B3 FDB INCHEK
00FFE00A FFF1C9 FDB OUTCH
00FFE00C FFE41E FDB PDATA
00FFE00E FFE411 FDB PCRLF
00FFE010 FFE40D FDB PSTRNG
00FFE012 FFE022 FDB DumRts ; LRA
00FFE014 FFE022 FDB DumRts
00FFE016 FFE022 FDB DumRts
00FFE018 FFE022 FDB DumRts
00FFE01A FFE022 FDB DumRts ; VINIZ
00FFE01C FFE319 FDB DisplayChar ; VOUTCH
00FFE01C FFE31C FDB DisplayChar ; VOUTCH
00FFE01E FFE022 FDB DumRts ; ACINIZ
00FFE020 FFE022 FDB DumRts ; AOUTCH
455,7 → 473,7
; tfr d,x
; jmp ,x ; jump to the BIOS now in local RAM
st7:
00FFE046 08D16D bsr Delay3s ; give some time for devices to reset
00FFE046 08D170 bsr Delay3s ; give some time for devices to reset
00FFE048 07F000810 clr BreakpointFlag
00FFE04B 07F000811 clr NumSetBreakpoints
00FFE04E 0860AA lda #$AA
480,10 → 498,10
00FFE07A 0860CE lda #$0CE
00FFE07C 097113 sta ScreenColor
00FFE07E 097112 sta CharColor
00FFE080 08D1B7 bsr ClearScreen
00FFE082 0CCFFE319 ldd #DisplayChar
00FFE080 08D1BA bsr ClearScreen
00FFE082 0CCFFE31C ldd #DisplayChar
00FFE085 0FD000800 std CharOutVec
00FFE088 0CCFFEC64 ldd #SerialPeekCharDirect
00FFE088 0CCFFEC73 ldd #SerialPeekCharDirect
00FFE08B 0FD000804 std CharInVec
; swi
; fcb MF_OSCALL
492,9 → 510,9
00FFE093 0C1001 cmpb #FIRST_CORE
00FFE095 027011 beq init
00FFE097 0C1020 cmpb #$20 ; CmodA709 core?
00FFE099 02705D beq init2
00FFE09B 02006D bra skip_init
00FFE09D 0200B4 bra multi_sieve
00FFE099 027060 beq init2
00FFE09B 020070 bra skip_init
00FFE09D 0200B7 bra multi_sieve
st3:
00FFE09F 0860FF lda #$FF
00FFE0A1 0150B7FFFE60001 sta LEDS
503,7 → 521,7
; initialize interrupt controller
; first, zero out all the vectors
init:
00FFE0A8 017000449 lbsr rtc_read ; get clock values
00FFE0A8 017000479 lbsr rtc_read ; get clock values
00FFE0AB 08E000127 ldx #kbdHeadRcv
00FFE0AE 0C6020 ldb #32 ; number of bytes to zero out
init1:
510,57 → 528,58
00FFE0B0 06F800 clr ,x+
00FFE0B2 05A decb
00FFE0B3 026FFB bne init1
00FFE0B5 08E000080 ldx #128 ; register to start at
st1:
00FFE0B5 06F809E3F000 clr PIC,x ; cause code
00FFE0B9 0A7809E3F001 sta PIC+1,x
00FFE0BD 0E7809E3F002 stb PIC+2,x
00FFE0C1 030004 leax 4,x
00FFE0C3 08C000100 cmpx #256
00FFE0C6 025FED blo st1
00FFE0C8 086081 lda #$81 ; make irq edge sensitive
00FFE0CA 0150B7FFFE3F0FD sta PIC+$FD
00FFE0CF 08601F lda #31 ; enable timer interrupt
00FFE0D1 0150B7FFFE3F009 sta PIC+9
00FFE0D6 086040 lda #COLS
00FFE0D8 0150B7FFFE07F00 sta TEXTREG+TEXT_COLS
00FFE0DD 086020 lda #ROWS
00FFE0DF 0150B7FFFE07F01 sta TEXTREG+TEXT_ROWS
00FFE0E4 08D153 bsr ClearScreen
00FFE0E6 08D1C8 bsr HomeCursor
00FFE0E8 08E000000 ldx #0
00FFE0EB 0CC000000 ldd #0
00FFE0EE 017000DFA lbsr ShowSprites
00FFE0F1 0170008CC lbsr KeybdInit
00FFE0F4 0DC124 ldd KeybdID
00FFE0F6 08D336 bsr DispWordAsHex
00FFE0B8 06F809E3F000 clr PIC,x ; cause code
00FFE0BC 0A7809E3F001 sta PIC+1,x
00FFE0C0 0E7809E3F002 stb PIC+2,x
00FFE0C4 030004 leax 4,x
00FFE0C6 08C000100 cmpx #256 ; max reg
00FFE0C9 025FED blo st1
00FFE0CB 0860C1 lda #$C1 ; make irq edge sensitive (bit 7), enable interupt (bit 6), irq (bit 0)
00FFE0CD 0150B7FFFE3F0FD sta PIC+$FD
00FFE0D2 086041 lda #$41 ; level sensitive, enabled, irq
00FFE0D4 0150B7FFFE3F0D1 sta PIC+$D1 ; serial irq is #20
00FFE0D9 086040 lda #COLS
00FFE0DB 0150B7FFFE07F00 sta TEXTREG+TEXT_COLS
00FFE0E0 086020 lda #ROWS
00FFE0E2 0150B7FFFE07F01 sta TEXTREG+TEXT_ROWS
00FFE0E7 08D153 bsr ClearScreen
00FFE0E9 08D1C8 bsr HomeCursor
00FFE0EB 08E000000 ldx #0
00FFE0EE 0CC000000 ldd #0
00FFE0F1 0170010DF lbsr ShowSprites
00FFE0F4 0170008C9 lbsr KeybdInit
00FFE0F7 0DC124 ldd KeybdID
00FFE0F9 08D336 bsr DispWordAsHex
init2:
00FFE0F8 01700036A lbsr TimerInit
00FFE0FB 017000AF1 lbsr InitSerial
00FFE0FE 08E000080 ldx #128
00FFE101 086001 lda #1 ; set irq(bit0), clear firq (bit1), disable int (bit 6), clear edge sense(bit 7)
00FFE103 0C6001 ldb #FIRST_CORE ; serving core id
00FFE0FB 01700036A lbsr TimerInit
00FFE0FE 017000AEE lbsr InitSerial
00FFE101 08E000080 ldx #128
00FFE104 086001 lda #1 ; set irq(bit0), clear firq (bit1), disable int (bit 6), clear edge sense(bit 7)
00FFE106 0C6001 ldb #FIRST_CORE ; serving core id
; lda #4 ; make the timer interrupt edge sensitive
; sta PIC+4 ; reg #4 is the edge sensitivity setting
; sta PIC ; reg #0 is interrupt enable
00FFE105 0C6001 ldb #1
00FFE107 0F7EF1000 stb OUTSEMA+SEMAABS ; set semaphore to 1 available slot
00FFE108 0C6001 ldb #1
00FFE10A 0F7EF1000 stb OUTSEMA+SEMAABS ; set semaphore to 1 available slot
skip_init:
00FFE10A 01C0EF andcc #$EF ; unmask irq
00FFE10C 086005 lda #5
00FFE10E 0150B7FFFE60001 sta LEDS
00FFE113 0CCFFE11C ldd #msgStartup
00FFE116 08D2C2 bsr DisplayString
00FFE10D 01C0EF andcc #$EF ; unmask irq
00FFE10F 086005 lda #5
00FFE111 0150B7FFFE60001 sta LEDS
00FFE116 0CCFFE11F ldd #msgStartup
00FFE119 08D2C2 bsr DisplayString
st10:
00FFE118 03F swi
00FFE119 000 fcb MF_Monitor
00FFE11A 020FFC bra st10
00FFE11B 03F swi
00FFE11C 000 fcb MF_Monitor
00FFE11D 020FFC bra st10
msgStartup
00FFE11C 072066036038030039020 fcb "rf6809 12-bit System Starting.",CR,LF,0
00FFE123 03103202D062069074020
00FFE12A 05307907307406506D020
00FFE131 05307406107207406906E
00FFE138 06702E00D00A000
00FFE11F 072066036038030039020 fcb "rf6809 12-bit System Starting.",CR,LF,0
00FFE126 03103202D062069074020
00FFE12D 05307907307406506D020
00FFE134 05307406107207406906E
00FFE13B 06702E00D00A000
;------------------------------------------------------------------------------
; The checkpoint register must be cleared within 1 second or a NMI interrupt
572,8 → 591,8
;------------------------------------------------------------------------------
checkpoint:
00FFE13D 01507FFFFFFFFE1 clr $FFFFFFFE1 ; writing any value will do
00FFE142 039 rts
00FFE140 01507FFFFFFFFE1 clr $FFFFFFFE1 ; writing any value will do
00FFE145 039 rts
;------------------------------------------------------------------------------
; Copy the system ROM to local RAM
586,14 → 605,14
;------------------------------------------------------------------------------
romToRam:
00FFE143 08EFFC000 ldx #$FFC000
00FFE146 18E00C000 ldy #$00C000
00FFE146 08EFFC000 ldx #$FFC000
00FFE149 18E00C000 ldy #$00C000
romToRam1:
00FFE149 0EC801 ldd ,x++
00FFE14B 0EDA01 std ,y++
00FFE14D 08C000000 cmpx #0
00FFE150 026FF7 bne romToRam1
00FFE152 039 rts
00FFE14C 0EC801 ldd ,x++
00FFE14E 0EDA01 std ,y++
00FFE150 08C000000 cmpx #0
00FFE153 026FF7 bne romToRam1
00FFE155 039 rts
;------------------------------------------------------------------------------
; Multi-core sieve program.
604,36 → 623,36
; core number minus two.
;
multi_sieve:
00FFE153 086050 lda #'P' ; indicate prime
00FFE155 0150F6FFFFFFFE0 ldb COREID ; find out which core we are
00FFE15A 0C0001 subb #FIRST_CORE
00FFE15C 08E000000 ldx #0 ; start at first char of screen
00FFE15F 03A abx
00FFE156 086050 lda #'P' ; indicate prime
00FFE158 0150F6FFFFFFFE0 ldb COREID ; find out which core we are
00FFE15D 0C0001 subb #FIRST_CORE
00FFE15F 08E000000 ldx #0 ; start at first char of screen
00FFE162 03A abx
multi_sieve3:
00FFE160 0A7809E00000 sta TEXTSCR,x ; store 'P'
00FFE164 030008 leax 8,x ; advance to next position
00FFE166 08C000FFF cmpx #4095
00FFE169 025FF5 blo multi_sieve3
00FFE16B 0BDFFE13D jsr checkpoint
00FFE163 0A7809E00000 sta TEXTSCR,x ; store 'P'
00FFE167 030008 leax 8,x ; advance to next position
00FFE169 08C000FFF cmpx #4095
00FFE16C 025FF5 blo multi_sieve3
00FFE16E 0BDFFE140 jsr checkpoint
*** warning 1: Long branch within short branch range could be optimized
00FFE16E 0CB002 addb #2 ; start sieve at 2 (core id)
00FFE170 08604E lda #'N' ; flag position value of 'N' for non-prime
00FFE171 0CB002 addb #2 ; start sieve at 2 (core id)
00FFE173 08604E lda #'N' ; flag position value of 'N' for non-prime
multi_sieve2:
00FFE172 08E000000 ldx #0
00FFE175 03A abx ; skip the first position - might be prime
00FFE175 08E000000 ldx #0
00FFE178 03A abx ; skip the first position - might be prime
multi_sieve1:
00FFE176 03A abx ; increment
00FFE177 0A7809E00000 sta TEXTSCR,x
00FFE17B 08C000FFF cmpx #4095
00FFE17E 025FF6 blo multi_sieve1
00FFE180 0BDFFE13D jsr checkpoint
00FFE179 03A abx ; increment
00FFE17A 0A7809E00000 sta TEXTSCR,x
00FFE17E 08C000FFF cmpx #4095
00FFE181 025FF6 blo multi_sieve1
00FFE183 0BDFFE140 jsr checkpoint
*** warning 1: Long branch within short branch range could be optimized
00FFE183 0CB008 addb #8 ; number of cores working on it
00FFE185 0C1FF0 cmpb #4080
00FFE187 025FE9 blo multi_sieve2
00FFE186 0CB008 addb #8 ; number of cores working on it
00FFE188 0C1FF0 cmpb #4080
00FFE18A 025FE9 blo multi_sieve2
multi_sieve4: ; hang machine
00FFE189 013 sync
00FFE18A 016000EAC lbra Monitor
00FFE18C 013 sync
00FFE18D 0160011CC lbra Monitor
;------------------------------------------------------------------------------
; Single core sieve.
640,28 → 659,28
;------------------------------------------------------------------------------
sieve:
00FFE18D 086050 lda #'P' ; indicate prime
00FFE18F 08E000000 ldx #0 ; start at first char of screen
00FFE190 086050 lda #'P' ; indicate prime
00FFE192 08E000000 ldx #0 ; start at first char of screen
sieve3:
00FFE192 0A7809E00000 sta TEXTSCR,x ; store 'P'
00FFE196 030001 inx ; advance to next position
00FFE198 08C000FFF cmpx #4095
00FFE19B 025FF5 blo sieve3
00FFE19D 0C6002 ldb #2 ; start sieve at 2
00FFE19F 08604E lda #'N' ; flag position value of 'N' for non-prime
00FFE195 0A7809E00000 sta TEXTSCR,x ; store 'P'
00FFE199 030001 inx ; advance to next position
00FFE19B 08C000FFF cmpx #4095
00FFE19E 025FF5 blo sieve3
00FFE1A0 0C6002 ldb #2 ; start sieve at 2
00FFE1A2 08604E lda #'N' ; flag position value of 'N' for non-prime
sieve2:
00FFE1A1 08E000000 ldx #0
00FFE1A4 03A abx ; skip the first position - might be prime
00FFE1A4 08E000000 ldx #0
00FFE1A7 03A abx ; skip the first position - might be prime
sieve1:
00FFE1A5 03A abx ; increment
00FFE1A6 0A7809E00000 sta TEXTSCR,x
00FFE1AA 08C000FFF cmpx #4095
00FFE1AD 025FC7 blo multi_sieve1
00FFE1AF 05C incb ; number of cores working on it
00FFE1B0 0C1FF0 cmpb #4080
00FFE1B2 025FED blo sieve2
00FFE1A8 03A abx ; increment
00FFE1A9 0A7809E00000 sta TEXTSCR,x
00FFE1AD 08C000FFF cmpx #4095
00FFE1B0 025FC7 blo multi_sieve1
00FFE1B2 05C incb ; number of cores working on it
00FFE1B3 0C1FF0 cmpb #4080
00FFE1B5 025FED blo sieve2
sieve4: ; hang machine
00FFE1B4 039 rts
00FFE1B7 039 rts
;------------------------------------------------------------------------------
; Three second delay for user convenience and to allow some devices time to
669,30 → 688,30
;------------------------------------------------------------------------------
Delay3s:
00FFE1B5 0CC895440 ldd #9000000
00FFE1B8 0CC895440 ldd #9000000
dly3s1:
00FFE1B8 0C10FF cmpb #$FF
00FFE1BA 026000 bne dly3s2
00FFE1BB 0C10FF cmpb #$FF
00FFE1BD 026000 bne dly3s2
dly3s2:
00FFE1BC 0150B7FFFE60001 sta LEDS
00FFE1C1 083000001 subd #1
00FFE1C4 026FF2 bne dly3s1
00FFE1C6 039 rts
00FFE1BF 0150B7FFFE60001 sta LEDS
00FFE1C4 083000001 subd #1
00FFE1C7 026FF2 bne dly3s1
00FFE1C9 039 rts
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
ShiftLeft5:
00FFE1C7 058 aslb
00FFE1C8 049 rola
00FFE1C9 058 aslb
00FFE1CA 049 rola
00FFE1CB 058 aslb
00FFE1CC 049 rola
00FFE1CD 058 aslb
00FFE1CE 049 rola
00FFE1CF 058 aslb
00FFE1D0 049 rola
00FFE1D1 039 rts
00FFE1CA 058 aslb
00FFE1CB 049 rola
00FFE1CC 058 aslb
00FFE1CD 049 rola
00FFE1CE 058 aslb
00FFE1CF 049 rola
00FFE1D0 058 aslb
00FFE1D1 049 rola
00FFE1D2 058 aslb
00FFE1D3 049 rola
00FFE1D4 039 rts
;------------------------------------------------------------------------------
; Parameters:
700,74 → 719,74
;------------------------------------------------------------------------------
;
CopyVirtualScreenToScreen:
00FFE1D2 034076 pshs d,x,y,u
00FFE1D5 034076 pshs d,x,y,u
; Compute virtual screen location for core passed in accb.
00FFE1D4 01F098 tfr b,a
00FFE1D6 048 asla
00FFE1D7 048 asla
00FFE1D8 048 asla
00FFE1D7 01F098 tfr b,a
00FFE1D9 048 asla
00FFE1DA 08AC00 ora #$C00
00FFE1DC 05F clrb
00FFE1DD 01F001 tfr d,x
00FFE1DF 034006 pshs d
00FFE1E1 18EE00000 ldy #TEXTSCR
00FFE1E4 0CE000400 ldu #COLS*ROWS/2
00FFE1DA 048 asla
00FFE1DB 048 asla
00FFE1DC 048 asla
00FFE1DD 08AC00 ora #$C00
00FFE1DF 05F clrb
00FFE1E0 01F001 tfr d,x
00FFE1E2 034006 pshs d
00FFE1E4 18EE00000 ldy #TEXTSCR
00FFE1E7 0CE000400 ldu #COLS*ROWS/2
cv2s1:
00FFE1E7 0EC801 ldd ,x++
00FFE1E9 0EDA01 std ,y++
00FFE1EB 0335FF leau -1,u
00FFE1ED 283000000 cmpu #0
00FFE1F0 026FF5 bne cv2s1
00FFE1EA 0EC801 ldd ,x++
00FFE1EC 0EDA01 std ,y++
00FFE1EE 0335FF leau -1,u
00FFE1F0 283000000 cmpu #0
00FFE1F3 026FF5 bne cv2s1
; reset the cursor position in the text controller
00FFE1F2 035010 puls x
00FFE1F4 0E6808110 ldb CursorRow,x
00FFE1F7 086040 lda #COLS
00FFE1F9 03D mul
00FFE1FA 01F002 tfr d,y
00FFE1FC 0E6808111 ldb CursorCol,x
00FFE1FF 01F021 tfr y,x
00FFE201 03A abx
00FFE202 0150BFFFFE07F22 stx TEXTREG+TEXT_CURPOS
00FFE207 0350F6 puls d,x,y,u,pc
00FFE1F5 035010 puls x
00FFE1F7 0E6808110 ldb CursorRow,x
00FFE1FA 086040 lda #COLS
00FFE1FC 03D mul
00FFE1FD 01F002 tfr d,y
00FFE1FF 0E6808111 ldb CursorCol,x
00FFE202 01F021 tfr y,x
00FFE204 03A abx
00FFE205 0150BFFFFE07F22 stx TEXTREG+TEXT_CURPOS
00FFE20A 0350F6 puls d,x,y,u,pc
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
;
CopyScreenToVirtualScreen:
00FFE209 034076 pshs d,x,y,u
00FFE20B 08D08D bsr GetScreenLocation
00FFE20D 01F002 tfr d,y
00FFE20F 08EE00000 ldx #TEXTSCR
00FFE212 0CE000400 ldu #COLS*ROWS/2
00FFE20C 034076 pshs d,x,y,u
00FFE20E 08D08D bsr GetScreenLocation
00FFE210 01F002 tfr d,y
00FFE212 08EE00000 ldx #TEXTSCR
00FFE215 0CE000400 ldu #COLS*ROWS/2
cs2v1:
00FFE215 0EC801 ldd ,x++
00FFE217 0EDA01 std ,y++
00FFE219 0335FF leau -1,u
00FFE21B 283000000 cmpu #0
00FFE21E 026FF5 bne cs2v1
00FFE220 0350F6 puls d,x,y,u,pc
00FFE218 0EC801 ldd ,x++
00FFE21A 0EDA01 std ,y++
00FFE21C 0335FF leau -1,u
00FFE21E 283000000 cmpu #0
00FFE221 026FF5 bne cs2v1
00FFE223 0350F6 puls d,x,y,u,pc
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
00FFE222 054045058054053043052 fcb "TEXTSCR "
00FFE229 020
00FFE22A FFE234 fcw TextOpen
00FFE22C FFE235 fcw TextClose
00FFE22E FFE236 fcw TextRead
00FFE230 FFE237 fcw TextWrite
00FFE232 FFE238 fcw TextSeek
00FFE225 054045058054053043052 fcb "TEXTSCR "
00FFE22C 020
00FFE22D FFE237 fcw TextOpen
00FFE22F FFE238 fcw TextClose
00FFE231 FFE239 fcw TextRead
00FFE233 FFE23A fcw TextWrite
00FFE235 FFE23B fcw TextSeek
TextOpen:
00FFE234 039 rts
00FFE237 039 rts
TextClose:
00FFE235 039 rts
00FFE238 039 rts
TextRead:
00FFE236 039 rts
00FFE239 039 rts
TextWrite:
00FFE237 039 rts
00FFE23A 039 rts
TextSeek:
00FFE238 039 rts
00FFE23B 039 rts
;------------------------------------------------------------------------------
; Clear the screen and the screen color memory
779,29 → 798,29
;------------------------------------------------------------------------------
ClearScreen:
00FFE239 034076 pshs d,x,y,u
00FFE23B 08E000800 ldx #COLS*ROWS
00FFE23E 01F013 tfr x,u
00FFE240 08D058 bsr GetScreenLocation
00FFE242 01F002 tfr d,y
00FFE244 0C6020 ldb #' ' ; space char
00FFE23C 034076 pshs d,x,y,u
00FFE23E 08E000800 ldx #COLS*ROWS
00FFE241 01F013 tfr x,u
00FFE243 08D058 bsr GetScreenLocation
00FFE245 01F002 tfr d,y
00FFE247 0C6020 ldb #' ' ; space char
cs1:
00FFE246 0E7A00 stb ,y+ ; set text to space
00FFE248 0301FF leax -1,x ; decrement x
00FFE24A 026FFA bne cs1
00FFE24C 0150F6FFFFFFFE0 ldb COREID ; update colors only if we have focus
00FFE251 0F1FFC010 cmpb IOFocusID
00FFE254 02000D bra cs3
00FFE256 18EE02000 ldy #TEXTSCR+$2000
00FFE249 0E7A00 stb ,y+ ; set text to space
00FFE24B 0301FF leax -1,x ; decrement x
00FFE24D 026FFA bne cs1
00FFE24F 0150F6FFFFFFFE0 ldb COREID ; update colors only if we have focus
00FFE254 0F1FFC010 cmpb IOFocusID
00FFE257 02000D bra cs3
00FFE259 18EE02000 ldy #TEXTSCR+$2000
; lda CharColor
00FFE259 0860CE lda #$0CE
00FFE25B 01F031 tfr u,x ; get back count
00FFE25C 0860CE lda #$0CE
00FFE25E 01F031 tfr u,x ; get back count
cs2:
00FFE25D 0A7A00 sta ,y+
00FFE25F 0301FF dex ; decrement x
00FFE261 026FFA bne cs2
00FFE260 0A7A00 sta ,y+
00FFE262 0301FF dex ; decrement x
00FFE264 026FFA bne cs2
cs3:
00FFE263 0350F6 puls d,x,y,u,pc
00FFE266 0350F6 puls d,x,y,u,pc
;------------------------------------------------------------------------------
; Scroll text on the screen upwards
811,20 → 830,20
;------------------------------------------------------------------------------
ScrollUp:
00FFE265 034076 pshs d,x,y,u
00FFE267 18E0003FF ldy #(COLS*ROWS-1)/2 ; y = num chars/2 to move
00FFE26A 08D02E bsr GetScreenLocation
00FFE26C 01F001 tfr d,x
00FFE26E 01F003 tfr d,u
00FFE270 030040 leax COLS,x ; x = index to source row
00FFE268 034076 pshs d,x,y,u
00FFE26A 18E0003FF ldy #(COLS*ROWS-1)/2 ; y = num chars/2 to move
00FFE26D 08D02E bsr GetScreenLocation
00FFE26F 01F001 tfr d,x
00FFE271 01F003 tfr d,u
00FFE273 030040 leax COLS,x ; x = index to source row
scrup1:
00FFE272 0EC801 ldd ,x++ ; move 2 characters
00FFE274 0EDC01 std ,u++
00FFE276 0313FF dey
00FFE278 026FF8 bne scrup1
00FFE27A 08601F lda #ROWS-1
00FFE27C 08D002 bsr BlankLine
00FFE27E 0350F6 puls d,x,y,u,pc
00FFE275 0EC801 ldd ,x++ ; move 2 characters
00FFE277 0EDC01 std ,u++
00FFE279 0313FF dey
00FFE27B 026FF8 bne scrup1
00FFE27D 08601F lda #ROWS-1
00FFE27F 08D002 bsr BlankLine
00FFE281 0350F6 puls d,x,y,u,pc
;------------------------------------------------------------------------------
; Blank out a line on the display
836,21 → 855,21
;------------------------------------------------------------------------------
BlankLine:
00FFE280 034016 pshs d,x
00FFE282 034002 pshs a
00FFE284 08D014 bsr GetScreenLocation
00FFE286 01F001 tfr d,x
00FFE288 035002 puls a
00FFE28A 0C6040 ldb #COLS ; b = # chars to blank out from video controller
00FFE28C 03D mul ; d = screen index (row# * #cols)
00FFE28D 03080B leax d,x
00FFE28F 086020 lda #' '
00FFE291 0C6040 ldb #COLS ; b = # chars to blank out from video controller
00FFE283 034016 pshs d,x
00FFE285 034002 pshs a
00FFE287 08D014 bsr GetScreenLocation
00FFE289 01F001 tfr d,x
00FFE28B 035002 puls a
00FFE28D 0C6040 ldb #COLS ; b = # chars to blank out from video controller
00FFE28F 03D mul ; d = screen index (row# * #cols)
00FFE290 03080B leax d,x
00FFE292 086020 lda #' '
00FFE294 0C6040 ldb #COLS ; b = # chars to blank out from video controller
blnkln1:
00FFE293 0A7800 sta ,x+
00FFE295 05A decb
00FFE296 026FFB bne blnkln1
00FFE298 035096 puls d,x,pc
00FFE296 0A7800 sta ,x+
00FFE298 05A decb
00FFE299 026FFB bne blnkln1
00FFE29B 035096 puls d,x,pc
;------------------------------------------------------------------------------
; Get the location of the screen memory. The location
863,16 → 882,16
;------------------------------------------------------------------------------
GetScreenLocation:
00FFE29A 0150B6FFFFFFFE0 lda COREID ; which core are we?
00FFE29F 0B1FFC010 cmpa IOFocusID ; do we have the IO focus
00FFE2A2 026008 bne gsl1 ; no, go pick virtual screen address
00FFE2A4 081020 cmpa #$20 ; CmodA709?
00FFE2A6 027004 beq gsl1
00FFE2A8 0CCE00000 ldd #TEXTSCR ; yes, we update the real screen
00FFE2AB 039 rts
00FFE29D 0150B6FFFFFFFE0 lda COREID ; which core are we?
00FFE2A2 0B1FFC010 cmpa IOFocusID ; do we have the IO focus
00FFE2A5 026008 bne gsl1 ; no, go pick virtual screen address
00FFE2A7 081020 cmpa #$20 ; CmodA709?
00FFE2A9 027004 beq gsl1
00FFE2AB 0CCE00000 ldd #TEXTSCR ; yes, we update the real screen
00FFE2AE 039 rts
gsl1:
00FFE2AC 0CC007800 ldd #$7800
00FFE2AF 039 rts
00FFE2AF 0CC007800 ldd #$7800
00FFE2B2 039 rts
;------------------------------------------------------------------------------
; HomeCursor
883,18 → 902,18
;------------------------------------------------------------------------------
HomeCursor:
00FFE2B0 034016 pshs d,x
00FFE2B2 00F110 clr CursorRow
00FFE2B4 00F111 clr CursorCol
00FFE2B6 0150F6FFFFFFFE0 ldb COREID
00FFE2BB 0F1FFC010 cmpb IOFocusID
00FFE2BE 02600A bne hc1
00FFE2C0 0C1020 cmpb #$20
00FFE2C2 027006 beq hc1
00FFE2C4 04F clra
00FFE2C5 0150B7FFFE07F22 sta TEXTREG+TEXT_CURPOS
00FFE2B3 034016 pshs d,x
00FFE2B5 00F110 clr CursorRow
00FFE2B7 00F111 clr CursorCol
00FFE2B9 0150F6FFFFFFFE0 ldb COREID
00FFE2BE 0F1FFC010 cmpb IOFocusID
00FFE2C1 02600A bne hc1
00FFE2C3 0C1020 cmpb #$20
00FFE2C5 027006 beq hc1
00FFE2C7 04F clra
00FFE2C8 0150B7FFFE07F22 sta TEXTREG+TEXT_CURPOS
hc1:
00FFE2CA 035096 puls d,x,pc
00FFE2CD 035096 puls d,x,pc
;------------------------------------------------------------------------------
; Update the cursor position in the text controller based on the
905,22 → 924,22
;------------------------------------------------------------------------------
;
UpdateCursorPos:
00FFE2CC 034016 pshs d,x
00FFE2CE 0150F6FFFFFFFE0 ldb COREID ; update cursor position in text controller
00FFE2D3 0F1FFC010 cmpb IOFocusID ; only for the task with the output focus
00FFE2D6 026018 bne ucp1
00FFE2D8 0C1020 cmpb #$20 ; and not for CmodA709
00FFE2DA 027014 beq ucp1
00FFE2DC 096110 lda CursorRow
00FFE2DE 08403F anda #$3F ; limit of 63 rows
00FFE2E0 0150F6FFFE07F00 ldb TEXTREG+TEXT_COLS
00FFE2E5 03D mul
00FFE2E6 01F001 tfr d,x
00FFE2E8 0D6111 ldb CursorCol
00FFE2EA 03A abx
00FFE2EB 0150BFFFFE07F22 stx TEXTREG+TEXT_CURPOS
00FFE2CF 034016 pshs d,x
00FFE2D1 0150F6FFFFFFFE0 ldb COREID ; update cursor position in text controller
00FFE2D6 0F1FFC010 cmpb IOFocusID ; only for the task with the output focus
00FFE2D9 026018 bne ucp1
00FFE2DB 0C1020 cmpb #$20 ; and not for CmodA709
00FFE2DD 027014 beq ucp1
00FFE2DF 096110 lda CursorRow
00FFE2E1 08403F anda #$3F ; limit of 63 rows
00FFE2E3 0150F6FFFE07F00 ldb TEXTREG+TEXT_COLS
00FFE2E8 03D mul
00FFE2E9 01F001 tfr d,x
00FFE2EB 0D6111 ldb CursorCol
00FFE2ED 03A abx
00FFE2EE 0150BFFFFE07F22 stx TEXTREG+TEXT_CURPOS
ucp1:
00FFE2F0 035096 puls d,x,pc
00FFE2F3 035096 puls d,x,pc
;------------------------------------------------------------------------------
; Calculate screen memory location from CursorRow,CursorCol.
933,24 → 952,24
;------------------------------------------------------------------------------
;
CalcScreenLoc:
00FFE2F2 034010 pshs x
00FFE2F4 096110 lda CursorRow
00FFE2F6 0C6040 ldb #COLS
00FFE2F8 03D mul
00FFE2F9 01F001 tfr d,x
00FFE2FB 0D6111 ldb CursorCol
00FFE2FD 03A abx
00FFE2FE 0150F6FFFFFFFE0 ldb COREID ; update cursor position in text controller
00FFE303 0F1FFC010 cmpb IOFocusID ; only for the task with the output focus
00FFE306 026009 bne csl1
00FFE308 0C1020 cmpb #$20
00FFE30A 027005 beq csl1
00FFE30C 0150BFFFFE07F22 stx TEXTREG+TEXT_CURPOS
00FFE2F5 034010 pshs x
00FFE2F7 096110 lda CursorRow
00FFE2F9 0C6040 ldb #COLS
00FFE2FB 03D mul
00FFE2FC 01F001 tfr d,x
00FFE2FE 0D6111 ldb CursorCol
00FFE300 03A abx
00FFE301 0150F6FFFFFFFE0 ldb COREID ; update cursor position in text controller
00FFE306 0F1FFC010 cmpb IOFocusID ; only for the task with the output focus
00FFE309 026009 bne csl1
00FFE30B 0C1020 cmpb #$20
00FFE30D 027005 beq csl1
00FFE30F 0150BFFFFE07F22 stx TEXTREG+TEXT_CURPOS
csl1:
00FFE311 08DF87 bsr GetScreenLocation
00FFE313 03080B leax d,x
00FFE315 01F010 tfr x,d
00FFE317 035090 puls x,pc
00FFE314 08DF87 bsr GetScreenLocation
00FFE316 03080B leax d,x
00FFE318 01F010 tfr x,d
00FFE31A 035090 puls x,pc
;------------------------------------------------------------------------------
; Display a character on the screen.
964,104 → 983,105
;------------------------------------------------------------------------------
;
DisplayChar:
00FFE319 01700096C lbsr SerialPutChar
00FFE31C 034016 pshs d,x
00FFE31E 0C100D cmpb #CR ; carriage return ?
00FFE320 026007 bne dccr
00FFE322 00F111 clr CursorCol ; just set cursor column to zero on a CR
00FFE324 08DFA6 bsr UpdateCursorPos
00FFE31C 01700097B lbsr SerialPutChar
ScreenDisplayChar:
00FFE31F 034016 pshs d,x
00FFE321 0C100D cmpb #CR ; carriage return ?
00FFE323 026007 bne dccr
00FFE325 00F111 clr CursorCol ; just set cursor column to zero on a CR
00FFE327 08DFA6 bsr UpdateCursorPos
dcx14:
00FFE326 01600008C lbra dcx4
00FFE329 01600008C lbra dcx4
dccr:
00FFE329 0C1091 cmpb #$91 ; cursor right ?
00FFE32B 02600D bne dcx6
00FFE32D 096111 lda CursorCol
00FFE32F 081040 cmpa #COLS
00FFE331 024003 bhs dcx7
00FFE333 04C inca
00FFE334 097111 sta CursorCol
00FFE32C 0C1091 cmpb #$91 ; cursor right ?
00FFE32E 02600D bne dcx6
00FFE330 096111 lda CursorCol
00FFE332 081040 cmpa #COLS
00FFE334 024003 bhs dcx7
00FFE336 04C inca
00FFE337 097111 sta CursorCol
dcx7:
00FFE336 08DF94 bsr UpdateCursorPos
00FFE338 035096 puls d,x,pc
00FFE339 08DF94 bsr UpdateCursorPos
00FFE33B 035096 puls d,x,pc
dcx6:
00FFE33A 0C1090 cmpb #$90 ; cursor up ?
00FFE33C 026009 bne dcx8
00FFE33E 096110 lda CursorRow
00FFE340 027FF4 beq dcx7
00FFE342 04A deca
00FFE343 097110 sta CursorRow
00FFE345 020FEF bra dcx7
00FFE33D 0C1090 cmpb #$90 ; cursor up ?
00FFE33F 026009 bne dcx8
00FFE341 096110 lda CursorRow
00FFE343 027FF4 beq dcx7
00FFE345 04A deca
00FFE346 097110 sta CursorRow
00FFE348 020FEF bra dcx7
dcx8:
00FFE347 0C1093 cmpb #$93 ; cursor left ?
00FFE349 026009 bne dcx9
00FFE34B 096111 lda CursorCol
00FFE34D 027FE7 beq dcx7
00FFE34F 04A deca
00FFE350 097111 sta CursorCol
00FFE352 020FE2 bra dcx7
00FFE34A 0C1093 cmpb #$93 ; cursor left ?
00FFE34C 026009 bne dcx9
00FFE34E 096111 lda CursorCol
00FFE350 027FE7 beq dcx7
00FFE352 04A deca
00FFE353 097111 sta CursorCol
00FFE355 020FE2 bra dcx7
dcx9:
00FFE354 0C1092 cmpb #$92 ; cursor down ?
00FFE356 02600B bne dcx10
00FFE358 096110 lda CursorRow
00FFE35A 081020 cmpa #ROWS
00FFE35C 027FD8 beq dcx7
00FFE35E 04C inca
00FFE35F 097110 sta CursorRow
00FFE361 020FD3 bra dcx7
00FFE357 0C1092 cmpb #$92 ; cursor down ?
00FFE359 02600B bne dcx10
00FFE35B 096110 lda CursorRow
00FFE35D 081020 cmpa #ROWS
00FFE35F 027FD8 beq dcx7
00FFE361 04C inca
00FFE362 097110 sta CursorRow
00FFE364 020FD3 bra dcx7
dcx10:
00FFE363 0C1094 cmpb #$94 ; cursor home ?
00FFE365 02600C bne dcx11
00FFE367 096111 lda CursorCol
00FFE369 027004 beq dcx12
00FFE36B 00F111 clr CursorCol
00FFE36D 020FC7 bra dcx7
00FFE366 0C1094 cmpb #$94 ; cursor home ?
00FFE368 02600C bne dcx11
00FFE36A 096111 lda CursorCol
00FFE36C 027004 beq dcx12
00FFE36E 00F111 clr CursorCol
00FFE370 020FC7 bra dcx7
dcx12:
00FFE36F 00F110 clr CursorRow
00FFE371 020FC3 bra dcx7
00FFE372 00F110 clr CursorRow
00FFE374 020FC3 bra dcx7
dcx11:
00FFE373 0C1099 cmpb #$99 ; delete ?
00FFE375 026008 bne dcx13
00FFE377 08DF79 bsr CalcScreenLoc
00FFE379 01F001 tfr d,x
00FFE37B 096111 lda CursorCol ; acc = cursor column
00FFE37D 020011 bra dcx5
00FFE376 0C1099 cmpb #$99 ; delete ?
00FFE378 026008 bne dcx13
00FFE37A 08DF79 bsr CalcScreenLoc
00FFE37C 01F001 tfr d,x
00FFE37E 096111 lda CursorCol ; acc = cursor column
00FFE380 020011 bra dcx5
dcx13
00FFE37F 0C1008 cmpb #CTRLH ; backspace ?
00FFE381 02601E bne dcx3
00FFE383 096111 lda CursorCol
00FFE385 02702E beq dcx4
00FFE387 04A deca
00FFE388 097111 sta CursorCol
00FFE38A 08DF66 bsr CalcScreenLoc
00FFE38C 01F001 tfr d,x
00FFE38E 096111 lda CursorCol
00FFE382 0C1008 cmpb #CTRLH ; backspace ?
00FFE384 02601E bne dcx3
00FFE386 096111 lda CursorCol
00FFE388 02702E beq dcx4
00FFE38A 04A deca
00FFE38B 097111 sta CursorCol
00FFE38D 08DF66 bsr CalcScreenLoc
00FFE38F 01F001 tfr d,x
00FFE391 096111 lda CursorCol
dcx5:
00FFE390 0E6001 ldb 1,x
00FFE392 0E7801 stb ,x++
00FFE394 04C inca
00FFE395 081040 cmpa #COLS
00FFE397 025FF7 blo dcx5
00FFE399 0C6020 ldb #' '
00FFE39B 0301FF dex
00FFE39D 0E7804 stb ,x
00FFE39F 020014 bra dcx4
00FFE393 0E6001 ldb 1,x
00FFE395 0E7801 stb ,x++
00FFE397 04C inca
00FFE398 081040 cmpa #COLS
00FFE39A 025FF7 blo dcx5
00FFE39C 0C6020 ldb #' '
00FFE39E 0301FF dex
00FFE3A0 0E7804 stb ,x
00FFE3A2 020014 bra dcx4
dcx3:
00FFE3A1 0C100A cmpb #LF ; linefeed ?
00FFE3A3 02700E beq dclf
00FFE3A5 034004 pshs b
00FFE3A7 08DF49 bsr CalcScreenLoc
00FFE3A9 01F001 tfr d,x
00FFE3AB 035004 puls b
00FFE3AD 0E7804 stb ,x
00FFE3A4 0C100A cmpb #LF ; linefeed ?
00FFE3A6 02700E beq dclf
00FFE3A8 034004 pshs b
00FFE3AA 08DF49 bsr CalcScreenLoc
00FFE3AC 01F001 tfr d,x
00FFE3AE 035004 puls b
00FFE3B0 0E7804 stb ,x
; ToDo character color
; lda CharColor
; sta $2000,x
00FFE3AF 08D006 bsr IncCursorPos
00FFE3B1 020002 bra dcx4
00FFE3B2 08D006 bsr IncCursorPos
00FFE3B4 020002 bra dcx4
dclf:
00FFE3B3 08D011 bsr IncCursorRow
00FFE3B6 08D011 bsr IncCursorRow
dcx4:
00FFE3B5 035096 puls d,x,pc
00FFE3B8 035096 puls d,x,pc
;------------------------------------------------------------------------------
; Increment the cursor position, scroll the screen if needed.
1071,29 → 1091,29
;------------------------------------------------------------------------------
IncCursorPos:
00FFE3B7 034016 pshs d,x
00FFE3B9 096111 lda CursorCol
00FFE3BB 04C inca
00FFE3BC 097111 sta CursorCol
00FFE3BE 081040 cmpa #COLS
00FFE3C0 025014 blo icc1
00FFE3C2 00F111 clr CursorCol ; column = 0
00FFE3C4 020002 bra icr1
00FFE3BA 034016 pshs d,x
00FFE3BC 096111 lda CursorCol
00FFE3BE 04C inca
00FFE3BF 097111 sta CursorCol
00FFE3C1 081040 cmpa #COLS
00FFE3C3 025014 blo icc1
00FFE3C5 00F111 clr CursorCol ; column = 0
00FFE3C7 020002 bra icr1
IncCursorRow:
00FFE3C6 034016 pshs d,x
00FFE3C9 034016 pshs d,x
icr1:
00FFE3C8 096110 lda CursorRow
00FFE3CA 04C inca
00FFE3CB 097110 sta CursorRow
00FFE3CD 081020 cmpa #ROWS
00FFE3CF 025005 blo icc1
00FFE3D1 04A deca ; backup the cursor row, we are scrolling up
00FFE3D2 097110 sta CursorRow
00FFE3D4 08DE8F bsr ScrollUp
00FFE3CB 096110 lda CursorRow
00FFE3CD 04C inca
00FFE3CE 097110 sta CursorRow
00FFE3D0 081020 cmpa #ROWS
00FFE3D2 025005 blo icc1
00FFE3D4 04A deca ; backup the cursor row, we are scrolling up
00FFE3D5 097110 sta CursorRow
00FFE3D7 08DE8F bsr ScrollUp
icc1:
00FFE3D6 08DEF4 bsr UpdateCursorPos
00FFE3D9 08DEF4 bsr UpdateCursorPos
icc2:
00FFE3D8 035096 puls d,x,pc
00FFE3DB 035096 puls d,x,pc
;------------------------------------------------------------------------------
; Display a string on the screen.
1105,102 → 1125,102
;------------------------------------------------------------------------------
;
DisplayString:
00FFE3DA 034016 pshs d,x
00FFE3DC 01F001 tfr d,x
00FFE3DE 0150B6FFFFFFFE0 lda COREID
00FFE3E3 081020 cmpa #$20
00FFE3E5 027005 beq dspj1B
00FFE3DD 034016 pshs d,x
00FFE3DF 01F001 tfr d,x
00FFE3E1 0150B6FFFFFFFE0 lda COREID
00FFE3E6 081020 cmpa #$20
00FFE3E8 027005 beq dspj1B
dspj2: ; lock semaphore for access
00FFE3E7 0B6EF0001 lda OUTSEMA+1
00FFE3EA 027FFB beq dspj2
00FFE3EA 0B6EF0001 lda OUTSEMA+1
00FFE3ED 027FFB beq dspj2
dspj1B:
00FFE3EC 0E6800 ldb ,x+ ; move string char into acc
00FFE3EE 027005 beq dsretB ; is it end of string ?
00FFE3F0 017000AEE lbsr OUTCH ; display character
00FFE3F3 020FF7 bra dspj1B
00FFE3EF 0E6800 ldb ,x+ ; move string char into acc
00FFE3F1 027005 beq dsretB ; is it end of string ?
00FFE3F3 017000DD3 lbsr OUTCH ; display character
00FFE3F6 020FF7 bra dspj1B
dsretB:
00FFE3F5 07FEF0001 clr OUTSEMA+1 ; unlock semaphore
00FFE3F8 035096 puls d,x,pc
00FFE3F8 07FEF0001 clr OUTSEMA+1 ; unlock semaphore
00FFE3FB 035096 puls d,x,pc
DisplayStringCRLF:
00FFE3FA 034006 pshs d
00FFE3FC 08DFDC bsr DisplayString
00FFE3FE 0C600D ldb #CR
00FFE400 017000ADE lbsr OUTCH
00FFE403 0C600A ldb #LF
00FFE405 017000AD9 lbsr OUTCH
00FFE408 035086 puls d,pc
00FFE3FD 034006 pshs d
00FFE3FF 08DFDC bsr DisplayString
00FFE401 0C600D ldb #CR
00FFE403 017000DC3 lbsr OUTCH
00FFE406 0C600A ldb #LF
00FFE408 017000DBE lbsr OUTCH
00FFE40B 035086 puls d,pc
;
; PRINT CR, LF, STRING
;
PSTRNG
00FFE40A 08D002 BSR PCRLF
00FFE40C 02000D BRA PDATA
00FFE40D 08D002 BSR PCRLF
00FFE40F 02000D BRA PDATA
PCRLF
00FFE40E 034010 PSHS X
00FFE410 08EFFE422 LDX #CRLFST
00FFE413 08D006 BSR PDATA
00FFE415 035010 PULS X
00FFE417 039 RTS
00FFE411 034010 PSHS X
00FFE413 08EFFE425 LDX #CRLFST
00FFE416 08D006 BSR PDATA
00FFE418 035010 PULS X
00FFE41A 039 RTS
PRINT
00FFE418 0BDFFEEE1 JSR OUTCH
00FFE41B 0BDFFF1C9 JSR OUTCH
PDATA
00FFE41B 0E6800 LDB ,X+
00FFE41D 0C1004 CMPB #$04
00FFE41F 026FF7 BNE PRINT
00FFE421 039 RTS
00FFE41E 0E6800 LDB ,X+
00FFE420 0C1004 CMPB #$04
00FFE422 026FF7 BNE PRINT
00FFE424 039 RTS
CRLFST
00FFE422 00D00A004 fcb CR,LF,4
00FFE425 00D00A004 fcb CR,LF,4
DispDWordAsHex:
00FFE425 08D007 bsr DispWordAsHex
00FFE427 01E001 exg d,x
00FFE429 08D003 bsr DispWordAsHex
00FFE42B 01E001 exg d,x
00FFE42D 039 rts
00FFE428 08D007 bsr DispWordAsHex
00FFE42A 01E001 exg d,x
00FFE42C 08D003 bsr DispWordAsHex
00FFE42E 01E001 exg d,x
00FFE430 039 rts
DispWordAsHex:
00FFE42E 01E089 exg a,b
00FFE430 08D005 bsr DispByteAsHex
00FFE432 01E089 exg a,b
00FFE434 08D001 bsr DispByteAsHex
00FFE436 039 rts
00FFE431 01E089 exg a,b
00FFE433 08D005 bsr DispByteAsHex
00FFE435 01E089 exg a,b
00FFE437 08D001 bsr DispByteAsHex
00FFE439 039 rts
DispByteAsHex:
00FFE437 034004 pshs b
00FFE439 054 lsrb
00FFE43A 054 lsrb
00FFE43B 054 lsrb
00FFE43A 034004 pshs b
00FFE43C 054 lsrb
00FFE43D 054 lsrb
00FFE43E 054 lsrb
00FFE43F 054 lsrb
00FFE440 054 lsrb
00FFE441 08D00C bsr DispNyb
00FFE443 035004 puls b
00FFE445 034004 pshs b
00FFE447 054 lsrb
00FFE448 054 lsrb
00FFE449 054 lsrb
00FFE441 054 lsrb
00FFE442 054 lsrb
00FFE443 054 lsrb
00FFE444 08D00C bsr DispNyb
00FFE446 035004 puls b
00FFE448 034004 pshs b
00FFE44A 054 lsrb
00FFE44B 08D002 bsr DispNyb
00FFE44D 035004 puls b
00FFE44B 054 lsrb
00FFE44C 054 lsrb
00FFE44D 054 lsrb
00FFE44E 08D002 bsr DispNyb
00FFE450 035004 puls b
DispNyb
00FFE44F 034004 pshs b
00FFE451 0C400F andb #$0F
00FFE453 0C100A cmpb #10
00FFE455 025007 blo DispNyb1
00FFE457 0CB037 addb #'A'-10
00FFE459 017000A85 lbsr OUTCH
00FFE45C 035084 puls b,pc
00FFE452 034004 pshs b
00FFE454 0C400F andb #$0F
00FFE456 0C100A cmpb #10
00FFE458 025007 blo DispNyb1
00FFE45A 0CB037 addb #'A'-10
00FFE45C 017000D6A lbsr OUTCH
00FFE45F 035084 puls b,pc
DispNyb1
00FFE45E 0CB030 addb #'0'
00FFE460 017000A7E lbsr OUTCH
00FFE463 035084 puls b,pc
00FFE461 0CB030 addb #'0'
00FFE463 017000D63 lbsr OUTCH
00FFE466 035084 puls b,pc
;==============================================================================
; Timer
1232,34 → 1252,50
; ============================================================================
;
TimerInit:
00FFE465 0CC061A80 ldd #$61A80 ; compare to 400000 (100 Hz assuming 40MHz clock)
00FFE468 0150F7FFFE60014 stb VIA+VIA_T3CMPL
00FFE46D 0150B7FFFE60015 sta VIA+VIA_T3CMPH
00FFE472 01507FFFFE60012 clr VIA+VIA_T3LL
00FFE477 01507FFFFE60013 clr VIA+VIA_T3LH
00FFE47C 0150B6FFFE6000B lda VIA+VIA_ACR ; set continuous mode for timer
00FFE481 08A100 ora #$100
00FFE483 0150B7FFFE6000B sta VIA+VIA_ACR ; enable timer #3 interrupts
00FFE488 086810 lda #$810
00FFE48A 0150B7FFFE6000E sta VIA+VIA_IER
00FFE48F 039 rts
00FFE468 0CC061A80 ldd #$61A80 ; compare to 400000 (100 Hz assuming 40MHz clock)
00FFE46B 0150F7FFFE60014 stb VIA+VIA_T3CMPL
00FFE470 0150B7FFFE60015 sta VIA+VIA_T3CMPH
00FFE475 01507FFFFE60012 clr VIA+VIA_T3LL
00FFE47A 01507FFFFE60013 clr VIA+VIA_T3LH
00FFE47F 0150B6FFFE6000B lda VIA+VIA_ACR ; set continuous mode for timer
00FFE484 08A100 ora #$100
00FFE486 0150B7FFFE6000B sta VIA+VIA_ACR
00FFE48B 086880 lda #$880 ; enable timer #3 interrupts
00FFE48D 0150B7FFFE6000E sta VIA+VIA_IER
00FFE492 039 rts
TimerIRQ:
; Reset the edge sense circuit in the PIC
00FFE490 08601F lda #31 ; Timer is IRQ #31
00FFE492 0B7FFC011 sta IrqSource ; stuff a byte indicating the IRQ source for PEEK()
00FFE493 08601F lda #31 ; Timer is IRQ #31
00FFE495 0150B7FFFE3F010 sta PIC+16 ; register 16 is edge sense reset reg
00FFE49A 0150B6FFFE6000D lda VIA+VIA_IFR
00FFE49F 02A011 bpl notTimerIRQ
00FFE4A1 085080 bita #$80 ; timer3 irq is bit 7
00FFE4A3 02700D beq notTimerIRQ
00FFE4A5 01507FFFFE60012 clr VIA+VIA_T3LL
00FFE4AA 01507FFFFE60013 clr VIA+VIA_T3LH
00FFE4AF 07CE00037 inc $E00037 ; update timer IRQ screen flag
00FFE49A 0150B6FFFE3F0FF lda PIC+$FF ; Timer active interrupt flag
00FFE49F 027041 beq notTimerIRQ
00FFE4A1 01507FFFFE3F0FF clr PIC+$FF ; clear the flag
00FFE4A6 08601F lda #31 ; Timer is IRQ #31
00FFE4A8 0B7FFC011 sta IrqSource ; stuff a byte indicating the IRQ source for PEEK()
00FFE4AB 01507FFFFE60012 clr VIA+VIA_T3LL ; should clear the interrupt
00FFE4B0 01507FFFFE60013 clr VIA+VIA_T3LH
00FFE4B5 08601F lda #31 ; Timer is IRQ #31
00FFE4B7 0150B7FFFE3F010 sta PIC+16 ; register 16 is edge sense reset reg
00FFE4BC 01507FFFFE3F0FF clr PIC+$FF ; clear the flag
00FFE4C1 07CE0003F inc $E0003F ; update timer IRQ screen flag
00FFE4C4 0FCFFC016 ldd milliseconds+2
00FFE4C7 0C300000A addd #10
00FFE4CA 0FDFFC016 std milliseconds+2
00FFE4CD 0FCFFC014 ldd milliseconds
00FFE4D0 0C9000 adcb #0
00FFE4D2 0F7FFC015 stb milliseconds+1
00FFE4D5 089000 adca #0
00FFE4D7 0B7FFC014 sta milliseconds
; Update XModem timer, we just always do it rather than testing if XModem
; is active. The increment is set to give approximately 3s before the MSB
; gets set.
00FFE4DA 0F6FFC020 ldb xm_timer
00FFE4DD 0CB004 addb #4
00FFE4DF 0F7FFC020 stb xm_timer
notTimerIRQ:
00FFE4B2 039 rts
00FFE4E2 039 rts
; ============================================================================
; __
1321,11 → 1357,11
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
i2c_init:
00FFE4B3 034004 pshs b
00FFE4B5 0C6004 ldb #4 ; setup prescale for 400kHz clock
00FFE4B7 0E7804 stb I2C_PREL,x
00FFE4B9 06F001 clr I2C_PREH,x
00FFE4BB 035084 puls b,pc
00FFE4E3 034004 pshs b
00FFE4E5 0C6004 ldb #4 ; setup prescale for 400kHz clock
00FFE4E7 0E7804 stb I2C_PREL,x
00FFE4E9 06F001 clr I2C_PREH,x
00FFE4EB 035084 puls b,pc
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; Wait for I2C transfer to complete
1335,12 → 1371,12
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
i2c_wait_tip:
00FFE4BD 034004 pshs b
00FFE4ED 034004 pshs b
i2cw1:
00FFE4BF 0E6004 ldb I2C_STAT,x ; would use lvb, but lb is okay since its the I/O area
00FFE4C1 0C5001 bitb #1 ; wait for tip to clear
00FFE4C3 026FFA bne i2cw1
00FFE4C5 035084 puls b,pc
00FFE4EF 0E6004 ldb I2C_STAT,x ; would use lvb, but lb is okay since its the I/O area
00FFE4F1 0C5001 bitb #1 ; wait for tip to clear
00FFE4F3 026FFA bne i2cw1
00FFE4F5 035084 puls b,pc
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; Write command to i2c
1352,11 → 1388,11
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
i2c_wr_cmd:
00FFE4C7 0E7003 stb I2C_TXR,x
00FFE4C9 0A7004 sta I2C_CMD,x
00FFE4CB 08DFF0 bsr i2c_wait_tip
00FFE4CD 0E6004 ldb I2C_STAT,x
00FFE4CF 039 rts
00FFE4F7 0E7003 stb I2C_TXR,x
00FFE4F9 0A7004 sta I2C_CMD,x
00FFE4FB 08DFF0 bsr i2c_wait_tip
00FFE4FD 0E6004 ldb I2C_STAT,x
00FFE4FF 039 rts
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; Parameters
1367,30 → 1403,30
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
i2c_xmit1:
00FFE4D0 034006 pshs d ; save data value
00FFE4D2 034006 pshs d ; and save it again
00FFE4D4 0C6001 ldb #1
00FFE4D6 0E7002 stb I2C_CTRL,x ; enable the core
00FFE4D8 0C6076 ldb #$76 ; set slave address = %0111011
00FFE4DA 086090 lda #$90 ; set STA, WR
00FFE4DC 08DFE9 bsr i2c_wr_cmd
00FFE4DE 08D00A bsr i2c_wait_rx_nack
00FFE4E0 035006 puls d ; get back data value
00FFE4E2 086050 lda #$50 ; set STO, WR
00FFE4E4 08DFE1 bsr i2c_wr_cmd
00FFE4E6 08D002 bsr i2c_wait_rx_nack
00FFE4E8 035086 puls d,pc
00FFE500 034006 pshs d ; save data value
00FFE502 034006 pshs d ; and save it again
00FFE504 0C6001 ldb #1
00FFE506 0E7002 stb I2C_CTRL,x ; enable the core
00FFE508 0C6076 ldb #$76 ; set slave address = %0111011
00FFE50A 086090 lda #$90 ; set STA, WR
00FFE50C 08DFE9 bsr i2c_wr_cmd
00FFE50E 08D00A bsr i2c_wait_rx_nack
00FFE510 035006 puls d ; get back data value
00FFE512 086050 lda #$50 ; set STO, WR
00FFE514 08DFE1 bsr i2c_wr_cmd
00FFE516 08D002 bsr i2c_wait_rx_nack
00FFE518 035086 puls d,pc
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
i2c_wait_rx_nack:
00FFE4EA 034004 pshs b ; save off accb
00FFE51A 034004 pshs b ; save off accb
i2cwr1:
00FFE4EC 0E6004 ldb I2C_STAT,x ; wait for RXack = 0
00FFE4EE 0C5080 bitb #$80 ; test for nack
00FFE4F0 026FFA bne i2cwr1
00FFE4F2 035084 puls b,pc
00FFE51C 0E6004 ldb I2C_STAT,x ; wait for RXack = 0
00FFE51E 0C5080 bitb #$80 ; test for nack
00FFE520 026FFA bne i2cwr1
00FFE522 035084 puls b,pc
; ============================================================================
; __
1445,50 → 1481,50
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
rtc_read:
00FFE4F4 08EE30500 ldx #RTC
00FFE4F7 18E007FC0 ldy #RTCBuf
00FFE4FA 0C6080 ldb #$80
00FFE4FC 0E7002 stb I2C_CTRL,x ; enable I2C
00FFE4FE 0CC0900DE ldd #$900DE ; read address, write op, STA + wr bit
00FFE501 08DFC4 bsr i2c_wr_cmd
00FFE503 0C5080 bitb #$80
00FFE505 02603C bne rtc_rxerr
00FFE507 0CC010000 ldd #$10000 ; address zero, wr bit
00FFE50A 08DFBB bsr i2c_wr_cmd
00FFE50C 0C5080 bitb #$80
00FFE50E 026033 bne rtc_rxerr
00FFE510 0CC0900DF ldd #$900DF ; read address, read op, STA + wr bit
00FFE513 08DFB2 bsr i2c_wr_cmd
00FFE515 0C5080 bitb #$80
00FFE517 02602A bne rtc_rxerr
00FFE524 08EE30500 ldx #RTC
00FFE527 18E007FC0 ldy #RTCBuf
00FFE52A 0C6080 ldb #$80
00FFE52C 0E7002 stb I2C_CTRL,x ; enable I2C
00FFE52E 0CC0900DE ldd #$900DE ; read address, write op, STA + wr bit
00FFE531 08DFC4 bsr i2c_wr_cmd
00FFE533 0C5080 bitb #$80
00FFE535 02603C bne rtc_rxerr
00FFE537 0CC010000 ldd #$10000 ; address zero, wr bit
00FFE53A 08DFBB bsr i2c_wr_cmd
00FFE53C 0C5080 bitb #$80
00FFE53E 026033 bne rtc_rxerr
00FFE540 0CC0900DF ldd #$900DF ; read address, read op, STA + wr bit
00FFE543 08DFB2 bsr i2c_wr_cmd
00FFE545 0C5080 bitb #$80
00FFE547 02602A bne rtc_rxerr
00FFE519 05F clrb
00FFE549 05F clrb
rtcr0001:
00FFE51A 086020 lda #$20
00FFE51C 0A7004 sta I2C_CMD,x ; rd bit
00FFE51E 08DF9D bsr i2c_wait_tip
00FFE520 08DFC8 bsr i2c_wait_rx_nack
00FFE522 0A6004 lda I2C_STAT,x
00FFE524 085080 bita #$80
00FFE526 02601B bne rtc_rxerr
00FFE528 0A6003 lda I2C_RXR,x
00FFE52A 0A7A07 sta b,y
00FFE52C 05C incb
00FFE52D 0C105F cmpb #$5F
00FFE52F 025FE9 blo rtcr0001
00FFE531 086068 lda #$68
00FFE533 0A7004 sta I2C_CMD,x ; STO, rd bit + nack
00FFE535 08DF86 bsr i2c_wait_tip
00FFE537 0A6004 lda I2C_STAT,x
00FFE539 085080 bita #$80
00FFE53B 026006 bne rtc_rxerr
00FFE53D 0A6003 lda I2C_RXR,x
00FFE53F 0A7A07 sta b,y
00FFE541 04F05F clrd ; return 0
00FFE54A 086020 lda #$20
00FFE54C 0A7004 sta I2C_CMD,x ; rd bit
00FFE54E 08DF9D bsr i2c_wait_tip
00FFE550 08DFC8 bsr i2c_wait_rx_nack
00FFE552 0A6004 lda I2C_STAT,x
00FFE554 085080 bita #$80
00FFE556 02601B bne rtc_rxerr
00FFE558 0A6003 lda I2C_RXR,x
00FFE55A 0A7A07 sta b,y
00FFE55C 05C incb
00FFE55D 0C105F cmpb #$5F
00FFE55F 025FE9 blo rtcr0001
00FFE561 086068 lda #$68
00FFE563 0A7004 sta I2C_CMD,x ; STO, rd bit + nack
00FFE565 08DF86 bsr i2c_wait_tip
00FFE567 0A6004 lda I2C_STAT,x
00FFE569 085080 bita #$80
00FFE56B 026006 bne rtc_rxerr
00FFE56D 0A6003 lda I2C_RXR,x
00FFE56F 0A7A07 sta b,y
00FFE571 04F05F clrd ; return 0
rtc_rxerr:
00FFE543 06F002 clr I2C_CTRL,x ; disable I2C and return status
00FFE545 04F clra
00FFE546 039 rts
00FFE573 06F002 clr I2C_CTRL,x ; disable I2C and return status
00FFE575 04F clra
00FFE576 039 rts
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; Write the real-time-clock chip.
1503,40 → 1539,40
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
rtc_write:
00FFE547 08EE30500 ldx #RTC
00FFE54A 18E007FC0 ldy #RTCBuf
00FFE577 08EE30500 ldx #RTC
00FFE57A 18E007FC0 ldy #RTCBuf
00FFE54D 0C6080 ldb #$80
00FFE54F 0E7002 stb I2C_CTRL,x ; enable I2C
00FFE551 0CC0900DE ldd #$900DE ; read address, write op, STA + wr bit
00FFE554 08DF71 bsr i2c_wr_cmd
00FFE556 0C5080 bitb #$80
00FFE558 026FE9 bne rtc_rxerr
00FFE55A 0CC010000 ldd #$10000 ; address zero, wr bit
00FFE55D 08DF68 bsr i2c_wr_cmd
00FFE55F 0C5080 bitb #$80
00FFE561 026FE0 bne rtc_rxerr
00FFE57D 0C6080 ldb #$80
00FFE57F 0E7002 stb I2C_CTRL,x ; enable I2C
00FFE581 0CC0900DE ldd #$900DE ; read address, write op, STA + wr bit
00FFE584 08DF71 bsr i2c_wr_cmd
00FFE586 0C5080 bitb #$80
00FFE588 026FE9 bne rtc_rxerr
00FFE58A 0CC010000 ldd #$10000 ; address zero, wr bit
00FFE58D 08DF68 bsr i2c_wr_cmd
00FFE58F 0C5080 bitb #$80
00FFE591 026FE0 bne rtc_rxerr
00FFE563 0C6000 ldb #0
00FFE593 0C6000 ldb #0
rtcw0001:
00FFE565 034004 pshs b
00FFE567 0E6A05 ldb b,y
00FFE569 086010 lda #$10
00FFE56B 08DF5A bsr i2c_wr_cmd
00FFE56D 0C5080 bitb #$80
00FFE56F 035004 puls b
00FFE571 026FD0 bne rtc_rxerr
00FFE573 05C incb
00FFE574 0C105F cmpb #$5F
00FFE576 025FED blo rtcw0001
00FFE578 0E6A05 ldb b,y
00FFE57A 086050 lda #$50 ; STO, wr bit
00FFE57C 08DF49 bsr i2c_wr_cmd
00FFE57E 0C5080 bitb #$80
00FFE580 026FC1 bne rtc_rxerr
00FFE582 04F05F clrd ; return 0
00FFE584 06F002 clr I2C_CTRL,x ; disable I2C and return status
00FFE586 039 rts
00FFE595 034004 pshs b
00FFE597 0E6A05 ldb b,y
00FFE599 086010 lda #$10
00FFE59B 08DF5A bsr i2c_wr_cmd
00FFE59D 0C5080 bitb #$80
00FFE59F 035004 puls b
00FFE5A1 026FD0 bne rtc_rxerr
00FFE5A3 05C incb
00FFE5A4 0C105F cmpb #$5F
00FFE5A6 025FED blo rtcw0001
00FFE5A8 0E6A05 ldb b,y
00FFE5AA 086050 lda #$50 ; STO, wr bit
00FFE5AC 08DF49 bsr i2c_wr_cmd
00FFE5AE 0C5080 bitb #$80
00FFE5B0 026FC1 bne rtc_rxerr
00FFE5B2 04F05F clrd ; return 0
00FFE5B4 06F002 clr I2C_CTRL,x ; disable I2C and return status
00FFE5B6 039 rts
;==============================================================================
; Keyboard I/O
2042,7 → 2078,7
00FFEA04 026FC3 bne kbdi0002
.keybdErr:
00FFEA06 0CCFFEA2E ldd #msgBadKeybd
00FFEA09 017FFF9EE lbsr DisplayStringCRLF
00FFEA09 017FFF9F1 lbsr DisplayStringCRLF
*** warning 1: Long branch within short branch range could be optimized
00FFEA0C 020014 bra ledxit
kbdi0004:
2432,27 → 2468,32
; none
;------------------------------------------------------------------------------
setdp $FFC
InitSerial:
SerialInit:
00FFEBEF 04F clra
00FFEBF0 05F clrb
00FFEBF1 0DD130 std SerHeadRcv-1
00FFEBF3 0DD132 std SerTailRcv-1
00FFEBF5 0DD135 std SerHeadXmit-1
00FFEBF7 0DD137 std SerTailXmit-1
00FFEBF9 00F139 clr SerRcvXon
00FFEBFB 00F140 clr SerRcvXoff
00FFEBFD 0150B6FFFFFFFE0 lda COREID
00FFEBEF 034008 pshs dpr
00FFEBF1 086FFC lda #$FFC
00FFEBF3 01F08B tfr a,dpr
00FFEBF5 04F clra
00FFEBF6 05F clrb
00FFEBF7 00F015 clr SerHeadRcv
00FFEBF9 00F016 clr SerTailRcv
00FFEBFB 00F017 clr SerHeadXmit
00FFEBFD 00F018 clr SerTailXmit
00FFEBFF 00F019 clr SerRcvXon
00FFEC01 00F01A clr SerRcvXoff
00FFEC03 0150B6FFFFFFFE0 lda COREID
sini1:
00FFEC02 0B1FFC010 cmpa IOFocusID
00FFEC05 026FFB bne sini1
00FFEC07 0C6009 ldb #$09 ; dtr,rts active, rxint enabled, no parity
00FFEC09 0150F7FFFE30102 stb ACIA+ACIA_CMD
00FFEC0E 0C601E ldb #$1E ; baud 9600, 1 stop bit, 8 bit, internal baud gen
00FFEC10 0150F7FFFE30103 stb ACIA+ACIA_CTRL
00FFEC15 0C60A6 ldb #$0A6 ; diable fifos, reset fifos
00FFEC17 0150F7FFFE3010B stb ACIA+ACIA_CTRL2
00FFEC1C 039 rts
00FFEC08 091010 cmpa IOFocusID
00FFEC0A 026FFC bne sini1
00FFEC0C 0C600B ldb #$0B ; dtr,rts active, rxint enabled (bit 1=0), no parity
00FFEC0E 0150F7FFFE30102 stb ACIA+ACIA_CMD
00FFEC13 0C601E ldb #$1E ; baud 9600, 1 stop bit, 8 bit, internal baud gen
00FFEC15 0150F7FFFE30103 stb ACIA+ACIA_CTRL
00FFEC1A 0C60AC ldb #$0AC ; disable fifos (bit zero, one), reset fifos
00FFEC1C 0150F7FFFE3010B stb ACIA+ACIA_CTRL2
00FFEC21 035088 puls dpr,pc
;------------------------------------------------------------------------------
; SerialGetChar
2462,7 → 2503,7
; XON.
;
; Stack Space:
; 2 words
; 3 words
; Parameters:
; none
; Modifies:
2472,32 → 2513,32
;------------------------------------------------------------------------------
SerialGetChar:
00FFEC1D 034030 pshs x,y
00FFEC1F 18E000000 ldy #0
00FFEC22 01A010 sei ; disable interrupts
00FFEC24 08D082 bsr SerialRcvCount ; check number of chars in receive buffer
00FFEC26 0C1008 cmpb #8 ; less than 8?
00FFEC28 02200C bhi sgc2
00FFEC2A 0D6139 ldb SerRcvXon ; skip sending XON if already sent
00FFEC2C 026008 bne sgc2 ; XON already sent?
00FFEC2E 0C6011 ldb #XON ; if <8 send an XON
00FFEC30 00F140 clr SerRcvXoff ; clear XOFF status
00FFEC32 0D7139 stb SerRcvXon ; flag so we don't send it multiple times
00FFEC34 08D052 bsr SerialPutChar
00FFEC23 034039 pshs ccr,x,y,dpr
00FFEC25 086FFC lda #$FFC
00FFEC27 01F08B tfr a,dpr
00FFEC29 01A010 sei ; disable interrupts
00FFEC2B 08D090 bsr SerialRcvCount ; check number of chars in receive buffer
00FFEC2D 0C1008 cmpb #8 ; less than 8?
00FFEC2F 02200C bhi sgc2
00FFEC31 0D6019 ldb SerRcvXon ; skip sending XON if already sent
00FFEC33 026008 bne sgc2 ; XON already sent?
00FFEC35 0C6011 ldb #XON ; if <8 send an XON
00FFEC37 00F01A clr SerRcvXoff ; clear XOFF status
00FFEC39 0D7019 stb SerRcvXon ; flag so we don't send it multiple times
00FFEC3B 08D05D bsr SerialPutChar
sgc2:
00FFEC36 0D6131 ldb SerHeadRcv ; check if anything is in buffer
00FFEC38 0D1133 cmpb SerTailRcv
00FFEC3A 02700A beq sgcNoChars ; no?
00FFEC3C 08EBFF000 ldx #SerRcvBuf
00FFEC3F 04F clra
00FFEC40 0E6835 ldb b,x ; get byte from buffer
00FFEC42 00C131 inc SerHeadRcv ; 4k wrap around
00FFEC44 020003 bra sgcXit
00FFEC3D 0D6015 ldb SerHeadRcv ; check if anything is in buffer
00FFEC3F 0D1016 cmpb SerTailRcv
00FFEC41 02700D beq sgcNoChars ; no?
00FFEC43 03080FFFB000 leax SerRcvBuf ; x = buffer address
00FFEC47 04F clra
00FFEC48 0E680FFFB000 ldb b,x ; get byte from buffer
00FFEC4C 00C015 inc SerHeadRcv ; 4k wrap around
00FFEC4E 020003 bra sgcXit
sgcNoChars:
00FFEC46 0CCFFFFFF ldd #-1
00FFEC50 0CCFFFFFF ldd #-1
sgcXit:
00FFEC49 01C0EF cli
00FFEC4B 0350B0 puls x,y,pc
00FFEC53 0350B9 puls ccr,x,y,dpr,pc
;------------------------------------------------------------------------------
; SerialPeekChar
2507,7 → 2548,7
; to send an XON here.
;
; Stack Space:
; 0 words
; 2 words
; Parameters:
; none
; Modifies:
2517,19 → 2558,21
;------------------------------------------------------------------------------
SerialPeekChar:
00FFEC4D 034011 pshs x,ccr
00FFEC4F 01A010 sei
00FFEC51 0D6131 ldb SerHeadRcv ; check if anything is in buffer
00FFEC53 0D1133 cmpb SerTailRcv
00FFEC55 027008 beq spcNoChars ; no?
00FFEC57 08EBFF000 ldx #SerRcvBuf
00FFEC5A 04F clra
00FFEC5B 0E6815 ldb b,x ; get byte from buffer
00FFEC5D 020003 bra spcXit
00FFEC55 034019 pshs x,ccr,dpr
00FFEC57 086FFC lda #$FFC
00FFEC59 01F08B tfr a,dpr
00FFEC5B 01A010 sei
00FFEC5D 0D6015 ldb SerHeadRcv ; check if anything is in buffer
00FFEC5F 0D1016 cmpb SerTailRcv
00FFEC61 02700B beq spcNoChars ; no?
00FFEC63 03080FFFB000 leax SerRcvBuf
00FFEC67 04F clra
00FFEC68 0E680FFFB000 ldb b,x ; get byte from buffer
00FFEC6C 020003 bra spcXit
spcNoChars:
00FFEC5F 0CCFFFFFF ldd #-1
00FFEC6E 0CCFFFFFF ldd #-1
spcXit:
00FFEC62 035091 puls x,ccr,pc
00FFEC71 035099 puls x,ccr,dpr,pc
;------------------------------------------------------------------------------
; SerialPeekChar
2547,22 → 2590,23
;------------------------------------------------------------------------------
SerialPeekCharDirect:
00FFEC64 0150B6FFFFFFFE0 lda COREID ; Ensure we have the IO Focus
00FFEC69 0B1FFC010 cmpa IOFocusID
00FFEC6C 026014 bne spcd0001
00FFEC73 034009 pshs ccr,dpr
00FFEC75 086FFC lda #$FFC
00FFEC77 01F08B tfr a,dpr
00FFEC79 0150B6FFFFFFFE0 lda COREID ; Ensure we have the IO Focus
00FFEC7E 091010 cmpa IOFocusID
00FFEC80 026013 bne spcd0001
; Disallow interrupts between status read and rx read.
00FFEC6E 01A010 sei
00FFEC70 0150F6FFFE30101 ldb ACIA+ACIA_STAT
00FFEC75 0C5008 bitb #8 ; look for Rx not empty
00FFEC77 027009 beq spcd0001
00FFEC79 04F clra
00FFEC7A 0150F6FFFE30100 ldb ACIA+ACIA_RX
00FFEC7F 01C0EF cli
00FFEC81 039 rts
00FFEC82 01A010 sei
00FFEC84 0150F6FFFE30101 ldb ACIA+ACIA_STAT
00FFEC89 0C5008 bitb #8 ; look for Rx not empty
00FFEC8B 027008 beq spcd0001
00FFEC8D 04F clra
00FFEC8E 0150F6FFFE30100 ldb ACIA+ACIA_RX
00FFEC93 035089 puls ccr,dpr,pc
spcd0001:
00FFEC82 0CCFFFFFF ldd #-1
00FFEC85 01C0EF cli
00FFEC87 039 rts
00FFEC95 0CCFFFFFF ldd #-1
00FFEC98 035089 puls ccr,dpr,pc
;------------------------------------------------------------------------------
; SerialPutChar
2578,40 → 2622,43
;------------------------------------------------------------------------------
SerialPutChar:
00FFEC88 034003 pshs a,ccr
00FFEC9A 03400B pshs a,ccr,dpr
00FFEC9C 086FFC lda #$FFC
00FFEC9E 01F08B tfr a,dpr
spc0001:
00FFEC8A 0150B6FFFFFFFE0 lda COREID ; Ensure we have the IO Focus
00FFEC8F 0B1FFC010 cmpa IOFocusID
00FFEC92 026FF6 bne spc0001
00FFEC94 01C0EF cli ; provide a window for an interrupt to occur
00FFEC96 01A010 sei
00FFECA0 0150B6FFFFFFFE0 lda COREID ; Ensure we have the IO Focus
00FFECA5 091010 cmpa IOFocusID
00FFECA7 026FF7 bne spc0001
00FFECA9 01C0EF cli ; provide a window for an interrupt to occur
00FFECAB 01A010 sei
; Between the status read and the transmit do not allow an
; intervening interrupt.
00FFEC98 0150B6FFFE30101 lda ACIA+ACIA_STAT ; wait until the uart indicates tx empty
00FFEC9D 085010 bita #16 ; bit #4 of the status reg
00FFEC9F 027FE9 beq spc0001 ; branch if transmitter is not empty
00FFECA1 0150F7FFFE30100 stb ACIA+ACIA_TX ; send the byte
00FFECA6 035083 puls a,ccr,pc
00FFECAD 0150B6FFFE30101 lda ACIA+ACIA_STAT ; wait until the uart indicates tx empty
00FFECB2 085010 bita #16 ; bit #4 of the status reg
00FFECB4 027FEA beq spc0001 ; branch if transmitter is not empty
00FFECB6 0150F7FFFE30100 stb ACIA+ACIA_TX ; send the byte
00FFECBB 03508B puls a,ccr,dpr,pc
;------------------------------------------------------------------------------
; Calculate number of character in input buffer
; Calculate number of character in input buffer. Direct page must be set
; already.
;
; Parameters:
; y = 0 if current core, otherwise reference to core memory area $Cyxxxx
; none
; Returns:
; d = number of bytes in buffer.
;------------------------------------------------------------------------------
SerialRcvCount:
00FFECA8 04F clra
00FFECA9 0E6A08133 ldb SerTailRcv,y
00FFECAC 0E0A08131 subb SerHeadRcv,y
00FFECAF 02C009 bge srcXit
00FFECB1 0CC001000 ldd #$1000
00FFECB4 0A3A08131 subd SerHeadRcv,y
00FFECB7 0E3A08133 addd SerTailRcv,y
00FFECBD 04F clra
00FFECBE 0D6016 ldb SerTailRcv
00FFECC0 0D0015 subb SerHeadRcv
00FFECC2 02C007 bge srcXit
00FFECC4 0CC001000 ldd #$1000
00FFECC7 093015 subd SerHeadRcv
00FFECC9 0D3016 addd SerTailRcv
srcXit:
00FFECBA 039 rts
00FFECCB 039 rts
;------------------------------------------------------------------------------
; Serial IRQ routine
2629,51 → 2676,47
;------------------------------------------------------------------------------
SerialIRQ:
00FFECCC 034008 pshs dpr ; set direct page register to boot variables
00FFECCE 086FFC lda #$FFC
00FFECD0 01F08B tfr a,dpr
00FFECD2 0150B6FFFE3F0D3 lda PIC+$D3 ; Serial active interrupt flag
00FFECD7 027042 beq notSerInt
sirqNxtByte:
00FFECBB 0150F6FFFE30101 ldb ACIA+ACIA_STAT ; check the status
00FFECC0 0C5008 bitb #$08 ; bit 3 = rx full
00FFECC2 027049 beq notRxInt
00FFECC4 0150F6FFFE30100 ldb ACIA+ACIA_RX ; get data from Rx buffer to clear interrupt
00FFECC9 0C1014 cmpb #CTRLT ; detect special keystroke
00FFECCB 026000 bne sirq0001
; bsr DumpTraceQueue
sirq0001:
00FFECCD 034004 pshs b
; Compute receive buffer address
00FFECCF 0B6FFC010 lda IOFocusID
00FFECD2 048 asla
00FFECD3 048 asla
00FFECD4 048 asla
00FFECD5 048 asla
00FFECD6 08AC00 ora #$C00
00FFECD8 05F clrb
00FFECD9 01F002 tfr d,y
00FFECDB 035004 puls b
00FFECDD 0A6A08133 lda SerTailRcv,y ; check if recieve buffer full
00FFECE0 04C inca
00FFECE1 0A1A08131 cmpa SerHeadRcv,y
00FFECE4 027027 beq sirqRxFull
00FFECE6 0A7A08133 sta SerTailRcv,y ; update tail pointer
00FFECE9 04A deca ; backup
00FFECEA 01E089 exg a,b
00FFECEC 030A0A000BFF000 leax SerRcvBuf,y ; x = buffer address
00FFECF1 0A7A0F sta b,x ; store recieved byte in buffer
00FFECF3 06DA08140 tst SerRcvXoff,y ; check if xoff already sent
00FFECF6 026FC3 bne sirqNxtByte
00FFECF8 08DFAE bsr SerialRcvCount ; if more than 4080 chars in buffer
00FFECFA 0C1FF0 cmpb #4080
00FFECFC 025FBD blo sirqNxtByte
00FFECFE 0C6013 ldb #XOFF ; send an XOFF
00FFED00 06FA08139 clr SerRcvXon,y ; clear XON status
00FFED03 0E7A08140 stb SerRcvXoff,y ; set XOFF status
00FFED06 0150F7FFFE30100 stb ACIA+ACIA_TX
00FFED0B 020FAE bra sirqNxtByte ; check the status for another byte
00FFECD9 0150F6FFFE30104 ldb ACIA+ACIA_IRQS ; look for IRQs
00FFECDE 02A03B bpl notSerInt ; quick test for any irqs
00FFECE0 0150F6FFFE30101 ldb ACIA+ACIA_STAT ; check the status
00FFECE5 0C5008 bitb #$08 ; bit 3 = rx full (not empty)
00FFECE7 027030 beq notRxInt1
00FFECE9 0150F6FFFE30100 ldb ACIA+ACIA_RX ; get data from Rx buffer to clear interrupt
00FFECEE 096016 lda SerTailRcv ; check if recieve buffer full
00FFECF0 04C inca
00FFECF1 091015 cmpa SerHeadRcv
00FFECF3 027026 beq sirqRxFull
00FFECF5 097016 sta SerTailRcv ; update tail pointer
00FFECF7 04A deca ; backup
00FFECF8 01E089 exg a,b
00FFECFA 03080FFFB000 leax SerRcvBuf ; x = buffer address
00FFECFE 0A780FFFB000 sta b,x ; store recieved byte in buffer
00FFED02 00D01A tst SerRcvXoff ; check if xoff already sent
00FFED04 026FD3 bne sirqNxtByte
00FFED06 08DFB5 bsr SerialRcvCount ; if more than 4070 chars in buffer
00FFED08 0C1FE6 cmpb #4070
00FFED0A 025FCD blo sirqNxtByte
00FFED0C 0C6013 ldb #XOFF ; send an XOFF
00FFED0E 00F019 clr SerRcvXon ; clear XON status
00FFED10 0D701A stb SerRcvXoff ; set XOFF status
00FFED12 0150F7FFFE30100 stb ACIA+ACIA_TX
00FFED17 020FC0 bra sirqNxtByte ; check the status for another byte
; Process other serial IRQs
notRxInt1:
00FFED19 035088 puls dpr,pc
sirqRxFull:
notRxInt:
00FFED0D 039 rts
notSerInt:
00FFED1B 035088 puls dpr,pc
nmeSerial:
00FFED0E 05306507206906106C000 fcb "Serial",0
00FFED1D 05306507206906106C000 fcb "Serial",0
;------------------------------------------------------------------------------
; Put a string to the serial port.
2687,16 → 2730,16
;------------------------------------------------------------------------------
SerialPutString:
00FFED15 034016 pshs d,x
00FFED17 01F001 tfr d,x
00FFED24 034016 pshs d,x
00FFED26 01F001 tfr d,x
sps2:
00FFED19 0E6804 ldb ,x
00FFED1B 027006 beq spsXit
00FFED1D 030001 inx
00FFED1F 08DF67 bsr SerialPutChar
00FFED21 020FF6 bra sps2
00FFED28 0E6804 ldb ,x
00FFED2A 027006 beq spsXit
00FFED2C 030001 inx
00FFED2E 08DF6A bsr SerialPutChar
00FFED30 020FF6 bra sps2
spsXit:
00FFED23 035096 puls d,x,pc
00FFED32 035096 puls d,x,pc
;------------------------------------------------------------------------------
; A little routine to test serial output.
2710,28 → 2753,29
;------------------------------------------------------------------------------
SerialOutputTest:
00FFED25 034006 pshs d
00FFED27 0CCFFED45 ldd #msgSerialTest
00FFED2A 017FFF6AD lbsr DisplayString
00FFED34 034006 pshs d
00FFED36 0CCFFED54 ldd #msgSerialTest
00FFED39 017FFF6A1 lbsr DisplayString
*** warning 1: Long branch within short branch range could be optimized
00FFED2D 08DEC0 bsr SerialInit
00FFED3C 08DEB1 bsr SerialInit
sotst1:
00FFED2F 0C6011 ldb #XON
00FFED31 08DF55 bsr SerialPutChar
00FFED33 08DF53 bsr SerialPutChar
00FFED35 08DF51 bsr SerialPutChar
00FFED37 0CCFFED45 ldd #msgSerialTest
00FFED3A 08DFD9 bsr SerialPutString
00FFED3C 01700016A lbsr INCH
00FFED3F 0C1003 cmpb #CTRLC
00FFED41 026FEC bne sotst1
00FFED43 035086 puls d,pc
00FFED3E 0C6011 ldb #XON
00FFED40 08DF58 bsr SerialPutChar
00FFED42 08DF56 bsr SerialPutChar
00FFED44 08DF54 bsr SerialPutChar
00FFED46 0CCFFED54 ldd #msgSerialTest
00FFED49 08DFD9 bsr SerialPutString
00FFED4B 017000443 lbsr INCH
00FFED4E 0C1003 cmpb #CTRLC
00FFED50 026FEC bne sotst1
00FFED52 035086 puls d,pc
msgSerialTest:
00FFED45 05306507206906106C020 fcb "Serial port test",CR,LF,0
00FFED4C 07006F072074020074065
00FFED53 07307400D00A000
00FFED54 05306507206906106C020 fcb "Serial port test",CR,LF,0
00FFED5B 07006F072074020074065
00FFED62 07307400D00A000
setdp $000
; ============================================================================
; __
; \\__/ o\ (C) 2022 Robert Finch, Waterloo
2768,36 → 2812,74
;
; ============================================================================
;
; S19 variables
;
s19Address EQU $940 ; to $943
s19StartAddress EQU $944 ; to $947
s19Rectype EQU $948
s19Reclen EQU $949
s19Abort EQU $94A
s19Checksum EQU $94B
s19SummaryChecksum EQU $94C
s19Source EQU $94E
s19XferAddress EQU $950 ; to $951
; ------------------------------------------------------------------------------
; Input a character either from a file in memory or from the serial port.
;
; Parameters:
; none
; Returns:
; accb = character input
; ------------------------------------------------------------------------------
s19InputChar:
00FFED67 07D00094E tst s19Source
00FFED6A 02700D beq s19ic1
00FFED6C 0E690F000950 ldb [s19XferAddress]
00FFED70 07C000951 inc s19XferAddress+1 ; increment low byte of address pointer
00FFED73 026003 bne s19ic2
00FFED75 07C000950 inc s19XferAddress ; increment high byte of address pointer
s19ic2:
00FFED78 039 rts
s19ic1:
00FFED79 0CCFFFFFF ldd #-1 ; block until input is available
00FFED7C 03F swi
00FFED7D 001 fcb MF_INCH ; monitor input rout
00FFED7E 039 rts
; ------------------------------------------------------------------------------
; Skip over input to the next record.
; ------------------------------------------------------------------------------
s19NextRecord:
00FFED58 0CCFFFFFF ldd #-1 ; block until input is available
00FFED5B 03F swi
00FFED5C 001 fcb MF_INCH ; monitor input rout
00FFED5D 0C100A cmpb #LF ; line feed marks end of record
00FFED5F 027013 beq s19nr1
00FFED61 0C1003 cmpb #CTRLC ; should not get this in a file transfer
00FFED63 026003 bne s19nr2
00FFED65 0F700094A stb s19Abort
00FFED7F 08DFE6 bsr s19InputChar
00FFED81 0C100A cmpb #LF ; line feed marks end of record
00FFED83 027013 beq s19nr1
00FFED85 0C1003 cmpb #CTRLC ; should not get this in a file transfer
00FFED87 026003 bne s19nr2
00FFED89 0F700094A stb s19Abort
s19nr2:
00FFED68 0C101A cmpb #CTRLZ ; end of file marker?
00FFED6A 026003 bne s19nr3
00FFED6C 0F700094A stb s19Abort
00FFED8C 0C101A cmpb #CTRLZ ; end of file marker?
00FFED8E 026003 bne s19nr3
00FFED90 0F700094A stb s19Abort
s19nr3:
00FFED6F 07D00094A tst s19Abort
00FFED72 027FE4 beq s19NextRecord
00FFED93 07D00094A tst s19Abort
00FFED96 027FE7 beq s19NextRecord
s19nr1:
00FFED74 039 rts
00FFED98 039 rts
; ------------------------------------------------------------------------------
; Update the checksum.
; ------------------------------------------------------------------------------
s19AddCheck:
00FFED99 034004 pshs b
00FFED9B 0FB00094B addb s19Checksum
00FFED9E 0F700094B stb s19Checksum
00FFEDA1 035084 puls b,pc
; ------------------------------------------------------------------------------
; Input a byte. There are three characters per byte since things are 12-bit.
;
; Parameters:
2807,40 → 2889,37
; ------------------------------------------------------------------------------
s19GetByte:
00FFED75 03F swi
00FFED76 001 fcb MF_INCH ; get the first character
00FFED77 0170004F6 lbsr AsciiToHexNybble ; convert to nybble
00FFED7A 07D00094A tst s19Abort ; check for abort
00FFED7D 027002 beq s19gb1
00FFED7F 04F clra
00FFED80 039 rts
00FFEDA3 08DFC2 bsr s19InputChar ; get the first character
00FFEDA5 0170007F7 lbsr AsciiToHexNybble ; convert to nybble
00FFEDA8 07D00094A tst s19Abort ; check for abort
00FFEDAB 027002 beq s19gb1
00FFEDAD 04F clra
00FFEDAE 039 rts
s19gb1: ; shift the value four bits
00FFED81 058 aslb
00FFED82 058 aslb
00FFED83 058 aslb
00FFED84 058 aslb
00FFED85 034004 pshs b ; save off value
00FFED87 03F swi
00FFED88 001 fcb MF_INCH ; get the second character
00FFED89 0170004E4 lbsr AsciiToHexNybble ; convert to nybble
00FFED8C 07D00094A tst s19Abort ; check for abort
00FFED8F 026011 bne s19gb2
00FFED91 0EAE00 orb ,s+ ; merge new nybble into value
00FFED93 058 aslb ; shift the value four more bits
00FFED94 058 aslb
00FFED95 058 aslb
00FFED96 058 aslb
00FFED97 034004 pshs b ; save off value
00FFED99 03F swi
00FFED9A 001 fcb MF_INCH ; get third character
00FFED9B 0170004D2 lbsr AsciiToHexNybble ; convert to nybble
00FFED9E 0EAE00 orb ,s+ ; merge in value
00FFEDA0 04F clra ; make byte 000 to FFF in D
00FFEDA1 039 rts
00FFEDAF 058 aslb
00FFEDB0 058 aslb
00FFEDB1 058 aslb
00FFEDB2 058 aslb
00FFEDB3 034004 pshs b ; save off value
00FFEDB5 08DFB0 bsr s19InputChar ; get the second character
00FFEDB7 0170007E5 lbsr AsciiToHexNybble ; convert to nybble
00FFEDBA 07D00094A tst s19Abort ; check for abort
00FFEDBD 026011 bne s19gb2
00FFEDBF 0EAE00 orb ,s+ ; merge new nybble into value
00FFEDC1 058 aslb ; shift the value four more bits
00FFEDC2 058 aslb
00FFEDC3 058 aslb
00FFEDC4 058 aslb
00FFEDC5 034004 pshs b ; save off value
00FFEDC7 08DF9E bsr s19InputChar ; get the third character
00FFEDC9 0170007D3 lbsr AsciiToHexNybble ; convert to nybble
00FFEDCC 0EAE00 orb ,s+ ; merge in value
00FFEDCE 04F clra ; make byte 000 to FFF in D
00FFEDCF 039 rts
s19gb2:
00FFEDA2 032601 leas 1,s ; discard saved byte
00FFEDA4 04F clra
00FFEDA5 039 rts
00FFEDD0 032601 leas 1,s ; discard saved byte
00FFEDD2 04F clra
00FFEDD3 039 rts
; ------------------------------------------------------------------------------
; Zero out address
2847,11 → 2926,11
; ------------------------------------------------------------------------------
s19ClearAddress:
00FFEDA6 07F000940 clr s19Address
00FFEDA9 07F000941 clr s19Address+1
00FFEDAC 07F000942 clr s19Address+2
00FFEDAF 07F000943 clr s19Address+3
00FFEDB2 039 rts
00FFEDD4 07F000940 clr s19Address
00FFEDD7 07F000941 clr s19Address+1
00FFEDDA 07F000942 clr s19Address+2
00FFEDDD 07F000943 clr s19Address+3
00FFEDE0 039 rts
; ------------------------------------------------------------------------------
; Get an address composed of two bytes (24 bit)
2863,15 → 2942,17
; ------------------------------------------------------------------------------
s19GetAddress2:
00FFEDB3 08DFF1 bsr s19ClearAddress
00FFEDB5 08DFBE bsr s19GetByte
00FFEDB7 0F7000942 stb s19Address+2
00FFEDBA 07D00094A tst s19Abort
00FFEDBD 026005 bne s19ga1
00FFEDBF 08DFB4 bsr s19GetByte
00FFEDC1 0F7000943 stb s19Address+3
00FFEDE1 08DFF1 bsr s19ClearAddress
00FFEDE3 08DFBE bsr s19GetByte
00FFEDE5 08DFB2 bsr s19AddCheck
00FFEDE7 0F7000942 stb s19Address+2
00FFEDEA 07D00094A tst s19Abort
00FFEDED 026007 bne s19ga1
00FFEDEF 08DFB2 bsr s19GetByte
00FFEDF1 08DFA6 bsr s19AddCheck
00FFEDF3 0F7000943 stb s19Address+3
s19ga1:
00FFEDC4 039 rts
00FFEDF6 039 rts
; ------------------------------------------------------------------------------
; Get an address composed of three bytes (36 bit)
2883,19 → 2964,22
; ------------------------------------------------------------------------------
s19GetAddress3:
00FFEDC5 08DFDF bsr s19ClearAddress
00FFEDC7 08DFAC bsr s19GetByte
00FFEDC9 0F7000941 stb s19Address+1
00FFEDCC 07D00094A tst s19Abort
00FFEDCF 02600F bne s19ga2
00FFEDD1 08DFA2 bsr s19GetByte
00FFEDD3 0F7000942 stb s19Address+2
00FFEDD6 07D00094A tst s19Abort
00FFEDD9 026005 bne s19ga2
00FFEDDB 08DF98 bsr s19GetByte
00FFEDDD 0F7000943 stb s19Address+3
00FFEDF7 08DFDB bsr s19ClearAddress
00FFEDF9 08DFA8 bsr s19GetByte
00FFEDFB 08DF9C bsr s19AddCheck
00FFEDFD 0F7000941 stb s19Address+1
00FFEE00 07D00094A tst s19Abort
00FFEE03 026013 bne s19ga2
00FFEE05 08DF9C bsr s19GetByte
00FFEE07 08DF90 bsr s19AddCheck
00FFEE09 0F7000942 stb s19Address+2
00FFEE0C 07D00094A tst s19Abort
00FFEE0F 026007 bne s19ga2
00FFEE11 08DF90 bsr s19GetByte
00FFEE13 08DF84 bsr s19AddCheck
00FFEE15 0F7000943 stb s19Address+3
s19ga2:
00FFEDE0 039 rts
00FFEE18 039 rts
; ------------------------------------------------------------------------------
; Put a byte to memory.
2902,27 → 2986,30
; ------------------------------------------------------------------------------
s19PutMem:
00FFEDE1 05F clrb ; accb = current byte count
00FFEE19 05F clrb ; accb = current byte count
s19pm3:
00FFEDE2 034004 pshs b ; save byte count
00FFEDE4 08DF8F bsr s19GetByte
00FFEDE6 07D00094A tst s19Abort
00FFEDE9 02601C bne s19pm1
00FFEDEB 0150E790F000941 stb far [s19Address+1] ; store the byte using far addressing
00FFEDF0 07C000943 inc s19Address+3
00FFEDF3 026008 bne s19pm2
00FFEDF5 07C000942 inc s19Address+2
00FFEDF8 026003 bne s19pm2
00FFEDFA 07C000941 inc s19Address+1
00FFEE1A 034004 pshs b ; save byte count
00FFEE1C 08DF85 bsr s19GetByte
00FFEE1E 08DF79 bsr s19AddCheck
00FFEE20 07D00094A tst s19Abort
00FFEE23 02601E bne s19pm1
00FFEE25 0150E790F000941 stb far [s19Address+1] ; store the byte using far addressing
00FFEE2A 07C000943 inc s19Address+3
00FFEE2D 026008 bne s19pm2
00FFEE2F 07C000942 inc s19Address+2
00FFEE32 026003 bne s19pm2
00FFEE34 07C000941 inc s19Address+1
s19pm2:
00FFEDFD 035004 puls b ; get back byte count
00FFEDFF 05C incb ; increment and
00FFEE00 0F1000949 cmpb s19Reclen ; compare to record length
00FFEE03 025FDD blo s19pm3
00FFEE05 020F6E bra s19GetByte ; get the checksum byte
00FFEE37 035004 puls b ; get back byte count
00FFEE39 05C incb ; increment and
00FFEE3A 0F1000949 cmpb s19Reclen ; compare to record length
00FFEE3D 025FDB blo s19pm3
00FFEE3F 08DF62 bsr s19GetByte ; get the checksum byte
00FFEE41 020F56 bra s19AddCheck
s19pm1:
00FFEE07 032601 leas 1,s ; faster than actual pull
00FFEE09 020F6A bra s19GetByte ; get the checksum byte
00FFEE43 032601 leas 1,s ; faster than actual pull
00FFEE45 08DF5C bsr s19GetByte ; get the checksum byte
00FFEE47 020F50 bra s19AddCheck
; ------------------------------------------------------------------------------
; Processing for S1 record type.
2929,9 → 3016,16
; ------------------------------------------------------------------------------
s19ProcessS1:
00FFEE0B 08DFA6 bsr s19GetAddress2
00FFEE0D 08DFD2 bsr s19PutMem
00FFEE0F 020072 bra s19lnr
00FFEE49 08DF96 bsr s19GetAddress2
00FFEE4B 08DFCC bsr s19PutMem
00FFEE4D 07D00094B tst s19Checksum
00FFEE50 027008 beq s19p11
00FFEE52 07C00094C inc s19SummaryChecksum
00FFEE55 0CCFFEF19 ldd #msgChecksumErr
00FFEE58 03F swi
00FFEE59 004 fcb MF_DisplayString
s19p11:
00FFEE5A 020099 bra s19lnr
; ------------------------------------------------------------------------------
; Processing for S2 record type.
2938,9 → 3032,16
; ------------------------------------------------------------------------------
s19ProcessS2:
00FFEE11 08DFB2 bsr s19GetAddress3
00FFEE13 08DFCC bsr s19PutMem
00FFEE15 02006C bra s19lnr
00FFEE5C 08DF99 bsr s19GetAddress3
00FFEE5E 08DFB9 bsr s19PutMem
00FFEE60 07D00094B tst s19Checksum
00FFEE63 027008 beq s19p21
00FFEE65 07C00094C inc s19SummaryChecksum
00FFEE68 0CCFFEF19 ldd #msgChecksumErr
00FFEE6B 03F swi
00FFEE6C 004 fcb MF_DisplayString
s19p21:
00FFEE6D 020086 bra s19lnr
; S3,4,5,6 not processed
2949,12 → 3050,12
; ------------------------------------------------------------------------------
s19ProcessS9:
00FFEE17 08DF9A bsr s19GetAddress2
00FFEE19 0FC000942 ldd s19Address+2
00FFEE1C 0FD000946 std s19StartAddress+2
00FFEE1F 0FC000940 ldd s19Address+0
00FFEE22 0FD000944 std s19StartAddress+0
00FFEE25 020069 bra s19l2
00FFEE6F 08DF70 bsr s19GetAddress2
00FFEE71 0FC000942 ldd s19Address+2
00FFEE74 0FD000946 std s19StartAddress+2
00FFEE77 0FC000940 ldd s19Address+0
00FFEE7A 0FD000944 std s19StartAddress+0
00FFEE7D 020083 bra s19l2
; ------------------------------------------------------------------------------
; Processing for S8 record type. Gets a three byte (36 bit) start address.
2961,12 → 3062,12
; ------------------------------------------------------------------------------
s19ProcessS8:
00FFEE27 08DF9C bsr s19GetAddress3
00FFEE29 0FC000942 ldd s19Address+2
00FFEE2C 0FD000946 std s19StartAddress+2
00FFEE2F 0FC000940 ldd s19Address+0
00FFEE32 0FD000944 std s19StartAddress+0
00FFEE35 020059 bra s19l2
00FFEE7F 08DF76 bsr s19GetAddress3
00FFEE81 0FC000942 ldd s19Address+2
00FFEE84 0FD000946 std s19StartAddress+2
00FFEE87 0FC000940 ldd s19Address+0
00FFEE8A 0FD000944 std s19StartAddress+0
00FFEE8D 020073 bra s19l2
; ------------------------------------------------------------------------------
; S19 Loader
2975,63 → 3076,525
; ------------------------------------------------------------------------------
S19Loader:
00FFEE37 07F00094A clr s19Abort ; clear the abort flag
00FFEE3A 0CCFFEE93 ldd #msgS19Loader ; signon banner
00FFEE3D 03F swi
00FFEE3E 004 fcb MF_DisplayString
00FFEE8F 07F00094E clr s19Source
00FFEE92 0170006FC lbsr GetNumber ; check for a file storage address
00FFEE95 05D tstb
00FFEE96 027009 beq s19l4 ; if not a memory file
00FFEE98 07C00094E inc s19Source ; set flag indicating a memory file
00FFEE9B 0FC000912 ldd mon_numwka+2 ; set transfer address variable
00FFEE9E 0FD000950 std s19XferAddress
s19l4:
00FFEEA1 07F00094A clr s19Abort ; clear the abort flag
00FFEEA4 0CCFFEF05 ldd #msgS19Loader ; signon banner
00FFEEA7 03F swi
00FFEEA8 004 fcb MF_DisplayString
00FFEEA9 07F00094C clr s19SummaryChecksum
s19l3:
00FFEE3F 03F swi ; get a character from input
00FFEE40 001 fcb MF_INCH
00FFEE41 0C101A cmpb #CTRLZ ; is it CTRL-Z?
00FFEE43 02704B beq s19l2
00FFEE45 0C1053 cmpb #'S' ; records must start with the letter S
00FFEE47 02603A bne s19lnr
00FFEE49 03F swi ; get the next character
00FFEE4A 001 fcb MF_INCH
00FFEE4B 0C1030 cmpb #'0' ; must be a numeric digit
00FFEE4D 025034 blo s19lnr
00FFEE4F 0C1039 cmpb #'9'
00FFEE51 022030 bhi s19lnr
00FFEE53 0F7000948 stb s19Rectype ; save off in record type
00FFEE56 08DF1D bsr s19GetByte ; get a byte indicating record length
00FFEE58 0F7000949 stb s19Reclen
00FFEE5B 07D00094A tst s19Abort ; check for abort
00FFEE5E 026030 bne s19l2
00FFEE60 0F6000948 ldb s19Rectype ; process according to record type
00FFEE63 0C1030 cmpb #'0'
00FFEE65 02701C beq s19lnr
00FFEE67 0C1031 cmpb #'1'
00FFEE69 027FA0 beq s19ProcessS1 ; data record with a two byte address
00FFEE6B 0C1032 cmpb #'2'
00FFEE6D 027FA2 beq s19ProcessS2 ; data record with a three byte address
00FFEE6F 0C1033 cmpb #'3'
00FFEE71 027010 beq s19lnr
00FFEE73 0C1035 cmpb #'5' ; record count? ignore
00FFEE75 02700C beq s19lnr
00FFEE77 0C1037 cmpb #'7' ; ignore record with 48 bit address
00FFEE79 027015 beq s19l2
00FFEE7B 0C1038 cmpb #'8'
00FFEE7D 027FA8 beq s19ProcessS8 ; two byte start address
00FFEE7F 0C1039 cmpb #'9'
00FFEE81 027F94 beq s19ProcessS9 ; three byte start address
00FFEEAC 08DEB9 bsr s19InputChar ; get a character from input
00FFEEAE 0C101A cmpb #CTRLZ ; is it CTRL-Z?
00FFEEB0 027050 beq s19l2
00FFEEB2 07F00094B clr s19Checksum
00FFEEB5 0C1043 cmpb #'C' ; records must start with the letter C
00FFEEB7 02603C bne s19lnr
00FFEEB9 08DEAC bsr s19InputChar ; get the next character
00FFEEBB 0C1030 cmpb #'0' ; must be a numeric digit
00FFEEBD 025036 blo s19lnr
00FFEEBF 0C1039 cmpb #'9'
00FFEEC1 022032 bhi s19lnr
00FFEEC3 0F7000948 stb s19Rectype ; save off in record type
00FFEEC6 08DEDB bsr s19GetByte ; get a byte indicating record length
00FFEEC8 08DECF bsr s19AddCheck
00FFEECA 0F7000949 stb s19Reclen
00FFEECD 07D00094A tst s19Abort ; check for abort
00FFEED0 026030 bne s19l2
00FFEED2 0F6000948 ldb s19Rectype ; process according to record type
00FFEED5 0C1030 cmpb #'0'
00FFEED7 02701C beq s19lnr
00FFEED9 0C1031 cmpb #'1'
00FFEEDB 027F6C beq s19ProcessS1 ; data record with a two byte address
00FFEEDD 0C1032 cmpb #'2'
00FFEEDF 027F7B beq s19ProcessS2 ; data record with a three byte address
00FFEEE1 0C1033 cmpb #'3'
00FFEEE3 027010 beq s19lnr
00FFEEE5 0C1035 cmpb #'5' ; record count? ignore
00FFEEE7 02700C beq s19lnr
00FFEEE9 0C1037 cmpb #'7' ; ignore record with 48 bit address
00FFEEEB 027015 beq s19l2
00FFEEED 0C1038 cmpb #'8'
00FFEEEF 027F8E beq s19ProcessS8 ; two byte start address
00FFEEF1 0C1039 cmpb #'9'
00FFEEF3 027F7A beq s19ProcessS9 ; three byte start address
s19lnr:
00FFEE83 0C602E ldb #'.' ; output a progress indicator
00FFEE85 03F swi
00FFEE86 002 fcb MF_OUTCH
00FFEE87 08DECF bsr s19NextRecord ; skip to the next record
00FFEE89 07D00094A tst S19Abort ; check for abort
00FFEE8C 026002 bne s19l2
00FFEE8E 020FAF bra s19l3 ; loop back to process more records
00FFEEF5 0C602E ldb #'.' ; output a progress indicator
00FFEEF7 03F swi
00FFEEF8 002 fcb MF_OUTCH
00FFEEF9 08DE84 bsr s19NextRecord ; skip to the next record
00FFEEFB 07D00094A tst S19Abort ; check for abort
00FFEEFE 026002 bne s19l2
00FFEF00 020FAA bra s19l3 ; loop back to process more records
s19l2:
00FFEE90 0160001A6 lbra Monitor
00FFEF02 016000457 lbra Monitor
msgS19Loader:
00FFEE93 05303103902004C06F061 fcb "S19 Loader Active",CR,LF,0
00FFEE9A 064065072020041063074
00FFEEA1 06907606500D00A000
00FFEF05 05303103902004C06F061 fcb "S19 Loader Active",CR,LF,0
00FFEF0C 064065072020041063074
00FFEF13 06907606500D00A000
msgChecksumErr:
00FFEF19 053031039020043068065 fcb "S19 Checksum Err",CR,LF,0
00FFEF20 06306B07307506D020045
00FFEF27 07207200D00A000
; ============================================================================
; __
; \\__/ o\ (C) 2022 Robert Finch, Waterloo
; \ __ / All rights reserved.
; \/_// robfinch<remove>@opencores.org
; ||
;
;
; BSD 3-Clause License
; Redistribution and use in source and binary forms, with or without
; modification, are permitted provided that the following conditions are met:
;
; 1. Redistributions of source code must retain the above copyright notice, this
; list of conditions and the following disclaimer.
;
; 2. Redistributions in binary form must reproduce the above copyright notice,
; this list of conditions and the following disclaimer in the documentation
; and/or other materials provided with the distribution.
;
; 3. Neither the name of the copyright holder nor the names of its
; contributors may be used to endorse or promote products derived from
; this software without specific prior written permission.
;
; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
; DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
; SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
; CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
; OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
;
; ============================================================================
;
; Xmodem variables
;
xm_timer EQU $FFC020
xm_protocol EQU $9F5
xm_flag EQU $9F6
xm_checksum EQU $9F7
xm_tmp2 EQU $9F8
xm_packetnum EQU $9FA
xm_tmp EQU $9FC
xm_crc EQU $9FE
xm_ibuf EQU $A00 ; to $A7F
xm_obuf EQU $A80 ; to $AFF
; ------------------------------------------------------------------------------
; Send data using XModem.
; ------------------------------------------------------------------------------
xm_SendStart:
00FFEF2C 0170005A3 lbsr GetRange
00FFEF2F 0BE000922 ldx mon_r1+2 ; x = buffer address
00FFEF32 01F013 tfr x,u
00FFEF34 0C6001 ldb #1 ; packet numbers start at one
00FFEF36 0F70009FB stb xm_packetnum+1
; Wait for receiver to send a NAK
xm_send:
00FFEF39 0CCFFFFFF ldd #-1 ; select blocking input
00FFEF3C 03F swi
00FFEF3D 001 fcb MF_INCH
00FFEF3E 0C1015 cmpb #NAK ; should have got a NAK
00FFEF40 027004 beq xm_send5
00FFEF42 0C1043 cmpb #'C' ; or a 'C'
00FFEF44 026FF3 bne xm_send
xm_send5:
00FFEF46 0F70009F5 stb xm_protocol
xm_send4:
00FFEF49 0C6001 ldb #SOH ; send start
00FFEF4B 03F swi
00FFEF4C 1C9 fcb OUTCH
00FFEF4D 0F60009FB ldb xm_packetnum+1 ; send packet number
00FFEF50 03F swi
00FFEF51 002 fcb MF_OUTCH
00FFEF52 053 comb ; one's complement
00FFEF53 03F swi
00FFEF54 002 fcb MF_OUTCH ; send packet number complement
00FFEF55 04F clra ; acca = byte count
00FFEF56 01F013 tfr x,u ; u = buffer address
xm_send1:
00FFEF58 0E6C00 ldb ,u+ ; grab a byte from the buffer
00FFEF5A 03F swi
00FFEF5B 002 fcb MF_OUTCH ; send it out
00FFEF5C 04C inca
00FFEF5D 081080 cmpa #128 ; number of bytes in payload
00FFEF5F 025FF7 blo xm_send1
00FFEF61 0F60009F5 ldb xm_protocol
00FFEF64 0C1043 cmpb #'C' ; CRC protocol?
00FFEF66 02601E bne xm_send2
00FFEF68 08D17F bsr xm_calc_crc ; compute CRC
00FFEF6A 0FC0009FE ldd xm_crc ; get crc
00FFEF6D 044 lsra ; transfer high eight bits first, so
00FFEF6E 056 rorb ; right shift D by eight
00FFEF6F 044 lsra
00FFEF70 056 rorb
00FFEF71 044 lsra
00FFEF72 056 rorb
00FFEF73 044 lsra
00FFEF74 056 rorb
00FFEF75 044 lsra
00FFEF76 056 rorb
00FFEF77 044 lsra
00FFEF78 056 rorb
00FFEF79 044 lsra
00FFEF7A 056 rorb
00FFEF7B 044 lsra
00FFEF7C 056 rorb
00FFEF7D 03F swi
00FFEF7E 002 fcb MF_OUTCH ; send out the byte
00FFEF7F 0FC0009FE ldd xm_crc ; get back CRC
00FFEF82 03F swi
00FFEF83 002 fcb MF_OUTCH ; and send out low byte
00FFEF84 020007 bra xm_send3
xm_send2:
00FFEF86 08D14F bsr xm_calc_checksum
00FFEF88 0F60009F7 ldb xm_checksum
00FFEF8B 03F swi
00FFEF8C 002 fcb MF_OUTCH
xm_send3:
00FFEF8D 03F swi
00FFEF8E 0CCFFFFFF ldd #-1 ; block until input is present
00FFEF91 001 fcb MF_INCH
00FFEF92 0C1006 cmpb #ACK
00FFEF94 026FB3 bne xm_send4 ; not an ACK then resend the record
00FFEF96 07C0009FA inc xm_packetnum ; increment packet number
00FFEF99 030080 leax 128,x ; advance buffer pointer
00FFEF9B 0BC000926 cmpx mon_r2+2
00FFEF9E 025FA9 blo xm_send4 ; go send next record
00FFEFA0 0C6004 ldb #EOT ; send end of transmission
00FFEFA2 03F swi
00FFEFA3 002 fcb MF_OUTCH
00FFEFA4 03F swi
00FFEFA5 002 fcb MF_OUTCH
00FFEFA6 03F swi
00FFEFA7 002 fcb MF_OUTCH
00FFEFA8 039 rts
; ------------------------------------------------------------------------------
; Get a byte, checking for a receive timeout.
;
; Returns:
; accb = byte (0 to 255) or -1 if timed out
; ------------------------------------------------------------------------------
xm_getbyte:
xm_gb1:
00FFEFA9 07DFFC020 tst xm_timer ; check the timeout - 2048 ticks (3 seconds approx.)
00FFEFAC 02B009 bmi xm_gb2
00FFEFAE 04F clra ; non-blocking
00FFEFAF 05F clrb
00FFEFB0 03F swi
00FFEFB1 001 fcb MF_INCH ; try and get a character
00FFEFB2 02BFF5 bmi xm_gb1 ; if no character, try again
00FFEFB4 08D1BA bsr xm_outbyteAsHex
00FFEFB6 039 rts
xm_gb2:
00FFEFB7 0C6FFF ldb #-1
00FFEFB9 039 rts
; ------------------------------------------------------------------------------
; XModem Receive
;
; Parameters:
; none
; Modifies:
; All
; Returns:
; none
; ------------------------------------------------------------------------------
xm_ReceiveStart:
00FFEFBA 017FFF1FB lbsr Delay3s ; give a little bit of time for sender
*** warning 1: Long branch within short branch range could be optimized
00FFEFBD 017FFF1F8 lbsr Delay3s
*** warning 1: Long branch within short branch range could be optimized
00FFEFC0 017FFF1F5 lbsr Delay3s
*** warning 1: Long branch within short branch range could be optimized
00FFEFC3 0170005CB lbsr GetNumber ; Get the transfer address
00FFEFC6 05D tstb ; Make sure we got a value
00FFEFC7 127000392 lbeq Monitor
00FFEFCA 0BE000912 ldx mon_numwka+2 ; X = transfer address
00FFEFCD 07F0009FA clr xm_packetnum ; initialize
00FFEFD0 086043 lda #'C' ; try for CRC first
00FFEFD2 0B70009F5 sta xm_protocol
xm_receive:
00FFEFD5 086002 lda #2 ; number of times to retry -1
xm_rcv5:
00FFEFD7 0F60009F5 ldb xm_protocol ; indicate we want a transfer (send protocol byte)
00FFEFDA 03F swi
00FFEFDB 00D fcb MF_SerialPutchar
xm_rcv4:
00FFEFDC 07FFFC020 clr xm_timer ; clear the timeout
xm_rcv1:
00FFEFDF 08DFC8 bsr xm_getbyte
00FFEFE1 05D tstb
00FFEFE2 02B0A1 bmi xm_retry1 ; timeout on protocol id?
00FFEFE4 0C1001 cmpb #SOH ; it should be start of a transfer
00FFEFE6 027012 beq xm_SOH
00FFEFE8 0C1004 cmpb #EOT
00FFEFEA 027092 beq xm_EOT ; or end of transfer (EOT)
00FFEFEC 0C1018 cmpb #CAN
00FFEFEE 027FE5 beq xm_receive ; might be a cancel
00FFEFF0 0C1017 cmpb #ETB
00FFEFF2 02708A beq xm_EOT
xm_rcv_nak: ; wasn't a valid start so
00FFEFF4 0C6015 ldb #NAK ; send a NAK
00FFEFF6 03F swi
00FFEFF7 00D fcb MF_SerialPutchar ; and try again
00FFEFF8 020FE2 bra xm_rcv4
xm_SOH:
00FFEFFA 08DFAD bsr xm_getbyte ; get packet number
00FFEFFC 02B078 bmi xm_rcv_to1
00FFEFFE 0F70009FB stb xm_packetnum+1
00FFF001 034004 pshs b ; save it
00FFF003 08DFA4 bsr xm_getbyte ; get complement of packet number
00FFF005 02B06D bmi xm_rcv_to2
00FFF007 0EBE04 addb ,s ; add the two values
00FFF009 0C40FF andb #$FF ; the sum should be $FF
00FFF00B 0C00FF subb #$FF
00FFF00D 0F70009F6 stb xm_flag ; should be storing a zero if there is no error
00FFF010 18E000000 ldy #0 ; y = payload byte counter
00FFF013 01F013 tfr x,u
xm_rcv2:
00FFF015 08DF92 bsr xm_getbyte
00FFF017 02B05D bmi xm_rcv_to1
00FFF019 0E7C00 stb ,u+ ; store the byte to memory
00FFF01B 031201 iny
00FFF01D 18C000080 cmpy #128 ; 128 bytes per payload
00FFF020 025FF3 blo xm_rcv2
00FFF022 08DF85 bsr xm_getbyte ; get checksum or CRC byte
00FFF024 02B050 bmi xm_rcv_to1
00FFF026 0F70009FC stb xm_tmp ; stuff checksum/CRC byte
00FFF029 0F60009F5 ldb xm_protocol
00FFF02C 0C1043 cmpb #'C'
00FFF02E 026022 bne xm_rcv_chksum
00FFF030 08DF77 bsr xm_getbyte ; get low order CRC byte
00FFF032 02B042 bmi xm_rcv_to1
00FFF034 0B60009FC lda xm_tmp ; get the high byte
00FFF037 058 aslb ; prepare to combine high and low order
00FFF038 058 aslb
00FFF039 058 aslb
00FFF03A 058 aslb
00FFF03B 044 lsra ; shift low nybble of acca into accb
00FFF03C 056 rorb
00FFF03D 044 lsra
00FFF03E 056 rorb
00FFF03F 044 lsra
00FFF040 056 rorb
00FFF041 044 lsra
00FFF042 056 rorb
00FFF043 08400F anda #$00F ; mask off any extra bits
00FFF045 0FD0009F8 std xm_tmp2
00FFF048 08D09F bsr xm_calc_crc ; compute the CRC-16 for the received data
00FFF04A 0FC0009FE ldd xm_crc ; and compare to received value
00FFF04D 1B30009F8 cmpd xm_tmp2
00FFF050 020008 bra xm_rcv3
xm_rcv_chksum:
00FFF052 08D083 bsr xm_calc_checksum
00FFF054 0F60009F7 ldb xm_checksum
00FFF057 0F10009FC cmpb xm_tmp ; where we stuffed the byte
xm_rcv3:
00FFF05A 026F98 bne xm_rcv_nak ; if not the same, NAK
00FFF05C 07D0009F6 tst xm_flag
00FFF05F 026F93 bne xm_rcv_nak ; bad packet number?
00FFF061 0C6006 ldb #ACK ; packet recieved okay, send back an ACK
00FFF063 03F swi
00FFF064 00D fcb MF_SerialPutchar
00FFF065 0F60009FB ldb xm_packetnum+1 ; did we receive the same packet
00FFF068 0F10009FA cmpb xm_packetnum
00FFF06B 027F6F beq xm_rcv4 ; same packet received, dont update buffer pointer
00FFF06D 0F70009FA stb xm_packetnum ; update last seen packet number
00FFF070 030080 leax 128,x ; increment buffer pointer
00FFF072 020F68 bra xm_rcv4 ; and go back for next packet
xm_rcv_to2:
00FFF074 032601 leas 1,s ; get rid of stacked byte
xm_rcv_to1:
00FFF076 0CCFFF09E ldd #msgXmTimeout
00FFF079 03F swi
00FFF07A 004 fcb MF_DisplayString
00FFF07B 0160002DE lbra Monitor
xm_EOT: ; end of transmission received, return
00FFF07E 0C6006 ldb #ACK ; ACK the EOT
00FFF080 03F swi
00FFF081 00D fcb MF_SerialPutchar
00FFF082 0160002D7 lbra Monitor
xm_retry1:
00FFF085 04A deca
00FFF086 02AF4F bpl xm_rcv5
00FFF088 0B60009F5 lda xm_protocol
00FFF08B 081015 cmpa #NAK ; are we already lowered down to checksum protocol?
00FFF08D 027007 beq xm_noTransmitter ; did we try both checksum and CRC?
00FFF08F 086015 lda #NAK
00FFF091 0B70009F5 sta xm_protocol
00FFF094 020F3F bra xm_receive
xm_noTransmitter:
00FFF096 0CCFFF0B2 ldd #msgXmNoTransmitter
00FFF099 03F swi
00FFF09A 004 fcb MF_DisplayString
00FFF09B 0160002BE lbra Monitor
msgXmTimeout:
00FFF09E 05806D06F06406506D03A fcb "Xmodem: timed out",CR,LF,0
00FFF0A5 02007406906D065064020
00FFF0AC 06F07507400D00A000
msgXmNoTransmitter:
00FFF0B2 05804D06F06406506D03A fcb "XModem: transmitter not responding",CR,LF,0
00FFF0B9 02007407206106E07306D
00FFF0C0 06907407406507202006E
00FFF0C7 06F074020072065073070
00FFF0CE 06F06E06406906E06700D
00FFF0D5 00A000
; ------------------------------------------------------------------------------
; Calculate checksum value. The checksum is simply the low order eight bits of
; the sum of all the bytes in the payload area.
;
; Stack space:
; two words
; Modifies:
; xm_checksum contains the checksum value for the record
; Parameters:
; X = buffer address
; Returns:
; none
; ------------------------------------------------------------------------------
xm_calc_checksum:
00FFF0D7 034016 pshs d,x
00FFF0D9 04F clra
00FFF0DA 05F clrb
xm_cs1:
00FFF0DB 0EB800 addb ,x+
00FFF0DD 04C inca
00FFF0DE 081080 cmpa #128
00FFF0E0 025FF9 blo xm_cs1
00FFF0E2 0C40FF andb #$FF
00FFF0E4 0F70009F7 stb xm_checksum
00FFF0E7 035096 puls d,x,pc
; ------------------------------------------------------------------------------
; Compute CRC-16 of buffer.
;
;int calcrc(char *ptr, int count)
;{
; int crc;
; char i;
; crc = 0;
; while (--count >= 0)
; {
; crc = crc ^ (int) (*ptr++ << 8);
; i = 8;
; do
; {
; if (crc & 0x8000)
; crc = crc << 1 ^ 0x1021;
; else
; crc = crc << 1;
; } while(--i);
; }
; return (crc);
;}
;
; Modifies:
; xm_crc variable
; Parameters:
; u = buffer address
; Returns:
; none
; ------------------------------------------------------------------------------
xm_calc_crc:
00FFF0E9 034076 pshs d,x,y,u
00FFF0EB 07F0009FE clr xm_crc
00FFF0EE 07F0009FF clr xm_crc+1
00FFF0F1 0CE000000 ldu #0 ; u = byte count
xm_crc1:
00FFF0F4 0E6800 ldb ,x+ ; get byte
00FFF0F6 07F0009FC clr xm_tmp ; save in temp
00FFF0F9 0F70009FD stb xm_tmp+1
00FFF0FC 0780009FD asl xm_tmp+1 ; shift temp eight bits to left
00FFF0FF 0790009FC rol xm_tmp
00FFF102 0780009FD asl xm_tmp+1
00FFF105 0790009FC rol xm_tmp
00FFF108 0780009FD asl xm_tmp+1
00FFF10B 0790009FC rol xm_tmp
00FFF10E 0780009FD asl xm_tmp+1
00FFF111 0790009FC rol xm_tmp
00FFF114 0780009FD asl xm_tmp+1
00FFF117 0790009FC rol xm_tmp
00FFF11A 0780009FD asl xm_tmp+1
00FFF11D 0790009FC rol xm_tmp
00FFF120 0780009FD asl xm_tmp+1
00FFF123 0790009FC rol xm_tmp
00FFF126 0780009FD asl xm_tmp+1
00FFF129 0790009FC rol xm_tmp
00FFF12C 0FC0009FE ldd xm_crc ; crc = crc ^ tmp
00FFF12F 0B80009FC eora xm_tmp
00FFF132 0F80009FD eorb xm_tmp+1
00FFF135 0FD0009FE std xm_crc
00FFF138 18E000000 ldy #0
xm_crc4:
00FFF13B 0F60009FE ldb xm_crc ; get high byte
00FFF13E 0C5008 bitb #$8 ; check for $8000
00FFF140 02700E beq xm_crc2 ; no? then just go shift
00FFF142 0FC0009FE ldd xm_crc ; load
00FFF145 058 aslb ; shift
00FFF146 049 rola
00FFF147 0C8021 eorb #$021 ; and xor
00FFF149 088001 eora #$001
00FFF14B 0FD0009FE std xm_crc ; store it back
00FFF14E 020008 bra xm_crc3
xm_crc2:
00FFF150 0FC0009FE ldd xm_crc ; load
00FFF153 058 aslb ; shift
00FFF154 049 rola
00FFF155 0FD0009FE std xm_crc ; and store
xm_crc3:
00FFF158 031201 iny
00FFF15A 18C000008 cmpy #8 ; repeat eight times
00FFF15D 025FDC blo xm_crc4
00FFF15F 033401 leau 1,u ; increment byte count
00FFF161 283000080 cmpu #128
00FFF164 0FC0009FE ldd xm_crc ; we want only a 16-bit CRC
00FFF167 08400F anda #$0F
00FFF169 0FD0009FE std xm_crc
00FFF16C 025F86 blo xm_crc1
00FFF16E 0350F6 puls d,x,y,u,pc
xm_outbyteAsHex:
00FFF170 034006 pshs d
00FFF172 0FC000800 ldd CharOutVec ; get current char out vector
00FFF175 034006 pshs d ; save it
00FFF177 0CCFFE31F ldd #ScreenDisplayChar ; set output vector to screen display
00FFF17A 0FD000800 std CharOUtVec
00FFF17D 0EC602 ldd 2,s ; get passed data
00FFF17F 017FFF2B8 lbsr DispByteAsHex ; and display on-screen
*** warning 1: Long branch within short branch range could be optimized
00FFF182 0C6020 ldb #' '
00FFF184 017FFF198 lbsr ScreenDisplayChar
*** warning 1: Long branch within short branch range could be optimized
00FFF187 035006 puls d ; get back old char out vector
00FFF189 0FD000800 std CharOutVec ; and restore it
00FFF18C 035006 puls d ; restore input arguments
00FFF18E 039 rts
;------------------------------------------------------------------------------
; Check if there is a keyboard character available. If so return true (<0)
; otherwise return false (0) in accb.
3038,54 → 3601,55
;------------------------------------------------------------------------------
;
KeybdCheckForKeyDirect:
00FFEEA7 020BE7 bra DBGCheckForKey
00FFF18F 0208FF bra DBGCheckForKey
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
INCH:
00FFEEA9 034004 pshs b
00FFF191 034004 pshs b
INCH2:
00FFEEAB 0150F6FFFFFFFE0 ldb COREID
00FFEEB0 0F1FFC010 cmpb IOFocusID ; if we do not have focus, block
00FFEEB3 026FF6 bne INCH2
00FFF193 0150F6FFFFFFFE0 ldb COREID
00FFF198 0F1FFC010 cmpb IOFocusID ; if we do not have focus, block
00FFF19B 026FF6 bne INCH2
; ldb #$800 ; block if no key available, get scancode directly
; bra GetKey
; jsr [CharInVec] ; vector is being overwritten somehow
00FFEEB5 017FFFDAC lbsr SerialPeekCharDirect
00FFF19D 017FFFAD3 lbsr SerialPeekCharDirect
*** warning 1: Long branch within short branch range could be optimized
00FFEEB8 04D tsta
00FFEEB9 02B003 bmi INCH1 ; block if no key available
00FFEEBB 032601 leas 1,s ; get rid of blocking status
00FFEEBD 039 rts
; lbsr SerialGetChar
00FFF1A0 04D tsta
00FFF1A1 02B003 bmi INCH1 ; block if no key available
00FFF1A3 032601 leas 1,s ; get rid of blocking status
00FFF1A5 039 rts ; return character
INCH1:
00FFEEBE 035004 puls b ; check blocking status
00FFEEC0 05D tstb
00FFEEC1 02BFE6 bmi INCH ; if blocking, loop
00FFEEC3 0CCFFFFFF ldd #-1 ; return -1 if no char available
00FFEEC6 039 rts
00FFF1A6 035004 puls b ; check blocking status
00FFF1A8 05D tstb
00FFF1A9 02BFE6 bmi INCH ; if blocking, loop
00FFF1AB 0CCFFFFFF ldd #-1 ; return -1 if no char available
00FFF1AE 039 rts
INCHE:
00FFEEC7 08DFE0 bsr INCH
00FFEEC9 020009 bra INCHEK3
00FFF1AF 08DFE0 bsr INCH
00FFF1B1 020009 bra INCHEK3
INCHEK:
00FFEECB 08DFDC bsr INCH
00FFEECD 01507DFFFFFCA00 tst KeybdEcho
00FFEED2 02700C beq INCHEK1
00FFF1B3 08DFDC bsr INCH
00FFF1B5 01507DFFFFFCA00 tst KeybdEcho
00FFF1BA 02700C beq INCHEK1
INCHEK3:
00FFEED4 08100D cmpa #CR
00FFEED6 026005 bne INCHEK2
00FFEED8 017FFE1F7 lbsr CRLF
00FFF1BC 08100D cmpa #CR
00FFF1BE 026005 bne INCHEK2
00FFF1C0 017FFDF0F lbsr CRLF
*** warning 1: Long branch within short branch range could be optimized
00FFEEDB 020003 bra INCHEK1
00FFF1C3 020003 bra INCHEK1
INCHEK2:
00FFEEDD 017FFF439 lbsr DisplayChar
00FFF1C5 017FFF154 lbsr DisplayChar
*** warning 1: Long branch within short branch range could be optimized
INCHEK1:
00FFEEE0 039 rts
00FFF1C8 039 rts
OUTCH:
00FFEEE1 06E90F000800 jmp [CharOutVec]
00FFF1C9 06E90F000800 jmp [CharOutVec]
;------------------------------------------------------------------------------
; r1 0=echo off, non-zero = echo on
3092,8 → 3656,8
;------------------------------------------------------------------------------
;
SetKeyboardEcho:
00FFEEE5 0150F7FFFFFCA00 stb KeybdEcho
00FFEEEA 039 rts
00FFF1CD 0150F7FFFFFCA00 stb KeybdEcho
00FFF1D2 039 rts
;------------------------------------------------------------------------------
3102,9 → 3666,9
;------------------------------------------------------------------------------
ShowSprites:
00FFEEEB 0150BFFFFE103C0 stx SPRITE_CTRL+SPRITE_EN
00FFEEF0 0150FDFFFE103C2 std SPRITE_CTRL+SPRITE_EN+2
00FFEEF5 039 rts
00FFF1D3 0150BFFFFE103C0 stx SPRITE_CTRL+SPRITE_EN
00FFF1D8 0150FDFFFE103C2 std SPRITE_CTRL+SPRITE_EN+2
00FFF1DD 039 rts
;==============================================================================
; Femtiki Operating System.
3111,74 → 3675,74
;==============================================================================
OSCallTbl:
00FFEEF6 000000 fcw 0
00FFEEF8 000000 fcw 0
00FFEEFA 000000 fcw 0
00FFEEFC 000000 fcw 0
00FFEEFE 000000 fcw 0
00FFEF00 000000 fcw 0
00FFEF02 000000 fcw 0
00FFEF04 000000 fcw 0
00FFEF06 000000 fcw 0
00FFEF08 000000 fcw 0
00FFEF0A 000000 fcw 0
00FFEF0C 000000 fcw 0
00FFEF0E 000000 fcw 0
00FFEF10 000000 fcw 0
00FFEF12 000000 fcw 0
00FFEF14 000000 fcw 0
00FFEF16 000000 fcw 0
00FFEF18 000000 fcw 0
00FFEF1A 000000 fcw 0
00FFEF1C 000000 fcw 0
00FFEF1E 000000 fcw 0
00FFEF20 000000 fcw 0
00FFEF22 FFEF3F fcw ReleaseIOFocus
00FFEF24 000000 fcw 0
00FFEF26 FFEF28 fcw RequestIOFocus
00FFF1DE 000000 fcw 0
00FFF1E0 000000 fcw 0
00FFF1E2 000000 fcw 0
00FFF1E4 000000 fcw 0
00FFF1E6 000000 fcw 0
00FFF1E8 000000 fcw 0
00FFF1EA 000000 fcw 0
00FFF1EC 000000 fcw 0
00FFF1EE 000000 fcw 0
00FFF1F0 000000 fcw 0
00FFF1F2 000000 fcw 0
00FFF1F4 000000 fcw 0
00FFF1F6 000000 fcw 0
00FFF1F8 000000 fcw 0
00FFF1FA 000000 fcw 0
00FFF1FC 000000 fcw 0
00FFF1FE 000000 fcw 0
00FFF200 000000 fcw 0
00FFF202 000000 fcw 0
00FFF204 000000 fcw 0
00FFF206 000000 fcw 0
00FFF208 000000 fcw 0
00FFF20A FFF227 fcw ReleaseIOFocus
00FFF20C 000000 fcw 0
00FFF20E FFF210 fcw RequestIOFocus
NumOSFuncs EQU (*-OSCallTbl)/2
RequestIOFocus:
00FFEF28 0150F6FFFFFFFE0 ldb COREID
00FFEF2D 08EFFC000 ldx #IOFocusList
00FFEF30 03A abx
00FFEF31 0A7804 sta ,x
00FFEF33 07DFFC010 tst IOFocusID
00FFEF36 1260007D1 lbne oscx
00FFEF39 0F7FFC010 stb IOFocusID
00FFEF3C 0160007CB lbra oscx
00FFF210 0150F6FFFFFFFE0 ldb COREID
00FFF215 08EFFC000 ldx #IOFocusList
00FFF218 03A abx
00FFF219 0A7804 sta ,x
00FFF21B 07DFFC010 tst IOFocusID
00FFF21E 1260008DC lbne oscx
00FFF221 0F7FFC010 stb IOFocusID
00FFF224 0160008D6 lbra oscx
ReleaseIOFocus:
00FFEF3F 0150F6FFFFFFFE0 ldb COREID
00FFEF44 08EFFC000 ldx #IOFocusList
00FFEF47 03A abx
00FFEF48 06F804 clr ,x ; clear the request indicator
00FFEF4A 017FFF2BC lbsr CopyScreenToVirtualScreen
00FFF227 0150F6FFFFFFFE0 ldb COREID
00FFF22C 08EFFC000 ldx #IOFocusList
00FFF22F 03A abx
00FFF230 06F804 clr ,x ; clear the request indicator
00FFF232 017FFEFD7 lbsr CopyScreenToVirtualScreen
*** warning 1: Long branch within short branch range could be optimized
00FFEF4D 0F1FFC010 cmpb IOFocusID ; are we the one with the focus?
00FFEF50 1260007B7 lbne oscx
00FFF235 0F1FFC010 cmpb IOFocusID ; are we the one with the focus?
00FFF238 1260008C2 lbne oscx
; We had the focus, so now a new core needs the focus.
; Search the focus list for a requestor. If no requester
; is found, give focus to core #1.
00FFEF53 08600F lda #15
00FFF23B 08600F lda #15
riof2:
00FFEF55 05C incb
00FFEF56 0C400F andb #15
00FFEF58 03A abx
00FFEF59 06D804 tst ,x
00FFEF5B 026009 bne riof1
00FFEF5D 04A deca
00FFEF5E 026FF5 bne riof2
00FFF23D 05C incb
00FFF23E 0C400F andb #15
00FFF240 03A abx
00FFF241 06D804 tst ,x
00FFF243 026009 bne riof1
00FFF245 04A deca
00FFF246 026FF5 bne riof2
; If no focus is requested by anyone, give to core #1
00FFEF60 0C6001 ldb #1
00FFEF62 086018 lda #24
00FFEF64 0A7804 sta ,x
00FFF248 0C6001 ldb #1
00FFF24A 086018 lda #24
00FFF24C 0A7804 sta ,x
riof1:
00FFEF66 0F7FFC010 stb IOFocusID
00FFEF69 017FFF266 lbsr CopyVirtualScreenToScreen
00FFF24E 0F7FFC010 stb IOFocusID
00FFF251 017FFEF81 lbsr CopyVirtualScreenToScreen
*** warning 1: Long branch within short branch range could be optimized
00FFEF6C 01600079B lbra oscx
00FFF254 0160008A6 lbra oscx
;==============================================================================
3196,19 → 3760,19
;------------------------------------------------------------------------------
mon_srand:
00FFEF6F 18E000000 ldy #0
00FFF257 18E000000 ldy #0
mon_srand1:
00FFEF72 0151BFFFFE30604 sty PRNG+4 ; select channel
00FFEF77 01507FFFFE30608 clr PRNG+8
00FFEF7C 01507FFFFE30609 clr PRNG+9
00FFEF81 0150FDFFFE3060A std PRNG+10 ; update low half of value
00FFEF86 01507FFFFE3060C clr PRNG+12
00FFEF8B 01507FFFFE3060D clr PRNG+13
00FFEF90 0150BFFFFE3060E stx PRNG+14 ; update low half of value
00FFEF95 031201 iny
00FFEF97 18C000400 cmpy #$400 ; 1k channels
00FFEF9A 025FD6 blo mon_srand1
00FFEF9C 039 rts
00FFF25A 0151BFFFFE30604 sty PRNG+4 ; select channel
00FFF25F 01507FFFFE30608 clr PRNG+8
00FFF264 01507FFFFE30609 clr PRNG+9
00FFF269 0150FDFFFE3060A std PRNG+10 ; update low half of value
00FFF26E 01507FFFFE3060C clr PRNG+12
00FFF273 01507FFFFE3060D clr PRNG+13
00FFF278 0150BFFFFE3060E stx PRNG+14 ; update low half of value
00FFF27D 031201 iny
00FFF27F 18C000400 cmpy #$400 ; 1k channels
00FFF282 025FD6 blo mon_srand1
00FFF284 039 rts
;------------------------------------------------------------------------------
; Get a random number and generate the next one.
3220,11 → 3784,11
;------------------------------------------------------------------------------
mon_rand:
00FFEF9D 0150FDFFFE30604 std PRNG+4 ; select channel
00FFEFA2 0150BEFFFE30600 ldx PRNG+0
00FFEFA7 0150FCFFFE30602 ldd PRNG+2
00FFEFAC 0150F7FFFE30603 stb PRNG+3 ; trigger calc of next number
00FFEFB1 039 rts
00FFF285 0150FDFFFE30604 std PRNG+4 ; select channel
00FFF28A 0150BEFFFE30600 ldx PRNG+0
00FFF28F 0150FCFFFE30602 ldd PRNG+2
00FFF294 0150F7FFFE30603 stb PRNG+3 ; trigger calc of next number
00FFF299 039 rts
;==============================================================================
; System Monitor
3233,222 → 3797,253
; Command Tables
cmdTable1:
00FFEFB2 03C83E fcb '<','>'+$800
00FFEFB4 062873 fcb 'b','s'+$800
00FFEFB6 062863 fcb 'b','c'+$800
00FFEFB8 044852 fcb 'D','R'+$800
00FFEFBA 844 fcb 'D'+$800
00FFEFBB 83A fcb ':'+$800
00FFEFBC 046049847 fcb "FI",'G'+$800
00FFEFBF 04604984C fcb "FI",'L'+$800
00FFEFC2 04684C fcb 'F','L'+$800
00FFEFC4 84A fcb 'J'+$800
00FFEFC5 05204104D054045053854 fcb "RAMTES",'T'+$800
00FFEFCC 053050844 fcb "SP",'D'+$800
00FFEFCF 054049852 fcb "TI",'R'+$800
00FFEFD2 855 fcb 'U'+$800
00FFEFD3 065078069874 fcb "exi",'t'+$800
00FFEFD7 83F fcb '?'+$800
00FFEFD8 04304C853 fcb "CL",'S'+$800
00FFEFDB 053031839 fcb "S1",'9'+$800
00FFEFDE 04A044834 fcb "JD",'4'+$800
00FFEFE1 000000 fcw 0
00FFF29A 03C83E fcb '<','>'+$800
00FFF29C 04282B fcb 'B','+'+$800
00FFF29E 04282D fcb 'B','-'+$800
00FFF2A0 044852 fcb 'D','R'+$800
00FFF2A2 844 fcb 'D'+$800
00FFF2A3 83A fcb ':'+$800
00FFF2A4 046049847 fcb "FI",'G'+$800
00FFF2A7 04604984C fcb "FI",'L'+$800
00FFF2AA 04684C fcb 'F','L'+$800
00FFF2AC 84A fcb 'J'+$800
00FFF2AD 05204104D054045053854 fcb "RAMTES",'T'+$800
00FFF2B4 053050844 fcb "SP",'D'+$800
00FFF2B7 054049852 fcb "TI",'R'+$800
00FFF2BA 855 fcb 'U'+$800
00FFF2BB 065078069874 fcb "exi",'t'+$800
00FFF2BF 83F fcb '?'+$800
00FFF2C0 04304C853 fcb "CL",'S'+$800
00FFF2C3 053031839 fcb "S1",'9'+$800
00FFF2C6 04A044834 fcb "JD",'4'+$800
00FFF2C9 05804D852 fcb "XM",'R'+$800
00FFF2CC 05804D853 fcb "XM",'S'+$800
00FFF2CF 052841 fcb 'R','A'+$800
00FFF2D1 052842 fcb 'R','B'+$800
00FFF2D3 052044050852 fcb "RDP",'R'+$800
00FFF2D7 052844 fcb 'R','D'+$800
00FFF2D9 052858 fcb 'R','X'+$800
00FFF2DB 052859 fcb 'R','Y'+$800
00FFF2DD 052855 fcb 'R','U'+$800
00FFF2DF 052853 fcb 'R','S'+$800
00FFF2E1 052043043852 fcb "RCC",'R'+$800
00FFF2E5 052050843 fcb "RP",'C'+$800
00FFF2E8 04C842 fcb 'L','B'+$800
00FFF2EA 000000 fcw 0
cmdTable2:
00FFEFE3 FFF0F8 fcw Redirect
00FFEFE5 FFF13A fcw MonArmBreakpoint
00FFEFE7 FFF145 fcw MonDisarmBreakpoint
00FFEFE9 FFF54A fcw DumpRegs
00FFEFEB FFF484 fcw DumpMemory
00FFEFED FFF4E0 fcw EditMemory
00FFEFEF FE0000 fcw $FE0000 ; FIG forth
00FFEFF1 FFF520 fcw FillMemory
00FFEFF3 FFF60B fcw DumpIOFocusList
00FFEFF5 FFF595 fcw jump_to_code
00FFEFF7 FFD400 fcw $FFD400
00FFEFF9 FF8000 fcw $FF8000 ; sprite demo
00FFEFFB FFE4F4 fcw rtc_read
00FFEFFD FF8003 fcw $FF8003 ; unassembler
00FFEFFF FFF6F3 fcw xitMonitor
00FFF001 FFF11E fcw PromptHelp
00FFF003 FFF126 fcw PromptClearscreen
00FFF005 FFEE37 fcw S19Loader
00FFF007 FFD400 fcw $FFD400
00FFF2EC FFF427 fcw Redirect
00FFF2EE FFF469 fcw MonArmBreakpoint
00FFF2F0 FFF474 fcw MonDisarmBreakpoint
00FFF2F2 FFF899 fcw DumpRegs
00FFF2F4 FFF7D0 fcw DumpMemory
00FFF2F6 FFF82C fcw EditMemory
00FFF2F8 FE0000 fcw $FE0000 ; FIG forth
00FFF2FA FFF86F fcw FillMemory
00FFF2FC FFF9F5 fcw DumpIOFocusList
00FFF2FE FFF980 fcw jump_to_code
00FFF300 FFD400 fcw $FFD400
00FFF302 FF8000 fcw $FF8000 ; sprite demo
00FFF304 FFE524 fcw rtc_read
00FFF306 FF8003 fcw $FF8003 ; unassembler
00FFF308 FFFAE6 fcw xitMonitor
00FFF30A FFF44D fcw PromptHelp
00FFF30C FFF455 fcw PromptClearscreen
00FFF30E FFEE8F fcw S19Loader
00FFF310 FFD400 fcw $FFD400
00FFF312 FFEFBA fcw xm_ReceiveStart
00FFF314 FFEF2C fcw xm_SendStart
00FFF316 FFF8E4 fcw SetRegA
00FFF318 FFF8F3 fcw SetRegB
00FFF31A FFF94D fcw SetRegDPR
00FFF31C FFF902 fcw SetRegD
00FFF31E FFF911 fcw SetRegX
00FFF320 FFF920 fcw SetRegY
00FFF322 FFF92F fcw SetRegU
00FFF324 FFF93E fcw SetRegS
00FFF326 FFF95C fcw SetRegCCR
00FFF328 FFF96B fcw SetRegPC
00FFF32A FFFBD2 fcw ListBreakpoints
CmdPrompt:
00FFF009 017FFE0C6 lbsr CRLF
00FFF32C 017FFDDA3 lbsr CRLF
*** warning 1: Long branch within short branch range could be optimized
00FFF00C 0C6024 ldb #'$'
00FFF00E 017FFFED0 lbsr OUTCH
00FFF32F 0C6024 ldb #'$'
00FFF331 017FFFE95 lbsr OUTCH
*** warning 1: Long branch within short branch range could be optimized
00FFF011 016FFFECD lbra OUTCH
00FFF334 016FFFE92 lbra OUTCH
*** warning 1: Long branch within short branch range could be optimized
msgF09Starting:
00FFF014 04606506D07406906B069 fcb "Femtiki F09 Multi-core OS Starting",CR,LF,0
00FFF01B 02004603003902004D075
00FFF022 06C07406902D06306F072
00FFF029 06502004F053020053074
00FFF030 06107207406906E06700D
00FFF037 00A000
00FFF337 04606506D07406906B069 fcb "Femtiki F09 Multi-core OS Starting",CR,LF,0
00FFF33E 02004603003902004D075
00FFF345 06C07406902D06306F072
00FFF34C 06502004F053020053074
00FFF353 06107207406906E06700D
00FFF35A 00A000
Monitor:
00FFF039 0FC00092C ldd mon_init ; check special code to see if monitor has been initialized
00FFF03C 18312D687 cmpd #1234567
00FFF03F 02704D beq mon1
00FFF041 07F000810 clr BreakpointFlag
00FFF044 07F000811 clr NumSetBreakpoints
00FFF047 0CC00007B ldd #123
00FFF04A 08E00028E ldx #654
00FFF04D 017FFFF1F lbsr mon_srand
00FFF35C 01C0EF andcc #$EF ; SWI disables interrupts, re-enable them
00FFF35E 08601F lda #31 ; Timer is IRQ #31
00FFF360 0150B7FFFE3F010 sta PIC+16 ; register 16 is edge sense reset reg
00FFF365 0FC00092C ldd mon_init ; check special code to see if monitor has been initialized
00FFF368 18312D687 cmpd #1234567
00FFF36B 02704D beq mon1
00FFF36D 07F000810 clr BreakpointFlag
00FFF370 07F000811 clr NumSetBreakpoints
00FFF373 0CC00007B ldd #123
00FFF376 08E00028E ldx #654
00FFF379 017FFFEDB lbsr mon_srand
*** warning 1: Long branch within short branch range could be optimized
00FFF050 0CCFFF014 ldd #msgF09Starting
00FFF053 017FFF384 lbsr DisplayString
00FFF37C 0CCFFF337 ldd #msgF09Starting
00FFF37F 017FFF05B lbsr DisplayString
*** warning 1: Long branch within short branch range could be optimized
00FFF056 0CCFFF2CF ldd #HelpMsg
00FFF059 017FFF37E lbsr DisplayString
00FFF382 0CCFFF5FE ldd #HelpMsg
00FFF385 017FFF055 lbsr DisplayString
*** warning 1: Long branch within short branch range could be optimized
00FFF05C 0CCFFF009 ldd #CmdPrompt
00FFF05F 0FD000808 std CmdPromptJI
00FFF062 0CCFFF2B6 ldd #DisplayErr
00FFF065 0FD00080C std MonErrVec
00FFF068 0CC0063FF ldd #$63FF ; default app stack
00FFF06B 0FD000908 std mon_SSAVE
00FFF06E 07F00090E clr mon_DPRSAVE ;
00FFF071 01F0A8 tfr ccr,a
00FFF073 0B700090F sta mon_CCRSAVE
00FFF076 07F00090A clr mon_PCSAVE
00FFF079 0CCFFF039 ldd #Monitor
00FFF07C 0FD00090B std mon_PCSAVE+1
00FFF07F 07F000902 clr mon_XSAVE
00FFF082 07F000904 clr mon_YSAVE
00FFF085 07F000906 clr mon_USAVE
00FFF088 0CC12D687 ldd #1234567
00FFF08B 0FD00092C std mon_init
00FFF388 0CCFFF32C ldd #CmdPrompt
00FFF38B 0FD000808 std CmdPromptJI
00FFF38E 0CCFFF5E5 ldd #DisplayErr
00FFF391 0FD00080C std MonErrVec
00FFF394 0CC0063FF ldd #$63FF ; default app stack
00FFF397 0FD000908 std mon_SSAVE
00FFF39A 07F00090E clr mon_DPRSAVE ;
00FFF39D 01F0A8 tfr ccr,a
00FFF39F 0B700090F sta mon_CCRSAVE
00FFF3A2 07F00090A clr mon_PCSAVE
00FFF3A5 0CCFFF35C ldd #Monitor
00FFF3A8 0FD00090B std mon_PCSAVE+1
00FFF3AB 07F000902 clr mon_XSAVE
00FFF3AE 07F000904 clr mon_YSAVE
00FFF3B1 07F000906 clr mon_USAVE
00FFF3B4 0CC12D687 ldd #1234567
00FFF3B7 0FD00092C std mon_init
mon1:
00FFF08E 03280F006FFF leas $6FFF ; reset stack pointer
00FFF092 05F clrb ; turn off keyboard echo
00FFF093 017FFFE4F lbsr SetKeyboardEcho
00FFF3BA 03280F006FFF leas $6FFF ; reset stack pointer
00FFF3BE 05F clrb ; turn off keyboard echo
00FFF3BF 017FFFE0B lbsr SetKeyboardEcho
*** warning 1: Long branch within short branch range could be optimized
; Reset IO vectors
00FFF096 0CCFFEC64 ldd #SerialPeekCharDirect
00FFF099 0FD000804 std CharInVec
00FFF09C 0CCFFE319 ldd #DisplayChar
00FFF09F 0FD000800 std CharOutVec
00FFF0A2 0CCFFF009 ldd #CmdPrompt
00FFF0A5 0FD000808 std CmdPromptJI
00FFF3C2 0CCFFEC73 ldd #SerialPeekCharDirect
00FFF3C5 0FD000804 std CharInVec
00FFF3C8 0CCFFE31C ldd #DisplayChar
00FFF3CB 0FD000800 std CharOutVec
00FFF3CE 0CCFFF32C ldd #CmdPrompt
00FFF3D1 0FD000808 std CmdPromptJI
; jsr RequestIOFocus
PromptLn:
00FFF0A8 0AD90F000808 jsr [CmdPromptJI]
00FFF3D4 0AD90F000808 jsr [CmdPromptJI]
; Get characters until a CR is keyed
Prompt3:
00FFF0AC 0CCFFFFFF ldd #-1 ; block until key present
00FFF0AF 017FFFDF7 lbsr INCH
00FFF3D8 0CCFFFFFF ldd #-1 ; block until key present
00FFF3DB 017FFFDB3 lbsr INCH
*** warning 1: Long branch within short branch range could be optimized
00FFF0B2 0C100D cmpb #CR ; carriage return?
00FFF0B4 027005 beq Prompt1
00FFF0B6 017FFFE28 lbsr OUTCH ; spit out the character
00FFF3DE 04D tsta ; should not get this with blocking
00FFF3DF 02BFF7 bmi Prompt3
00FFF3E1 0C100D cmpb #CR ; carriage return?
00FFF3E3 027005 beq Prompt1
00FFF3E5 017FFFDE1 lbsr OUTCH ; spit out the character
*** warning 1: Long branch within short branch range could be optimized
00FFF0B9 020FF1 bra Prompt3 ; and keep going
00FFF3E8 020FEE bra Prompt3 ; and keep going
; Process the screen line that the CR was keyed on
;
Prompt1:
00FFF0BB 0CC005050 ldd #$5050
00FFF0BE 0150FDFFFE60001 std LEDS
00FFF3EA 0CC005050 ldd #$5050
00FFF3ED 0150FDFFFE60001 std LEDS
; ldb RunningID
; cmpb #61
; bhi Prompt3
00FFF0C3 00F111 clr CursorCol ; go back to the start of the line
00FFF0C5 017FFF22A lbsr CalcScreenLoc ; calc screen memory location
00FFF3F2 00F111 clr CursorCol ; go back to the start of the line
00FFF3F4 017FFEEFE lbsr CalcScreenLoc ; calc screen memory location
*** warning 1: Long branch within short branch range could be optimized
00FFF0C8 01F002 tfr d,y
00FFF3F7 01F002 tfr d,y
skipDollar:
00FFF0CA 08D067 bsr MonGetNonSpace
00FFF0CC 0C1024 cmpb #'$'
00FFF0CE 027FFA beq skipDollar ; skip over '$' prompt character
00FFF3F9 08D067 bsr MonGetNonSpace
00FFF3FB 0C1024 cmpb #'$'
00FFF3FD 027FFA beq skipDollar ; skip over '$' prompt character
; Dispatch based on command
;
00FFF0D0 0313FF dey
00FFF0D2 01F023 tfr y,u ; save off input position
00FFF0D4 05F clrb
00FFF0D5 08EFFEFB2 ldx #cmdTable1
00FFF3FF 0313FF dey
00FFF401 01F023 tfr y,u ; save off input position
00FFF403 05F clrb
00FFF404 08EFFF29A ldx #cmdTable1
parseCmd1:
00FFF0D8 0A6A00 lda ,y+ ; get input character
00FFF0DA 06D804 tst ,x ; test for end of command
00FFF0DC 02B00F bmi endOfWord ;
00FFF0DE 0A1800 cmpa ,x+ ; does input match command?
00FFF0E0 027FF6 beq parseCmd1
00FFF407 0A6A00 lda ,y+ ; get input character
00FFF409 06D804 tst ,x ; test for end of command
00FFF40B 02B00F bmi endOfWord ;
00FFF40D 0A1800 cmpa ,x+ ; does input match command?
00FFF40F 027FF6 beq parseCmd1
scanNextWord:
00FFF0E2 06D800 tst ,x+
00FFF0E4 027F53 beq Monitor ; if end of table reached, not a command
00FFF0E6 02AFFA bpl scanNextWord
00FFF0E8 05C incb
00FFF0E9 01F032 tfr u,y ; reset input pointer
00FFF0EB 020FEB bra parseCmd1 ; try again
00FFF411 06D800 tst ,x+
00FFF413 027F47 beq Monitor ; if end of table reached, not a command
00FFF415 02AFFA bpl scanNextWord
00FFF417 05C incb
00FFF418 01F032 tfr u,y ; reset input pointer
00FFF41A 020FEB bra parseCmd1 ; try again
endOfWord:
00FFF0ED 0A8804 eora ,x
00FFF0EF 048 asla
00FFF0F0 026FF0 bne scanNextWord
00FFF41C 0A8804 eora ,x
00FFF41E 048 asla
00FFF41F 026FF0 bne scanNextWord
; we found the command in the table
00FFF0F2 058 aslb ; b = word index
00FFF0F3 08EFFEFE3 ldx #cmdTable2
00FFF0F6 06E905 jmp [b,x] ; execute command
00FFF421 058 aslb ; b = word index
00FFF422 08EFFF2EC ldx #cmdTable2
00FFF425 06E905 jmp [b,x] ; execute command
Redirect:
00FFF0F8 08D034 bsr MonGetch
00FFF0FA 0C1073 cmpb #'s'
00FFF0FC 02600E bne Prompt2a
00FFF0FE 0CCFFEC64 ldd #SerialPeekCharDirect
00FFF101 0FD000804 std CharInVec
00FFF104 0CCFFEC88 ldd #SerialPutChar
00FFF107 0FD000800 std CharOutVec
00FFF10A 020F2D bra Monitor
00FFF427 08D034 bsr MonGetch
00FFF429 0C1073 cmpb #'s'
00FFF42B 02600E bne Prompt2a
00FFF42D 0CCFFEC73 ldd #SerialPeekCharDirect
00FFF430 0FD000804 std CharInVec
00FFF433 0CCFFEC9A ldd #SerialPutChar
00FFF436 0FD000800 std CharOutVec
00FFF439 020F21 bra Monitor
Prompt2a:
00FFF10C 0C1063 cmpb #'c'
00FFF10E 026F29 bne Monitor
00FFF110 0CCFFEA92 ldd #GetKey
00FFF113 0FD000804 std CharInVec
00FFF116 0CCFFE319 ldd #DisplayChar
00FFF119 0FD000800 std CharOutVec
00FFF11C 020F1B bra Monitor
00FFF43B 0C1063 cmpb #'c'
00FFF43D 026F1D bne Monitor
00FFF43F 0CCFFEA92 ldd #GetKey
00FFF442 0FD000804 std CharInVec
00FFF445 0CCFFE31C ldd #DisplayChar
00FFF448 0FD000800 std CharOutVec
00FFF44B 020F0F bra Monitor
PromptHelp:
00FFF11E 0CCFFF2CF ldd #HelpMsg
00FFF121 017FFF2B6 lbsr DisplayString
00FFF44D 0CCFFF5FE ldd #HelpMsg
00FFF450 017FFEF8A lbsr DisplayString
*** warning 1: Long branch within short branch range could be optimized
00FFF124 020F13 bra Monitor
00FFF453 020F07 bra Monitor
PromptClearscreen:
00FFF126 017FFF110 lbsr ClearScreen
00FFF455 017FFEDE4 lbsr ClearScreen
*** warning 1: Long branch within short branch range could be optimized
00FFF129 017FFF184 lbsr HomeCursor
00FFF458 017FFEE58 lbsr HomeCursor
*** warning 1: Long branch within short branch range could be optimized
00FFF12C 020F0B bra Monitor
00FFF45B 020EFF bra Monitor
MonGetch:
00FFF12E 0E6A04 ldb ,y
00FFF130 031201 iny
00FFF132 039 rts
00FFF45D 0E6A04 ldb ,y
00FFF45F 031201 iny
00FFF461 039 rts
MonGetNonSpace:
00FFF133 08DFF9 bsr MonGetCh
00FFF135 0C1020 cmpb #' '
00FFF137 027FFA beq MonGetNonSpace
00FFF139 039 rts
00FFF462 08DFF9 bsr MonGetCh
00FFF464 0C1020 cmpb #' '
00FFF466 027FFA beq MonGetNonSpace
00FFF468 039 rts
MonArmBreakpoint:
00FFF13A 017000611 lbsr ArmBreakpoint
00FFF13D 0C6FFF ldb #$FFF
00FFF13F 0F7000810 stb BreakpointFlag
00FFF142 016FFFEF4 lbra Monitor
00FFF469 0170006D5 lbsr ArmBreakpoint
00FFF46C 0C6FFF ldb #$FFF
00FFF46E 0F7000810 stb BreakpointFlag
00FFF471 016FFFEE8 lbra Monitor
*** warning 1: Long branch within short branch range could be optimized
MonDisarmBreakpoint:
00FFF145 017000632 lbsr DisarmBreakpoint
00FFF148 016FFFEEE lbra Monitor
00FFF474 017000700 lbsr DisarmBreakpoint
00FFF477 016FFFEE2 lbra Monitor
*** warning 1: Long branch within short branch range could be optimized
;------------------------------------------------------------------------------
3459,74 → 4054,74
;
ignBlanks:
ignBlanks1:
00FFF14B 08DFE1 bsr MonGetch
00FFF14D 0C1020 cmpb #' '
00FFF14F 027FFA beq ignBlanks1
00FFF151 0313FF dey
00FFF153 039 rts
00FFF47A 08DFE1 bsr MonGetch
00FFF47C 0C1020 cmpb #' '
00FFF47E 027FFA beq ignBlanks1
00FFF480 0313FF dey
00FFF482 039 rts
;------------------------------------------------------------------------------
; Multiply number in work area by 10.
;------------------------------------------------------------------------------
Times10:
00FFF154 034006 pshs d
00FFF156 0FC000910 ldd mon_numwka ; make a copy of the number
00FFF159 0FD000918 std mon_numwka+8
00FFF15C 0FC000912 ldd mon_numwka+2
00FFF15F 0FD00091A std mon_numwka+10
00FFF162 08D05B bsr shl_numwka ; shift left = *2
00FFF164 08D059 bsr shl_numwka ; shift left = *4
00FFF166 0FC000912 ldd mon_numwka+2 ; add in original value
00FFF169 0F300091A addd mon_numwka+10 ; = *5
00FFF16C 0F6000911 ldb mon_numwka+1
00FFF16F 0F9000919 adcb mon_numwka+9
00FFF172 0F7000911 stb mon_numwka+1
00FFF175 0B6000910 lda mon_numwka+0
00FFF178 0B9000918 adca mon_numwka+8
00FFF17B 0B7000910 sta mon_numwka+0
00FFF17E 08D03F bsr shl_numwka ; shift left = * 10
00FFF180 035086 puls d,pc
00FFF483 034006 pshs d
00FFF485 0FC000910 ldd mon_numwka ; make a copy of the number
00FFF488 0FD000918 std mon_numwka+8
00FFF48B 0FC000912 ldd mon_numwka+2
00FFF48E 0FD00091A std mon_numwka+10
00FFF491 08D05B bsr shl_numwka ; shift left = *2
00FFF493 08D059 bsr shl_numwka ; shift left = *4
00FFF495 0FC000912 ldd mon_numwka+2 ; add in original value
00FFF498 0F300091A addd mon_numwka+10 ; = *5
00FFF49B 0F6000911 ldb mon_numwka+1
00FFF49E 0F9000919 adcb mon_numwka+9
00FFF4A1 0F7000911 stb mon_numwka+1
00FFF4A4 0B6000910 lda mon_numwka+0
00FFF4A7 0B9000918 adca mon_numwka+8
00FFF4AA 0B7000910 sta mon_numwka+0
00FFF4AD 08D03F bsr shl_numwka ; shift left = * 10
00FFF4AF 035086 puls d,pc
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
GetTwoParams:
00FFF182 08DFC7 bsr ignBlanks
00FFF184 08D0DC bsr GetNumber ; get start address of dump
00FFF186 0FC000910 ldd mon_numwka
00FFF189 0FD000920 std mon_r1
00FFF18C 0FC000912 ldd mon_numwka+2
00FFF18F 0FD000922 std mon_r1+2
00FFF192 08DFB7 bsr ignBlanks
00FFF194 08D0CC bsr GetNumber ; get end address of dump
00FFF196 0FC000910 ldd mon_numwka
00FFF199 0FD000924 std mon_r2
00FFF19C 0FC000912 ldd mon_numwka+2
00FFF19F 0FD000926 std mon_r2+2
00FFF1A2 039 rts
00FFF4B1 08DFC7 bsr ignBlanks
00FFF4B3 08D0DC bsr GetNumber ; get start address of dump
00FFF4B5 0FC000910 ldd mon_numwka
00FFF4B8 0FD000920 std mon_r1
00FFF4BB 0FC000912 ldd mon_numwka+2
00FFF4BE 0FD000922 std mon_r1+2
00FFF4C1 08DFB7 bsr ignBlanks
00FFF4C3 08D0CC bsr GetNumber ; get end address of dump
00FFF4C5 0FC000910 ldd mon_numwka
00FFF4C8 0FD000924 std mon_r2
00FFF4CB 0FC000912 ldd mon_numwka+2
00FFF4CE 0FD000926 std mon_r2+2
00FFF4D1 039 rts
;------------------------------------------------------------------------------
; Get a range, the end must be greater or equal to the start.
;------------------------------------------------------------------------------
GetRange:
00FFF1A3 08DFDD bsr GetTwoParams
00FFF1A5 0FC000926 ldd mon_r2+2
00FFF1A8 0B3000922 subd mon_r1+2
00FFF1AB 0FC000924 ldd mon_r2
00FFF1AE 0F2000921 sbcb mon_r1+1
00FFF1B1 0B2000920 sbca mon_r1
00FFF1B4 124000007 lbcc grng1
00FFF1B7 0AD90F00080C jsr [MonErrVec]
00FFF1BB 016FFFE7B lbra Monitor
00FFF4D2 08DFDD bsr GetTwoParams
00FFF4D4 0FC000926 ldd mon_r2+2
00FFF4D7 0B3000922 subd mon_r1+2
00FFF4DA 0FC000924 ldd mon_r2
00FFF4DD 0F2000921 sbcb mon_r1+1
00FFF4E0 0B2000920 sbca mon_r1
00FFF4E3 124000007 lbcc grng1
00FFF4E6 0AD90F00080C jsr [MonErrVec]
00FFF4EA 016FFFE6F lbra Monitor
*** warning 1: Long branch within short branch range could be optimized
grng1:
00FFF1BE 039 rts
00FFF4ED 039 rts
shl_numwka:
00FFF1BF 078000913 asl mon_numwka+3
00FFF1C2 079000912 rol mon_numwka+2
00FFF1C5 079000911 rol mon_numwka+1
00FFF1C8 079000910 rol mon_numwka
00FFF1CB 039 rts
00FFF4EE 078000913 asl mon_numwka+3
00FFF4F1 079000912 rol mon_numwka+2
00FFF4F4 079000911 rol mon_numwka+1
00FFF4F7 079000910 rol mon_numwka
00FFF4FA 039 rts
;------------------------------------------------------------------------------
; Get a hexidecimal number. Maximum of twelve digits.
3538,89 → 4133,89
;------------------------------------------------------------------------------
;
GetHexNumber:
00FFF1CC 04F05F clrd
00FFF1CE 0FD000910 std mon_numwka ; zero out work area
00FFF1D1 0FD000912 std mon_numwka+2
00FFF1D4 034010 pshs x
00FFF1D6 08E000000 ldx #0 ; max 12 eight digits
00FFF4FB 04F05F clrd
00FFF4FD 0FD000910 std mon_numwka ; zero out work area
00FFF500 0FD000912 std mon_numwka+2
00FFF503 034010 pshs x
00FFF505 08E000000 ldx #0 ; max 12 eight digits
gthxn2:
00FFF1D9 08DF53 bsr MonGetch
00FFF1DB 08D093 bsr AsciiToHexNybble
00FFF1DD 0C1FFF cmpb #-1
00FFF1DF 027017 beq gthxn1
00FFF1E1 08DFDC bsr shl_numwka
00FFF1E3 08DFDA bsr shl_numwka
00FFF1E5 08DFD8 bsr shl_numwka
00FFF1E7 08DFD6 bsr shl_numwka
00FFF1E9 0C400F andb #$0f
00FFF1EB 0FA000913 orb mon_numwka+3
00FFF1EE 0F7000913 stb mon_numwka+3
00FFF1F1 030001 inx
00FFF1F3 08C00000C cmpx #12
00FFF1F6 025FE1 blo gthxn2
00FFF508 08DF53 bsr MonGetch
00FFF50A 08D093 bsr AsciiToHexNybble
00FFF50C 0C1FFF cmpb #-1
00FFF50E 027017 beq gthxn1
00FFF510 08DFDC bsr shl_numwka
00FFF512 08DFDA bsr shl_numwka
00FFF514 08DFD8 bsr shl_numwka
00FFF516 08DFD6 bsr shl_numwka
00FFF518 0C400F andb #$0f
00FFF51A 0FA000913 orb mon_numwka+3
00FFF51D 0F7000913 stb mon_numwka+3
00FFF520 030001 inx
00FFF522 08C00000C cmpx #12
00FFF525 025FE1 blo gthxn2
gthxn1:
00FFF1F8 01F010 tfr x,d
00FFF1FA 035090 puls x,pc
00FFF527 01F010 tfr x,d
00FFF529 035090 puls x,pc
GetBinNumber:
00FFF1FC 04F05F clrd
00FFF1FE 0FD000910 std mon_numwka
00FFF201 0FD000912 std mon_numwka+2
00FFF204 034010 pshs x
00FFF206 08E000000 ldx #0
00FFF52B 04F05F clrd
00FFF52D 0FD000910 std mon_numwka
00FFF530 0FD000912 std mon_numwka+2
00FFF533 034010 pshs x
00FFF535 08E000000 ldx #0
gtbin2:
00FFF209 08DF23 bsr MonGetch
00FFF20B 08D099 bsr AsciiToBinDigit
00FFF20D 05D tstb
00FFF20E 02B00F bmi gtbin1
00FFF210 08DFAD bsr shl_numwka
00FFF212 0FA000913 orb mon_numwka+3
00FFF215 0F7000913 stb mon_numwka+3
00FFF218 030001 inx
00FFF21A 08C000030 cpx #48
00FFF21D 025FEA blo gtbin2
00FFF538 08DF23 bsr MonGetch
00FFF53A 08D099 bsr AsciiToBinDigit
00FFF53C 05D tstb
00FFF53D 02B00F bmi gtbin1
00FFF53F 08DFAD bsr shl_numwka
00FFF541 0FA000913 orb mon_numwka+3
00FFF544 0F7000913 stb mon_numwka+3
00FFF547 030001 inx
00FFF549 08C000030 cpx #48
00FFF54C 025FEA blo gtbin2
gtbin1:
00FFF21F 01F010 tfr x,d
00FFF221 035090 puls x,pc
00FFF54E 01F010 tfr x,d
00FFF550 035090 puls x,pc
GetDecNumber:
00FFF223 04F05F clrd
00FFF225 0FD000910 std mon_numwka
00FFF228 0FD000912 std mon_numwka+2
00FFF22B 034010 pshs x
00FFF22D 08E000000 ldx #0
00FFF552 04F05F clrd
00FFF554 0FD000910 std mon_numwka
00FFF557 0FD000912 std mon_numwka+2
00FFF55A 034010 pshs x
00FFF55C 08E000000 ldx #0
gtdec2:
00FFF230 08DEFC bsr MonGetch
00FFF232 08D064 bsr AsciiToDecDigit
00FFF234 05D tstb
00FFF235 02B027 bmi gtdec1
00FFF237 08DF1B bsr Times10
00FFF239 0FB000913 addb mon_numwka+3
00FFF23C 0F7000913 stb mon_numwka+3
00FFF23F 0F6000912 ldb mon_numwka+2
00FFF242 0C9000 adcb #0
00FFF244 0F7000912 stb mon_numwka+2
00FFF247 0F6000911 ldb mon_numwka+1
00FFF24A 0C9000 adcb #0
00FFF24C 0F7000911 stb mon_numwka+1
00FFF24F 0F6000910 ldb mon_numwka+0
00FFF252 0C9000 adcb #0
00FFF254 0F7000910 stb mon_numwka+0
00FFF257 030001 inx
00FFF259 08C00000F cpx #15
00FFF25C 025FD2 blo gtdec2
00FFF55F 08DEFC bsr MonGetch
00FFF561 08D064 bsr AsciiToDecDigit
00FFF563 05D tstb
00FFF564 02B027 bmi gtdec1
00FFF566 08DF1B bsr Times10
00FFF568 0FB000913 addb mon_numwka+3
00FFF56B 0F7000913 stb mon_numwka+3
00FFF56E 0F6000912 ldb mon_numwka+2
00FFF571 0C9000 adcb #0
00FFF573 0F7000912 stb mon_numwka+2
00FFF576 0F6000911 ldb mon_numwka+1
00FFF579 0C9000 adcb #0
00FFF57B 0F7000911 stb mon_numwka+1
00FFF57E 0F6000910 ldb mon_numwka+0
00FFF581 0C9000 adcb #0
00FFF583 0F7000910 stb mon_numwka+0
00FFF586 030001 inx
00FFF588 08C00000F cpx #15
00FFF58B 025FD2 blo gtdec2
gtdec1:
00FFF25E 01F010 tfr x,d
00FFF260 035090 puls x,pc
00FFF58D 01F010 tfr x,d
00FFF58F 035090 puls x,pc
GetNumber:
00FFF262 08DECA bsr MonGetch
00FFF264 0C102B cmpb #'+'
00FFF266 027FBB beq GetDecNumber
00FFF268 0C1025 cmpb #'%'
00FFF26A 027F90 beq GetBinNumber
00FFF26C 0313FF dey
00FFF26E 020F5C bra GetHexNumber
00FFF591 08DECA bsr MonGetch
00FFF593 0C102B cmpb #'+'
00FFF595 027FBB beq GetDecNumber
00FFF597 0C1025 cmpb #'%'
00FFF599 027F90 beq GetBinNumber
00FFF59B 0313FF dey
00FFF59D 020F5C bra GetHexNumber
; phx
; push r4
3650,169 → 4245,173
;------------------------------------------------------------------------------
;
AsciiToHexNybble:
00FFF270 0C1030 cmpb #'0'
00FFF272 025021 blo gthx3
00FFF274 0C1039 cmpb #'9'
00FFF276 022003 bhi gthx5
00FFF278 0C0030 subb #'0'
00FFF27A 039 rts
00FFF59F 0C1030 cmpb #'0'
00FFF5A1 025021 blo gthx3
00FFF5A3 0C1039 cmpb #'9'
00FFF5A5 022003 bhi gthx5
00FFF5A7 0C0030 subb #'0'
00FFF5A9 039 rts
gthx5:
00FFF27B 0C1041 cmpb #'A'
00FFF27D 025016 blo gthx3
00FFF27F 0C1046 cmpb #'F'
00FFF281 022005 bhi gthx6
00FFF283 0C0041 subb #'A'
00FFF285 0CB00A addb #10
00FFF287 039 rts
00FFF5AA 0C1041 cmpb #'A'
00FFF5AC 025016 blo gthx3
00FFF5AE 0C1046 cmpb #'F'
00FFF5B0 022005 bhi gthx6
00FFF5B2 0C0041 subb #'A'
00FFF5B4 0CB00A addb #10
00FFF5B6 039 rts
gthx6:
00FFF288 0C1061 cmpb #'a'
00FFF28A 025009 blo gthx3
00FFF28C 0C107A cmpb #'z'
00FFF28E 022005 bhi gthx3
00FFF290 0C0061 subb #'a'
00FFF292 0CB00A addb #10
00FFF294 039 rts
00FFF5B7 0C1061 cmpb #'a'
00FFF5B9 025009 blo gthx3
00FFF5BB 0C107A cmpb #'z'
00FFF5BD 022005 bhi gthx3
00FFF5BF 0C0061 subb #'a'
00FFF5C1 0CB00A addb #10
00FFF5C3 039 rts
gthx3:
00FFF295 0C6FFF ldb #-1 ; not a hex number
00FFF297 039 rts
00FFF5C4 0C6FFF ldb #-1 ; not a hex number
00FFF5C6 039 rts
AsciiToDecDigit:
00FFF298 0C1030 cmpb #'0'
00FFF29A 025007 blo gtdc3
00FFF29C 0C1039 cmpb #'9'
00FFF29E 022003 bhi gtdc3
00FFF2A0 0C0030 subb #'0'
00FFF2A2 039 rts
00FFF5C7 0C1030 cmpb #'0'
00FFF5C9 025007 blo gtdc3
00FFF5CB 0C1039 cmpb #'9'
00FFF5CD 022003 bhi gtdc3
00FFF5CF 0C0030 subb #'0'
00FFF5D1 039 rts
gtdc3:
00FFF2A3 0C6FFF ldb #-1
00FFF2A5 039 rts
00FFF5D2 0C6FFF ldb #-1
00FFF5D4 039 rts
AsciiToBinDigit:
00FFF2A6 0C1030 cmpb #'0'
00FFF2A8 026002 bne abd1
00FFF2AA 05F clrb
00FFF2AB 039 rts
00FFF5D5 0C1030 cmpb #'0'
00FFF5D7 026002 bne abd1
00FFF5D9 05F clrb
00FFF5DA 039 rts
abd1:
00FFF2AC 0C1031 cmpb #'1'
00FFF2AE 026003 bne abd2
00FFF2B0 0C6001 ldb #1
00FFF2B2 039 rts
00FFF5DB 0C1031 cmpb #'1'
00FFF5DD 026003 bne abd2
00FFF5DF 0C6001 ldb #1
00FFF5E1 039 rts
abd2:
00FFF2B3 0C6FFF ldb #-1
00FFF2B5 039 rts
00FFF5E2 0C6FFF ldb #-1
00FFF5E4 039 rts
DisplayErr:
00FFF2B6 0CCFFF2C7 ldd #msgErr
00FFF2B9 017FFF11E lbsr DisplayString
00FFF5E5 0CCFFF5F6 ldd #msgErr
00FFF5E8 017FFEDF2 lbsr DisplayString
*** warning 1: Long branch within short branch range could be optimized
00FFF2BC 07EFFF039 jmp Monitor
00FFF5EB 07EFFF35C jmp Monitor
DisplayStringDX
00FFF2BF 0DD024 std Strptr
00FFF2C1 09F026 stx Strptr+2
00FFF2C3 0BDFFE3DA jsr DisplayString
00FFF2C6 039 rts
00FFF5EE 0DD024 std Strptr
00FFF5F0 09F026 stx Strptr+2
00FFF5F2 0BDFFE3DD jsr DisplayString
00FFF5F5 039 rts
msgErr:
00FFF2C7 02A02A04507207200D00A fcb "**Err",CR,LF,0
00FFF2CE 000
00FFF5F6 02A02A04507207200D00A fcb "**Err",CR,LF,0
00FFF5FD 000
HelpMsg:
00FFF2CF 03F02003D020044069073 fcb "? = Display help",CR,LF
00FFF2D6 07006C061079020068065
00FFF2DD 06C07000D00A
00FFF2E1 04304C05302003D020063 fcb "CLS = clear screen",CR,LF
00FFF2E8 06C065061072020073063
00FFF2EF 07206506506E00D00A
00FFF2F5 06207302003D020073065 fcb "bs = set breakpoint",CR,LF
00FFF2FC 07402006207206506106B
00FFF303 07006F06906E07400D00A
00FFF30A 06206302003D02006306C fcb "bc = clear breakpoint",CR,LF
00FFF311 065061072020062072065
00FFF318 06106B07006F06906E074
00FFF31F 00D00A
00FFF5FE 03F02003D020044069073 fcb "? = Display help",CR,LF
00FFF605 07006C061079020068065
00FFF60C 06C07000D00A
00FFF610 04304C05302003D020063 fcb "CLS = clear screen",CR,LF
00FFF617 06C065061072020073063
00FFF61E 07206506506E00D00A
00FFF624 06202B02003D020073065 fcb "b+ = set breakpoint",CR,LF
00FFF62B 07402006207206506106B
00FFF632 07006F06906E07400D00A
00FFF639 06202D02003D02006306C fcb "b- = clear breakpoint",CR,LF
00FFF640 065061072020062072065
00FFF647 06106B07006F06906E074
00FFF64E 00D00A
; db "S = Boot from SD Card",CR,LF
00FFF321 03A02003D020045064069 fcb ": = Edit memory bytes",CR,LF
00FFF328 07402006D06506D06F072
00FFF32F 079020062079074065073
00FFF336 00D00A
00FFF650 03A02003D020045064069 fcb ": = Edit memory bytes",CR,LF
00FFF657 07402006D06506D06F072
00FFF65E 079020062079074065073
00FFF665 00D00A
; db "L = Load sector",CR,LF
; db "W = Write sector",CR,LF
00FFF338 04405202003D020044075 fcb "DR = Dump registers",CR,LF
00FFF33F 06D070020072065067069
00FFF346 07307406507207300D00A
00FFF34D 04402003D02004407506D fcb "D = Dump memory",CR,LF
00FFF354 07002006D06506D06F072
00FFF35B 07900D00A
00FFF35E 04602003D02004606906C fcb "F = Fill memory",CR,LF
00FFF365 06C02006D06506D06F072
00FFF36C 07900D00A
00FFF36F 04604C02003D020044075 fcb "FL = Dump I/O Focus List",CR,LF
00FFF376 06D07002004902F04F020
00FFF37D 04606F06307507302004C
00FFF384 06907307400D00A
00FFF667 04405202003D020044075 fcb "DR = Dump registers",CR,LF
00FFF66E 06D070020072065067069
00FFF675 07307406507207300D00A
00FFF67C 04402003D02004407506D fcb "D = Dump memory",CR,LF
00FFF683 07002006D06506D06F072
00FFF68A 07900D00A
00FFF68D 04602003D02004606906C fcb "F = Fill memory",CR,LF
00FFF694 06C02006D06506D06F072
00FFF69B 07900D00A
00FFF69E 04604C02003D020044075 fcb "FL = Dump I/O Focus List",CR,LF
00FFF6A5 06D07002004902F04F020
00FFF6AC 04606F06307507302004C
00FFF6B3 06907307400D00A
; fcb "FIG = start FIG Forth",CR,LF
; db "KILL n = kill task #n",CR,LF
; db "B = start tiny basic",CR,LF
; db "b = start EhBasic 6502",CR,LF
00FFF389 04A02003D02004A07506D fcb "J = Jump to code",CR,LF
00FFF390 07002007406F02006306F
00FFF397 06406500D00A
00FFF39B 04A04403402003D02004A fcb "JD4 = Jump to $FFD400",CR,LF
00FFF3A2 07506D07002007406F020
00FFF3A9 024046046044034030030
00FFF3B0 00D00A
00FFF3B2 05204104D054045053054 fcb "RAMTEST = test RAM",CR,LF
00FFF3B9 02003D020074065073074
00FFF3C0 02005204104D00D00A
; db "R[n] = Set register value",CR,LF
00FFF6B8 04A02003D02004A07506D fcb "J = Jump to code",CR,LF
00FFF6BF 07002007406F02006306F
00FFF6C6 06406500D00A
00FFF6CA 04A04403402003D02004A fcb "JD4 = Jump to $FFD400",CR,LF
00FFF6D1 07506D07002007406F020
00FFF6D8 024046046044034030030
00FFF6DF 00D00A
00FFF6E1 05205B06E05D02003D020 fcb "R[n] = Set register value",CR,LF
00FFF6E8 053065074020072065067
00FFF6EF 069073074065072020076
00FFF6F6 06106C07506500D00A
; db "r = random lines - test bitmap",CR,LF
; db "e = ethernet test",CR,LF
00FFF3C6 07302003D020073065072 fcb "s = serial output test",CR,LF
00FFF3CD 06906106C02006F075074
00FFF3D4 070075074020074065073
00FFF3DB 07400D00A
00FFF3DE 05303103902003D020072 fcb "S19 = run S19 loader",CR,LF
00FFF3E5 07506E020053031039020
00FFF3EC 06C06F06106406507200D
00FFF3F3 00A
00FFF3F4 05305002003D020073070 fcb "SP = sprite demo",CR,LF
00FFF3FB 072069074065020064065
00FFF402 06D06F00D00A
00FFF6FC 07302003D020073065072 fcb "s = serial output test",CR,LF
00FFF703 06906106C02006F075074
00FFF70A 070075074020074065073
00FFF711 07400D00A
00FFF714 05303103902003D020072 fcb "S19 = run S19 loader",CR,LF
00FFF71B 07506E020053031039020
00FFF722 06C06F06106406507200D
00FFF729 00A
00FFF72A 05305002003D020073070 fcb "SP = sprite demo",CR,LF
00FFF731 072069074065020064065
00FFF738 06D06F00D00A
; db "T = Dump task list",CR,LF
; db "TO = Dump timeout list",CR,LF
00FFF406 05404902003D020064069 fcb "TI = display date/time",CR,LF
00FFF40D 07307006C061079020064
00FFF414 06107406502F07406906D
00FFF41B 06500D00A
00FFF73C 05404902003D020064069 fcb "TI = display date/time",CR,LF
00FFF743 07307006C061079020064
00FFF74A 06107406502F07406906D
00FFF751 06500D00A
; db "TEMP = display temperature",CR,LF
00FFF41E 05502003D02007506E061 fcb "U = unassemble",CR,LF
00FFF425 07307306506D06206C065
00FFF42C 00D00A
00FFF754 05502003D02007506E061 fcb "U = unassemble",CR,LF
00FFF75B 07307306506D06206C065
00FFF762 00D00A
; db "P = Piano",CR,LF
00FFF42E 07802003D020065078069 fcb "x = exit monitor",CR,LF
00FFF435 07402006D06F06E069074
00FFF43C 06F07200D00A
00FFF440 000 fcb 0
00FFF764 05804D02003D02007806D fcb "XM = xmodem transfer",CR,LF
00FFF76B 06F06406506D020074072
00FFF772 06106E07306606507200D
00FFF779 00A
00FFF77A 07802003D020065078069 fcb "x = exit monitor",CR,LF
00FFF781 07402006D06F06E069074
00FFF788 06F07200D00A
00FFF78C 000 fcb 0
msgRegHeadings
00FFF441 00D00A02002004402F041 fcb CR,LF," D/AB X Y U S PC DP CCR",CR,LF,0
00FFF448 042020020020020020058
00FFF44F 020020020020020020059
00FFF456 020020020020020020055
00FFF45D 020020020020020020053
00FFF464 020020020020020020020
00FFF46B 050043020020020020044
00FFF472 05002002004304305200D
00FFF479 00A000
00FFF78D 00D00A02002004402F041 fcb CR,LF," D/AB X Y U S PC DP CCR",CR,LF,0
00FFF794 042020020020020020058
00FFF79B 020020020020020020059
00FFF7A2 020020020020020020055
00FFF7A9 020020020020020020053
00FFF7B0 020020020020020020020
00FFF7B7 050043020020020020044
00FFF7BE 05002002004304305200D
00FFF7C5 00A000
nHEX4:
00FFF47B 0BDFFD2D2 jsr HEX4
00FFF47E 039 rts
00FFF7C7 0BDFFD2D2 jsr HEX4
00FFF7CA 039 rts
nXBLANK:
00FFF47F 0C6020 ldb #' '
00FFF481 016FFFA5D lbra OUTCH
00FFF7CB 0C6020 ldb #' '
00FFF7CD 016FFF9F9 lbra OUTCH
*** warning 1: Long branch within short branch range could be optimized
;------------------------------------------------------------------------------
3827,66 → 4426,66
;------------------------------------------------------------------------------
DumpMemory:
00FFF484 08DD1D bsr GetRange
00FFF486 18E000000 ldy #0
00FFF489 1BE000922 ldy mon_r1+2
00FFF7D0 08DD00 bsr GetRange
00FFF7D2 18E000000 ldy #0
00FFF7D5 1BE000922 ldy mon_r1+2
dmpm2:
00FFF48C 017FFDC43 lbsr CRLF
00FFF7D8 017FFD8F7 lbsr CRLF
*** warning 1: Long branch within short branch range could be optimized
00FFF48F 0C603A ldb #':'
00FFF491 017FFFA4D lbsr OUTCH
00FFF7DB 0C603A ldb #':'
00FFF7DD 017FFF9E9 lbsr OUTCH
*** warning 1: Long branch within short branch range could be optimized
00FFF494 01F020 tfr y,d
00FFF7E0 01F020 tfr y,d
;addd mon_r1+2 ; output the address
00FFF496 017FFEF95 lbsr DispWordAsHex
00FFF7E2 017FFEC4C lbsr DispWordAsHex
*** warning 1: Long branch within short branch range could be optimized
00FFF499 0C6020 ldb #' '
00FFF49B 017FFFA43 lbsr OUTCH
00FFF7E5 0C6020 ldb #' '
00FFF7E7 017FFF9DF lbsr OUTCH
*** warning 1: Long branch within short branch range could be optimized
00FFF49E 08E000008 ldx #8 ; number of bytes to display
00FFF7EA 08E000008 ldx #8 ; number of bytes to display
dmpm1:
; ldb far [mon_r1+1],y
;ldb [mon_r1+2],y
00FFF4A1 0E6A04 ldb ,y
00FFF4A3 031201 iny
00FFF4A5 017FFEF8F lbsr DispByteAsHex ; display byte
00FFF7ED 0E6A04 ldb ,y
00FFF7EF 031201 iny
00FFF7F1 017FFEC46 lbsr DispByteAsHex ; display byte
*** warning 1: Long branch within short branch range could be optimized
00FFF4A8 0C6020 ldb #' ' ; followed by a space
00FFF4AA 017FFFA34 lbsr OUTCH
00FFF7F4 0C6020 ldb #' ' ; followed by a space
00FFF7F6 017FFF9D0 lbsr OUTCH
*** warning 1: Long branch within short branch range could be optimized
00FFF4AD 05F clrb
00FFF4AE 04F clra
00FFF4AF 017FFF9F7 lbsr INCH
00FFF7F9 05F clrb
00FFF7FA 04F clra
00FFF7FB 017FFF993 lbsr INCH
*** warning 1: Long branch within short branch range could be optimized
00FFF4B2 0C1003 cmpb #CTRLC
00FFF4B4 027024 beq dmpm3
00FFF4B6 0301FF dex
00FFF4B8 026FE7 bne dmpm1
00FFF7FE 0C1003 cmpb #CTRLC
00FFF800 027024 beq dmpm3
00FFF802 0301FF dex
00FFF804 026FE7 bne dmpm1
; Now output ascii
00FFF4BA 0C6020 ldb #' '
00FFF4BC 017FFFA22 lbsr OUTCH
00FFF806 0C6020 ldb #' '
00FFF808 017FFF9BE lbsr OUTCH
*** warning 1: Long branch within short branch range could be optimized
00FFF4BF 08E000008 ldx #8 ; 8 chars to output
00FFF4C2 0313F8 leay -8,y ; backup pointer
00FFF80B 08E000008 ldx #8 ; 8 chars to output
00FFF80E 0313F8 leay -8,y ; backup pointer
dmpm5:
; ldb far [mon_r1+1],y ; get the char
; ldb [mon_r1+2],y ; get the char
00FFF4C4 0E6A04 ldb ,y
00FFF4C6 0C1020 cmpb #$20 ; is it a control char?
00FFF4C8 024002 bhs dmpm4
00FFF4CA 0C602E ldb #'.'
00FFF810 0E6A04 ldb ,y
00FFF812 0C1020 cmpb #$20 ; is it a control char?
00FFF814 024002 bhs dmpm4
00FFF816 0C602E ldb #'.'
dmpm4:
00FFF4CC 017FFFA12 lbsr OUTCH
00FFF818 017FFF9AE lbsr OUTCH
*** warning 1: Long branch within short branch range could be optimized
00FFF4CF 031201 iny
00FFF4D1 0301FF dex
00FFF4D3 026FEF bne dmpm5
00FFF4D5 1BC000926 cmpy mon_r2+2
00FFF4D8 025FB2 blo dmpm2
00FFF81B 031201 iny
00FFF81D 0301FF dex
00FFF81F 026FEF bne dmpm5
00FFF821 1BC000926 cmpy mon_r2+2
00FFF824 025FB2 blo dmpm2
dmpm3:
00FFF4DA 017FFDBF5 lbsr CRLF
00FFF826 017FFD8A9 lbsr CRLF
*** warning 1: Long branch within short branch range could be optimized
00FFF4DD 016FFFB59 lbra Monitor
00FFF829 016FFFB30 lbra Monitor
*** warning 1: Long branch within short branch range could be optimized
;------------------------------------------------------------------------------
3901,42 → 4500,44
;------------------------------------------------------------------------------
EditMemory:
00FFF4E0 0CE000008 ldu #8 ; set max byte count
00FFF4E3 017FFFCE6 lbsr GetHexNumber ; get the start address
00FFF82C 0CE000008 ldu #8 ; set max byte count
00FFF82F 017FFFC48 lbsr ignBlanks
*** warning 1: Long branch within short branch range could be optimized
00FFF4E6 0BE000912 ldx mon_numwka+2
00FFF832 017FFFCC6 lbsr GetHexNumber ; get the start address
*** warning 1: Long branch within short branch range could be optimized
00FFF835 0BE000912 ldx mon_numwka+2
EditMem2:
00FFF4E9 017FFFC5F lbsr ignBlanks ; skip over blanks
00FFF838 017FFFC3F lbsr ignBlanks ; skip over blanks
*** warning 1: Long branch within short branch range could be optimized
00FFF4EC 017FFFCDD lbsr GetHexNumber ; get the byte value
00FFF83B 017FFFCBD lbsr GetHexNumber ; get the byte value
*** warning 1: Long branch within short branch range could be optimized
00FFF4EF 05D tstb ; check for valid value
00FFF4F0 02700C beq EditMem1 ; if invalid, quit
00FFF4F2 0F6000913 ldb mon_numwka+3 ; get value
00FFF4F5 0E7800 stb ,x+ ; update memory at address
00FFF4F7 0335FF leau -1,u ; decremeent byte count
00FFF4F9 283000000 cmpu #0
00FFF4FC 026FEB bne EditMem2 ; go back for annother byte
00FFF83E 05D tstb ; check for valid value
00FFF83F 02700C beq EditMem1 ; if invalid, quit
00FFF841 0F6000913 ldb mon_numwka+3 ; get value
00FFF844 0E7800 stb ,x+ ; update memory at address
00FFF846 0335FF leau -1,u ; decremeent byte count
00FFF848 283000000 cmpu #0
00FFF84B 026FEB bne EditMem2 ; go back for annother byte
EditMem1:
00FFF4FE 017FFFC2D lbsr MonGetch ; see if a string is being entered
00FFF84D 017FFFC0D lbsr MonGetch ; see if a string is being entered
*** warning 1: Long branch within short branch range could be optimized
00FFF501 0C1022 cmpb #'"'
00FFF503 026018 bne EditMem3 ; no string, we're done
00FFF505 0CE000028 ldu #40 ; string must be less than 40 chars
00FFF850 0C1022 cmpb #'"'
00FFF852 026018 bne EditMem3 ; no string, we're done
00FFF854 0CE000028 ldu #40 ; string must be less than 40 chars
EditMem4:
00FFF508 017FFFC23 lbsr MonGetch ; look for close quote
00FFF857 017FFFC03 lbsr MonGetch ; look for close quote
*** warning 1: Long branch within short branch range could be optimized
00FFF50B 0C1022 cmpb #'"'
00FFF50D 026005 bne EditMem6 ; end of string?
00FFF50F 0CE000008 ldu #8 ; reset the byte count
00FFF512 020FD5 bra EditMem2
00FFF85A 0C1022 cmpb #'"'
00FFF85C 026005 bne EditMem6 ; end of string?
00FFF85E 0CE000008 ldu #8 ; reset the byte count
00FFF861 020FD5 bra EditMem2
EditMem6:
00FFF514 0E7800 stb ,x+ ; store the character in memory
00FFF516 0335FF leau -1,u ; decrement byte count
00FFF518 283000000 cmpu #0
00FFF51B 022FEB bhi EditMem4 ; max 40 chars
00FFF863 0E7800 stb ,x+ ; store the character in memory
00FFF865 0335FF leau -1,u ; decrement byte count
00FFF867 283000000 cmpu #0
00FFF86A 022FEB bhi EditMem4 ; max 40 chars
EditMem3:
00FFF51D 016FFFB19 lbra Monitor
00FFF86C 016FFFAED lbra Monitor
*** warning 1: Long branch within short branch range could be optimized
3949,32 → 4550,32
;------------------------------------------------------------------------------
FillMemory:
00FFF520 017FFFC80 lbsr GetRange ; get address range to fill
00FFF86F 017FFFC60 lbsr GetRange ; get address range to fill
*** warning 1: Long branch within short branch range could be optimized
00FFF523 017FFFC25 lbsr ignBlanks
00FFF872 017FFFC05 lbsr ignBlanks
*** warning 1: Long branch within short branch range could be optimized
00FFF526 017FFFCA3 lbsr GetHexNumber ; get target byte to write
00FFF875 017FFFC83 lbsr GetHexNumber ; get target byte to write
*** warning 1: Long branch within short branch range could be optimized
00FFF529 0F6000913 ldb mon_numwka+3
00FFF52C 0BE000922 ldx mon_r1+2
00FFF52F 04F clra
00FFF878 0F6000913 ldb mon_numwka+3
00FFF87B 0BE000922 ldx mon_r1+2
00FFF87E 04F clra
fillm1: ; Check for a CTRL-C every page of memory
00FFF530 04D tsta
00FFF531 02600D bne fillm2
00FFF533 05F clrb ; we want a non-blocking check
00FFF534 04F clra
00FFF535 017FFF971 lbsr INCH
00FFF87F 04D tsta
00FFF880 02600D bne fillm2
00FFF882 05F clrb ; we want a non-blocking check
00FFF883 04F clra
00FFF884 017FFF90A lbsr INCH
*** warning 1: Long branch within short branch range could be optimized
00FFF538 0C1003 cmpb #CTRLC
00FFF53A 127FFFAFC lbeq Monitor
00FFF887 0C1003 cmpb #CTRLC
00FFF889 127FFFAD0 lbeq Monitor
*** warning 1: Long branch within short branch range could be optimized
00FFF53D 0F6000913 ldb mon_numwka+3 ; reset target byte
00FFF88C 0F6000913 ldb mon_numwka+3 ; reset target byte
fillm2:
00FFF540 0E7800 stb ,x+
00FFF542 0BC000926 cmpx mon_r2+2
00FFF545 023FE9 bls fillm1
00FFF88F 0E7800 stb ,x+
00FFF891 0BC000926 cmpx mon_r2+2
00FFF894 023FE9 bls fillm1
fillm3:
00FFF547 016FFFAEF lbra Monitor
00FFF896 016FFFAC3 lbra Monitor
*** warning 1: Long branch within short branch range could be optimized
;------------------------------------------------------------------------------
3985,42 → 4586,141
;------------------------------------------------------------------------------
DumpRegs:
00FFF54A 0CCFFF441 ldd #msgRegHeadings
00FFF54D 017FFEE8A lbsr DisplayString
00FFF899 0CCFFF78D ldd #msgRegHeadings
00FFF89C 017FFEB3E lbsr DisplayString
*** warning 1: Long branch within short branch range could be optimized
00FFF550 08DF2D bsr nXBLANK
00FFF552 0FC000900 ldd mon_DSAVE
00FFF555 08DF24 bsr nHEX4
00FFF557 08DF26 bsr nXBLANK
00FFF559 0FC000902 ldd mon_XSAVE
00FFF55C 08DF1D bsr nHEX4
00FFF55E 08DF1F bsr nXBLANK
00FFF560 0FC000904 ldd mon_YSAVE
00FFF563 08DF16 bsr nHEX4
00FFF565 08DF18 bsr nXBLANK
00FFF567 0FC000906 ldd mon_USAVE
00FFF56A 08DF0F bsr nHEX4
00FFF56C 08DF11 bsr nXBLANK
00FFF56E 0FC000908 ldd mon_SSAVE
00FFF571 08DF08 bsr nHEX4
00FFF573 08DF0A bsr nXBLANK
00FFF575 0F600090B ldb mon_PCSAVE+1
00FFF578 017FFEEBC lbsr DispByteAsHex
00FFF89F 08DF2A bsr nXBLANK
00FFF8A1 0FC000900 ldd mon_DSAVE
00FFF8A4 08DF21 bsr nHEX4
00FFF8A6 08DF23 bsr nXBLANK
00FFF8A8 0FC000902 ldd mon_XSAVE
00FFF8AB 08DF1A bsr nHEX4
00FFF8AD 08DF1C bsr nXBLANK
00FFF8AF 0FC000904 ldd mon_YSAVE
00FFF8B2 08DF13 bsr nHEX4
00FFF8B4 08DF15 bsr nXBLANK
00FFF8B6 0FC000906 ldd mon_USAVE
00FFF8B9 08DF0C bsr nHEX4
00FFF8BB 08DF0E bsr nXBLANK
00FFF8BD 0FC000908 ldd mon_SSAVE
00FFF8C0 08DF05 bsr nHEX4
00FFF8C2 08DF07 bsr nXBLANK
00FFF8C4 0F600090B ldb mon_PCSAVE+1
00FFF8C7 017FFEB70 lbsr DispByteAsHex
*** warning 1: Long branch within short branch range could be optimized
00FFF57B 0FC00090C ldd mon_PCSAVE+2
00FFF57E 08DEFB bsr nHEX4
00FFF580 08DEFD bsr nXBLANK
00FFF582 0FC00090E ldd mon_DPRSAVE
00FFF585 0BDFFD2CE jsr HEX2
00FFF588 08DEF5 bsr nXBLANK
00FFF58A 0B600090F lda mon_CCRSAVE
00FFF58D 017FFDD3E lbsr HEX2
00FFF8CA 0FC00090C ldd mon_PCSAVE+2
00FFF8CD 08DEF8 bsr nHEX4
00FFF8CF 08DEFA bsr nXBLANK
00FFF8D1 0FC00090E ldd mon_DPRSAVE
00FFF8D4 0BDFFD2CE jsr HEX2
00FFF8D7 08DEF2 bsr nXBLANK
00FFF8D9 0B600090F lda mon_CCRSAVE
00FFF8DC 017FFD9EF lbsr HEX2
*** warning 1: Long branch within short branch range could be optimized
00FFF590 08DEED bsr nXBLANK
00FFF592 016FFFAA4 lbra Monitor
00FFF8DF 08DEEA bsr nXBLANK
00FFF8E1 016FFFA78 lbra Monitor
*** warning 1: Long branch within short branch range could be optimized
;------------------------------------------------------------------------------
; SetRegXXX
;
; Set the value to be loaded into a register.
;------------------------------------------------------------------------------
SetRegA:
00FFF8E4 017FFFB93 lbsr ignBlanks
*** warning 1: Long branch within short branch range could be optimized
00FFF8E7 017FFFCA7 lbsr GetNumber
*** warning 1: Long branch within short branch range could be optimized
00FFF8EA 0B6000913 lda mon_numwka+3
00FFF8ED 0B7000900 sta mon_DSAVE
00FFF8F0 016FFFA69 lbra Monitor
*** warning 1: Long branch within short branch range could be optimized
SetRegB:
00FFF8F3 017FFFB84 lbsr ignBlanks
*** warning 1: Long branch within short branch range could be optimized
00FFF8F6 017FFFC98 lbsr GetNumber
*** warning 1: Long branch within short branch range could be optimized
00FFF8F9 0B6000913 lda mon_numwka+3
00FFF8FC 0B7000901 sta mon_DSAVE+1
00FFF8FF 016FFFA5A lbra Monitor
*** warning 1: Long branch within short branch range could be optimized
SetRegD:
00FFF902 017FFFB75 lbsr ignBlanks
*** warning 1: Long branch within short branch range could be optimized
00FFF905 017FFFC89 lbsr GetNumber
*** warning 1: Long branch within short branch range could be optimized
00FFF908 0FC000912 ldd mon_numwka+2
00FFF90B 0FD000900 std mon_DSAVE
00FFF90E 016FFFA4B lbra Monitor
*** warning 1: Long branch within short branch range could be optimized
SetRegX:
00FFF911 017FFFB66 lbsr ignBlanks
*** warning 1: Long branch within short branch range could be optimized
00FFF914 017FFFC7A lbsr GetNumber
*** warning 1: Long branch within short branch range could be optimized
00FFF917 0FC000912 ldd mon_numwka+2
00FFF91A 0FD000902 std mon_XSAVE
00FFF91D 016FFFA3C lbra Monitor
*** warning 1: Long branch within short branch range could be optimized
SetRegY:
00FFF920 017FFFB57 lbsr ignBlanks
*** warning 1: Long branch within short branch range could be optimized
00FFF923 017FFFC6B lbsr GetNumber
*** warning 1: Long branch within short branch range could be optimized
00FFF926 0FC000912 ldd mon_numwka+2
00FFF929 0FD000904 std mon_YSAVE
00FFF92C 016FFFA2D lbra Monitor
*** warning 1: Long branch within short branch range could be optimized
SetRegU:
00FFF92F 017FFFB48 lbsr ignBlanks
*** warning 1: Long branch within short branch range could be optimized
00FFF932 017FFFC5C lbsr GetNumber
*** warning 1: Long branch within short branch range could be optimized
00FFF935 0FC000912 ldd mon_numwka+2
00FFF938 0FD000906 std mon_USAVE
00FFF93B 016FFFA1E lbra Monitor
*** warning 1: Long branch within short branch range could be optimized
SetRegS:
00FFF93E 017FFFB39 lbsr ignBlanks
*** warning 1: Long branch within short branch range could be optimized
00FFF941 017FFFC4D lbsr GetNumber
*** warning 1: Long branch within short branch range could be optimized
00FFF944 0FC000912 ldd mon_numwka+2
00FFF947 0FD000908 std mon_SSAVE
00FFF94A 016FFFA0F lbra Monitor
*** warning 1: Long branch within short branch range could be optimized
SetRegDPR:
00FFF94D 017FFFB2A lbsr ignBlanks
*** warning 1: Long branch within short branch range could be optimized
00FFF950 017FFFC3E lbsr GetNumber
*** warning 1: Long branch within short branch range could be optimized
00FFF953 0B6000913 lda mon_numwka+3
00FFF956 0B700090E sta mon_DPRSAVE
00FFF959 016FFFA00 lbra Monitor
*** warning 1: Long branch within short branch range could be optimized
SetRegCCR:
00FFF95C 017FFFB1B lbsr ignBlanks
*** warning 1: Long branch within short branch range could be optimized
00FFF95F 017FFFC2F lbsr GetNumber
*** warning 1: Long branch within short branch range could be optimized
00FFF962 0B6000913 lda mon_numwka+3
00FFF965 0B700090F sta mon_CCRSAVE
00FFF968 016FFF9F1 lbra Monitor
*** warning 1: Long branch within short branch range could be optimized
SetRegPC:
00FFF96B 017FFFB0C lbsr ignBlanks
*** warning 1: Long branch within short branch range could be optimized
00FFF96E 017FFFC20 lbsr GetNumber
*** warning 1: Long branch within short branch range could be optimized
00FFF971 0FC000912 ldd mon_numwka+2
00FFF974 0FD00090C std mon_PCSAVE+2
00FFF977 0F6000911 ldb mon_numwka+1
00FFF97A 0F700090B stb mon_PCSAVE+1
00FFF97D 016FFF9DC lbra Monitor
*** warning 1: Long branch within short branch range could be optimized
;------------------------------------------------------------------------------
; Jump to code
;
; Registers are loaded with values from the monitor register save area before
4030,55 → 4730,55
;------------------------------------------------------------------------------
jump_to_code:
00FFF595 08DCCB bsr GetNumber
00FFF597 01A010 sei
00FFF599 1FE000908 lds mon_SSAVE
00FFF59C 0CCFFF5D0 ldd #jtc_exit ; setup stack for RTS back to monitor
00FFF59F 034006 pshs d
00FFF5A1 0C6000 ldb #0
00FFF5A3 034004 pshs b
00FFF5A5 0FC000912 ldd mon_numwka+2 ; get the address parameter
00FFF5A8 034006 pshs d
00FFF5AA 0F6000911 ldb mon_numwka+1
00FFF5AD 034004 pshs b
00FFF5AF 0FC000906 ldd mon_USAVE
00FFF5B2 034006 pshs d
00FFF5B4 0FC000904 ldd mon_YSAVE
00FFF5B7 034006 pshs d
00FFF5B9 0FC000902 ldd mon_XSAVE
00FFF5BC 034006 pshs d
00FFF5BE 0B600090E lda mon_DPRSAVE
00FFF5C1 034002 pshs a
00FFF5C3 0FC000900 ldd mon_DSAVE
00FFF5C6 034006 pshs d
00FFF5C8 0B600090F lda mon_CCRSAVE
00FFF5CB 034002 pshs a
00FFF5CD 0150350FF puls far ccr,d,dpr,x,y,u,pc
00FFF980 017FFFAF7 lbsr ignBlanks
*** warning 1: Long branch within short branch range could be optimized
00FFF983 017FFFC0B lbsr GetNumber
*** warning 1: Long branch within short branch range could be optimized
00FFF986 01A010 sei
00FFF988 1FE000908 lds mon_SSAVE
00FFF98B 0CCFFF9BA ldd #jtc_exit ; setup stack for RTS back to monitor
00FFF98E 034006 pshs d
00FFF990 0C6000 ldb #0
00FFF992 034004 pshs b
00FFF994 0FC000906 ldd mon_USAVE
00FFF997 034006 pshs d
00FFF999 0FC000904 ldd mon_YSAVE
00FFF99C 034006 pshs d
00FFF99E 0FC000902 ldd mon_XSAVE
00FFF9A1 034006 pshs d
00FFF9A3 0B600090E lda mon_DPRSAVE
00FFF9A6 034002 pshs a
00FFF9A8 0FC000900 ldd mon_DSAVE
00FFF9AB 034006 pshs d
00FFF9AD 0B600090F lda mon_CCRSAVE
00FFF9B0 034002 pshs a
00FFF9B2 01503507F puls far ccr,d,dpr,x,y,u
00FFF9B5 01506E90F000911 jmp far [mon_numwka+1]
jtc_exit:
00FFF5D0 1FF000908 sts >mon_SSAVE ; need to use extended addressing, no direct page setting
00FFF5D3 03280F006FFF leas $6FFF ; reset stack to system area, dont modify flags register!
00FFF5D7 034001 pshs ccr ; now the stack can be used
00FFF5D9 034002 pshs a ; save acca register so we can use it
00FFF5DB 01F0B8 tfr dpr,a ; a = outgoing dpr value
00FFF5DD 0B700090E sta >mon_DPRSAVE ; force extended addressing mode usage here dpr is not set
00FFF5E0 04F clra ; dpg register must be set to zero before values are
00FFF5E1 01F08B tfr a,dpr ; saved in the monitor register save area.
00FFF5E3 035002 puls a ; get back acca
00FFF5E5 0FD000900 std mon_DSAVE ; save regsters, can use direct addressing now
00FFF5E8 0BF000902 stx mon_XSAVE
00FFF5EB 1BF000904 sty mon_YSAVE
00FFF5EE 0FF000906 stu mon_USAVE
00FFF5F1 035002 puls a ; get back ccr
00FFF5F3 0B700090F sta mon_CCRSAVE ; and save it too
00FFF9BA 1FF000908 sts >mon_SSAVE ; need to use extended addressing, no direct page setting
00FFF9BD 03280F006FFF leas $6FFF ; reset stack to system area, dont modify flags register!
00FFF9C1 034001 pshs ccr ; now the stack can be used
00FFF9C3 034002 pshs a ; save acca register so we can use it
00FFF9C5 01F0B8 tfr dpr,a ; a = outgoing dpr value
00FFF9C7 0B700090E sta >mon_DPRSAVE ; force extended addressing mode usage here dpr is not set
00FFF9CA 04F clra ; dpg register must be set to zero before values are
00FFF9CB 01F08B tfr a,dpr ; saved in the monitor register save area.
00FFF9CD 035002 puls a ; get back acca
00FFF9CF 0FD000900 std mon_DSAVE ; save regsters, can use direct addressing now
00FFF9D2 0BF000902 stx mon_XSAVE
00FFF9D5 1BF000904 sty mon_YSAVE
00FFF9D8 0FF000906 stu mon_USAVE
00FFF9DB 035002 puls a ; get back ccr
00FFF9DD 0B700090F sta mon_CCRSAVE ; and save it too
; Reset vectors in case they got toasted.
00FFF5F6 0CCFFEC64 ldd #SerialPeekCharDirect
00FFF5F9 0FD000804 std CharInVec
00FFF5FC 0CCFFE319 ldd #DisplayChar
00FFF5FF 0FD000800 std CharOutVec
00FFF602 0FCFFF2B6 ldd DisplayErr
00FFF605 0FD00080C std MonErrVec
00FFF9E0 0CCFFEC73 ldd #SerialPeekCharDirect
00FFF9E3 0FD000804 std CharInVec
00FFF9E6 0CCFFE31C ldd #DisplayChar
00FFF9E9 0FD000800 std CharOutVec
00FFF9EC 0FCFFF5E5 ldd DisplayErr
00FFF9EF 0FD00080C std MonErrVec
; todo set according to coreid
00FFF608 016FFFF3F lbra DumpRegs ; now go do a register dump
00FFF9F2 016FFFEA4 lbra DumpRegs ; now go do a register dump
*** warning 1: Long branch within short branch range could be optimized
;------------------------------------------------------------------------------
4085,48 → 4785,49
;------------------------------------------------------------------------------
DumpIOFocusList:
00FFF60B 08E000000 ldx #0
00FFF9F5 08E000000 ldx #0
dfl2:
00FFF60E 0E680A000FFC000 ldb IOFocusList,x
00FFF613 0C1018 cmpb #24
00FFF615 02600A bne dfl1
00FFF617 01F010 tfr x,d
00FFF619 017FFEE1B lbsr DispByteAsHex
00FFF9F8 0E680A000FFC000 ldb IOFocusList,x
00FFF9FD 0C1018 cmpb #24
00FFF9FF 02600A bne dfl1
00FFFA01 01F010 tfr x,d
00FFFA03 017FFEA34 lbsr DispByteAsHex
*** warning 1: Long branch within short branch range could be optimized
00FFF61C 0C6020 ldb #' '
00FFF61E 017FFF8C0 lbsr OUTCH
00FFFA06 0C6020 ldb #' '
00FFFA08 017FFF7BE lbsr OUTCH
*** warning 1: Long branch within short branch range could be optimized
dfl1:
00FFF621 030001 inx
00FFF623 08C000010 cmpx #16
00FFF626 025FE6 blo dfl2
00FFF628 017FFDAA7 lbsr CRLF
00FFFA0B 030001 inx
00FFFA0D 08C000010 cmpx #16
00FFFA10 025FE6 blo dfl2
00FFFA12 017FFD6BD lbsr CRLF
*** warning 1: Long branch within short branch range could be optimized
00FFF62B 016FFFA0B lbra Monitor
00FFFA15 016FFF944 lbra Monitor
*** warning 1: Long branch within short branch range could be optimized
bootpg:
00FFF62E 000 fcb $000
00FFFA18 000 fcb $000
boot_stack:
00FFF62F FFC0FF fcw $FFC0FF
00FFFA19 FFC0FF fcw $FFC0FF
numBreakpoints:
00FFF631 008 fcb 8
00FFFA1B 000008 fcw 8
mon_rom_vectab:
00FFF632 FFF634 fcw mon_rom_vecs
00FFFA1D FFFA1F fcw mon_rom_vecs
mon_rom_vecs:
00FFF634 FFF039 fcw Monitor ; enter monitor program
00FFF636 FFEEA9 fcw INCH ; input a character
00FFF638 FFEEE1 fcw OUTCH ; output a character
00FFF63A FFD0D2 fcw CRLF ; output carriage-return, line feed
00FFF63C FFE3DA fcw DisplayString
00FFF63E FFE437 fcw DispByteAsHex
00FFF640 FFE42E fcw DispWordAsHex
00FFF642 FFEEEB fcw ShowSprites
00FFF644 FFEF6F fcw mon_srand
00FFF646 FFEF9D fcw mon_rand
00FFF648 000000 fcw 0 ; operating system call
00FFF64A FFF1A3 fcw GetRange
00FFF64C FFF262 fcw GetNumber
00FFFA1F FFF35C fcw Monitor ; enter monitor program
00FFFA21 FFF191 fcw INCH ; input a character
00FFFA23 FFF1C9 fcw OUTCH ; output a character
00FFFA25 FFD0D2 fcw CRLF ; output carriage-return, line feed
00FFFA27 FFE3DD fcw DisplayString
00FFFA29 FFE43A fcw DispByteAsHex
00FFFA2B FFE431 fcw DispWordAsHex
00FFFA2D FFF1D3 fcw ShowSprites
00FFFA2F FFF257 fcw mon_srand
00FFFA31 FFF285 fcw mon_rand
00FFFA33 000000 fcw 0 ; operating system call
00FFFA35 FFF4D2 fcw GetRange
00FFFA37 FFF591 fcw GetNumber
00FFFA39 FFEC9A fcw SerialPutChar
NumFuncs EQU (*-mon_rom_vectab)/2
4134,19 → 4835,20
; D and possibly X registers.
mon_rettab:
00FFF64E 000 fcb 0 ; monitor
00FFF64F 800 fcb $800 ; INCH
00FFF650 000 fcb 0 ; OUTCH
00FFF651 000 fcb 0 ; CRLF
00FFF652 000 fcb 0 ; DisplayString
00FFF653 000 fcb 0 ; DisplayByte
00FFF654 000 fcb 0 ; DisplayWord
00FFF655 000 fcb 0 ; show sprites
00FFF656 000 fcb 0 ; srand
00FFF657 C00 fcb $C00 ; rand
00FFF658 C00 fcb $C00 ; OS call
00FFF659 000 fcb 0 ; GetRange
00FFF65A 800 fcb $800 ; GetNumber
00FFFA3B 000 fcb 0 ; monitor
00FFFA3C 800 fcb $800 ; INCH
00FFFA3D 000 fcb 0 ; OUTCH
00FFFA3E 000 fcb 0 ; CRLF
00FFFA3F 000 fcb 0 ; DisplayString
00FFFA40 000 fcb 0 ; DisplayByte
00FFFA41 000 fcb 0 ; DisplayWord
00FFFA42 000 fcb 0 ; show sprites
00FFFA43 000 fcb 0 ; srand
00FFFA44 C00 fcb $C00 ; rand
00FFFA45 C00 fcb $C00 ; OS call
00FFFA46 000 fcb 0 ; GetRange
00FFFA47 800 fcb $800 ; GetNumber
00FFFA48 000 fcb 0 ; SerialPutChar
;------------------------------------------------------------------------------
; SWI routine.
4158,308 → 4860,350
;------------------------------------------------------------------------------
swi_rout:
00FFF65B 0E680CFD0 ldb bootpg,pcr ; reset direct page
00FFF65E 01F09B tfr b,dp
00FFFA49 0E680CFCC ldb bootpg,pcr ; reset direct page
00FFFA4C 01F09B tfr b,dp
swi_rout1:
00FFF660 0EE60B ldu 11,s ; get program counter (low order 2 bytes)
00FFF662 0335FF leau -1,u ; backup a byte
00FFF664 07D000810 tst BreakpointFlag ; are we in breakpoint mode?
00FFF667 02700F beq swiNotBkpt
00FFF669 0CE000820 ldu #Breakpoints
00FFF66C 0F6000811 ldb NumSetBreakpoints
00FFF66F 027007 beq swiNotBkpt
00FFFA4E 0EE60B ldu 11,s ; get program counter (low order 2 bytes)
00FFFA50 0335FF leau -1,u ; backup a byte
00FFFA52 07D000810 tst BreakpointFlag ; are we in breakpoint mode?
00FFFA55 02700F beq swiNotBkpt
00FFFA57 18E000820 ldy #Breakpoints
00FFFA5A 0F6000811 ldb NumSetBreakpoints
00FFFA5D 027007 beq swiNotBkpt
swi_rout2:
00FFF671 2A3A01 cmpu ,y++
00FFF673 02704B beq processBreakpoint
00FFF675 05A decb
00FFF676 026FF9 bne swi_rout2
00FFFA5F 2A3A01 cmpu ,y++
00FFFA61 02704B beq processBreakpoint
00FFFA63 05A decb
00FFFA64 026FF9 bne swi_rout2
swiNotBkpt:
00FFF678 07F000810 clr BreakpointFlag
00FFF67B 037006 pulu d ; get function #, increment PC
00FFF67D 0C100E cmpb #NumFuncs
00FFF67F 122FFFC34 lbhi DisplayErr
00FFFA66 07F000810 clr BreakpointFlag
00FFFA69 037006 pulu d ; get function #, increment PC
00FFFA6B 0C100F cmpb #NumFuncs
00FFFA6D 122FFFB75 lbhi DisplayErr
*** warning 1: Long branch within short branch range could be optimized
00FFF682 0EF60B stu 11,s ; save updated PC on stack
00FFF684 0C100A cmpb #MF_OSCALL
00FFF686 02706D beq swiCallOS
00FFF688 058 aslb ; 2 bytes per vector
00FFF689 0AE80CFA6 ldx mon_rom_vectab,pcr
00FFF68C 03A abx
00FFF68D 0AE804 ldx ,x
00FFF68F 0BF000928 stx jmpvec
00FFF692 054 lsrb
00FFF693 08EFFF64E ldx #mon_rettab
00FFF696 03A abx
00FFF697 0E6804 ldb ,x
00FFF699 0F7000930 stb mon_retflag
00FFF69C 1FF000908 sts mon_SSAVE ; save the stack pointer
00FFF69F 0EC601 ldd 1,s ; get back D
00FFF6A1 0AE604 ldx 4,s ; get back X
00FFF6A3 1AE606 ldy 6,s ; get back Y
00FFF6A5 0EE608 ldu 8,s ; get back U
00FFF6A7 1EE80CF85 lds boot_stack,pcr ; and use our own stack
00FFF6AA 0AD90F000928 jsr [jmpvec] ; call the routine
00FFFA70 0EF60B stu 11,s ; save updated PC on stack
00FFFA72 0C100A cmpb #MF_OSCALL
00FFFA74 027072 beq swiCallOS
00FFFA76 058 aslb ; 2 bytes per vector
00FFFA77 0AE80CFA3 ldx mon_rom_vectab,pcr
00FFFA7A 03A abx
00FFFA7B 0AE804 ldx ,x
00FFFA7D 0BF000928 stx jmpvec
00FFFA80 054 lsrb
00FFFA81 08EFFFA3B ldx #mon_rettab
00FFFA84 03A abx
00FFFA85 0E6804 ldb ,x
00FFFA87 0F7000930 stb mon_retflag
00FFFA8A 1FF000908 sts mon_SSAVE ; save the stack pointer
00FFFA8D 0EC601 ldd 1,s ; get back D
00FFFA8F 0AE604 ldx 4,s ; get back X
00FFFA91 1AE606 ldy 6,s ; get back Y
00FFFA93 0EE608 ldu 8,s ; get back U
00FFFA95 1EE80CF81 lds boot_stack,pcr ; and use our own stack
00FFFA98 0AD90F000928 jsr [jmpvec] ; call the routine
swi_rout3:
00FFF6AE 1FE000908 lds mon_SSAVE ; restore stack
00FFF6B1 07D000930 tst mon_retflag
00FFF6B4 02A009 bpl swi_rout4
00FFF6B6 0ED601 std 1,s ; return value in D
00FFF6B8 078000930 asl mon_retflag
00FFF6BB 02A002 bpl swi_rout4
00FFF6BD 0AF604 stx 4,s ; return value in X
00FFFA9C 1FE000908 lds mon_SSAVE ; restore stack
00FFFA9F 07D000930 tst mon_retflag
00FFFAA2 02A009 bpl swi_rout4
00FFFAA4 0ED601 std 1,s ; return value in D
00FFFAA6 078000930 asl mon_retflag
00FFFAA9 02A002 bpl swi_rout4
00FFFAAB 0AF604 stx 4,s ; return value in X
swi_rout4:
00FFF6BF 03B rti
00FFFAAD 03B rti
;------------------------------------------------------------------------------
; A breakpoint was struck during program execution, process accordingly.
;------------------------------------------------------------------------------
processBreakpoint:
00FFF6C0 0A6E04 lda ,s
00FFF6C2 0B700090F sta mon_CCRSAVE
00FFF6C5 0EC601 ldd 1,s
00FFF6C7 0FD000900 std mon_DSAVE
00FFF6CA 0E6603 ldb 3,s
00FFF6CC 0F700090E stb mon_DPRSAVE
00FFF6CF 0EC604 ldd 4,s
00FFF6D1 0FD000902 std mon_XSAVE
00FFF6D4 0EC606 ldd 6,s
00FFF6D6 0FD000904 std mon_YSAVE
00FFF6D9 0EC608 ldd 8,s
00FFF6DB 0FD000906 std mon_USAVE
00FFF6DE 1FF000908 sts mon_SSAVE
00FFF6E1 0EC60B ldd 11,s
00FFF6E3 0FD00090A std mon_PCSAVE
00FFF6E6 1EE80CF46 lds boot_stack,pcr
00FFF6E9 0CCFFF6AE ldd #swi_rout3 ; setup so monitor can return
00FFF6EC 034006 pshs d
00FFF6EE 08D01F bsr DisarmAllBreakpoints
00FFF6F0 016FFFE57 lbra DumpRegs
00FFFAAE 0A6E04 lda ,s
00FFFAB0 0B700090F sta mon_CCRSAVE
00FFFAB3 0EC601 ldd 1,s
00FFFAB5 0FD000900 std mon_DSAVE
00FFFAB8 0E6603 ldb 3,s
00FFFABA 0F700090E stb mon_DPRSAVE
00FFFABD 0EC604 ldd 4,s
00FFFABF 0FD000902 std mon_XSAVE
00FFFAC2 0EC606 ldd 6,s
00FFFAC4 0FD000904 std mon_YSAVE
00FFFAC7 0EC608 ldd 8,s
00FFFAC9 0FD000906 std mon_USAVE
00FFFACC 1FF000908 sts mon_SSAVE
00FFFACF 0E660A ldb 10,s
00FFFAD1 0F700090A stb mon_PCSAVE
00FFFAD4 0EC60B ldd 11,s
00FFFAD6 0FD00090B std mon_PCSAVE+1
00FFFAD9 1EE80CF3D lds boot_stack,pcr
00FFFADC 0CCFFFA9C ldd #swi_rout3 ; setup so monitor can return
00FFFADF 034006 pshs d
00FFFAE1 08D01F bsr DisarmAllBreakpoints
00FFFAE3 016FFFDB3 lbra DumpRegs
*** warning 1: Long branch within short branch range could be optimized
xitMonitor:
00FFF6F3 020039 bra ArmAllBreakpoints
00FFFAE6 020039 bra ArmAllBreakpoints
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
swiCallOS:
00FFF6F5 033401 leau 1,u ; next byte is func number
00FFF6F7 0E6C00 ldb ,u+
00FFF6F9 0C1019 cmpb #NumOSFuncs ; check for valid range
00FFF6FB 122FFFBB8 lbhi DisplayErr
00FFFAE8 033401 leau 1,u ; next byte is func number
00FFFAEA 0E6C00 ldb ,u+
00FFFAEC 0C1019 cmpb #NumOSFuncs ; check for valid range
00FFFAEE 122FFFAF4 lbhi DisplayErr
*** warning 1: Long branch within short branch range could be optimized
00FFF6FE 0EF60B stu 11,s ; save updateed PC on stack
00FFF700 058 aslb ; compute vector address
00FFF701 08EFFEEF6 ldx #OSCallTbl
00FFF704 06DE0F tst b,x ; check for non-zero vector
00FFF706 027FA6 beq swi_rout3
00FFFAF1 0EF60B stu 11,s ; save updateed PC on stack
00FFFAF3 058 aslb ; compute vector address
00FFFAF4 08EFFF1DE ldx #OSCallTbl
00FFFAF7 06DE0F tst b,x ; check for non-zero vector
00FFFAF9 027FA1 beq swi_rout3
osc1:
; tst OSSEMA+1 ; wait for availability
; beq osc1
00FFF708 0ADF0F jsr [b,x] ; call the OS routine
00FFFAFB 0ADF0F jsr [b,x] ; call the OS routine
oscx:
00FFF70A 07FEF0011 clr OSSEMA+1
00FFF70D 020F9F bra swi_rout3
00FFFAFD 07FEF0011 clr OSSEMA+1
00FFFB00 020F9A bra swi_rout3
;------------------------------------------------------------------------------
; DisarmAllBreakpoints, used when entering the monitor.
;------------------------------------------------------------------------------
DisarmAllBreakpoints:
00FFF70F 034036 pshs d,x,y
00FFF711 18E000000 ldy #0
00FFF714 05F clrb
00FFF715 08E000830 ldx #BreakpointBytes ; x = breakpoint byte table address
00FFFB02 034036 pshs d,x,y
00FFFB04 18E000000 ldy #0
00FFFB07 05F clrb
00FFFB08 08E000830 ldx #BreakpointBytes ; x = breakpoint byte table address
disarm2:
00FFF718 0C1631 cmpb #numBreakpoints ; safety check
00FFF71A 024010 bhs disarm1
00FFF71C 0F1000811 cmpb NumSetBreakpoints
00FFF71F 02400B bhs disarm1
00FFF721 0A6837 lda b,x ; get memory byte
00FFF723 0A7B09000820 sta [Breakpoints,y] ; and store it back to memory
00FFF727 031202 leay 2,y ; increment for next address
00FFF729 05C incb ; increment to next byte
00FFF72A 020FEC bra disarm2 ; loop back
00FFFB0B 0C1A1B cmpb #numBreakpoints ; safety check
00FFFB0D 024010 bhs disarm1
00FFFB0F 0F1000811 cmpb NumSetBreakpoints
00FFFB12 02400B bhs disarm1
00FFFB14 0A6837 lda b,x ; get memory byte
00FFFB16 0A7B09000820 sta [Breakpoints,y] ; and store it back to memory
00FFFB1A 031202 leay 2,y ; increment for next address
00FFFB1C 05C incb ; increment to next byte
00FFFB1D 020FEC bra disarm2 ; loop back
disarm1:
00FFF72C 0350B6 puls d,x,y,pc
00FFFB1F 0350B6 puls d,x,y,pc
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
ArmAllBreakpoints:
00FFF72E 034036 pshs d,x,y
00FFF730 18E000000 ldy #0
00FFF733 05F clrb
00FFF734 08E000830 ldx #BreakpointBytes ; x = breakpoint byte table address
00FFFB21 034036 pshs d,x,y
00FFFB23 18E000000 ldy #0
00FFFB26 05F clrb
00FFFB27 08E000830 ldx #BreakpointBytes ; x = breakpoint byte table address
arm2:
00FFF737 0F1FFF631 cmpb numBreakpoints ; safety check
00FFF73A 024010 bhs arm1
00FFF73C 0F1000811 cmpb NumSetBreakpoints
00FFF73F 02400B bhs arm1
00FFF741 0A6B09000820 lda [Breakpoints,y] ; load byte at memory address
00FFF745 0A7B0D sta b,x ; save in table
00FFF747 031202 leay 2,y ; increment for next address
00FFF749 05C incb ; increment to next byte
00FFF74A 020FEB bra arm2 ; loop back
00FFFB2A 0F1FFFA1B cmpb numBreakpoints ; safety check
00FFFB2D 024010 bhs arm1
00FFFB2F 0F1000811 cmpb NumSetBreakpoints
00FFFB32 02400B bhs arm1
00FFFB34 0A6B09000820 lda [Breakpoints,y] ; load byte at memory address
00FFFB38 0A7B0D sta b,x ; save in table
00FFFB3A 031202 leay 2,y ; increment for next address
00FFFB3C 05C incb ; increment to next byte
00FFFB3D 020FEB bra arm2 ; loop back
arm1:
00FFF74C 0350B6 puls d,x,y,pc
00FFFB3F 0350B6 puls d,x,y,pc
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
ArmBreakpoint:
00FFF74E 034036 pshs d,x,y
00FFF750 0B6000811 lda NumSetBreakpoints ; check if too many breakpoints set
00FFF753 0B1FFF631 cmpa numBreakpoints
00FFF756 124FFFB5D lbhs DisplayErr
00FFFB41 034036 pshs d,x,y
00FFFB43 0B6000811 lda NumSetBreakpoints ; check if too many breakpoints set
00FFFB46 0B1FFFA1B cmpa numBreakpoints
00FFFB49 124FFFA99 lbhs DisplayErr
*** warning 1: Long branch within short branch range could be optimized
00FFF759 017FFFA70 lbsr GetHexNumber ; get address parameter
00FFFB4C 017FFF92B lbsr ignBlanks
*** warning 1: Long branch within short branch range could be optimized
00FFF75C 0F6000811 ldb NumSetBreakpoints ; bv= number of set breakpoints
00FFF75F 1BE000912 ldy mon_numwka+2 ; get address
00FFF762 0A6A04 lda ,y ; get byte at address
00FFF764 08E000830 ldx #BreakpointBytes ; and store byte in a table
00FFF767 0A7A05 sta b,x ; record
00FFF769 08603F lda #OPC_SWI ; put a SWI instruction in place
00FFF76B 0A7A04 sta ,y
00FFF76D 08E000820 ldx #Breakpoints ; also store the address in a table
00FFF770 058 aslb ; index for 2 byte values
00FFF771 1AFA05 sty b,x
00FFF773 054 lsrb ; size back to single byte
00FFF774 05C incb
00FFF775 0F7000811 stb NumSetBreakpoints
00FFF778 0350B6 puls d,x,y,pc
00FFFB4F 017FFF9A9 lbsr GetHexNumber ; get address parameter
*** warning 1: Long branch within short branch range could be optimized
00FFFB52 05D tstb
00FFFB53 12BFFFA8F lbmi DisplayErr
*** warning 1: Long branch within short branch range could be optimized
00FFFB56 0F6000811 ldb NumSetBreakpoints ; bv= number of set breakpoints
00FFFB59 1BE000912 ldy mon_numwka+2 ; get address
00FFFB5C 0A6A04 lda ,y ; get byte at address
00FFFB5E 08E000830 ldx #BreakpointBytes ; and store byte in a table
00FFFB61 0A7A05 sta b,x ; record
00FFFB63 08603F lda #OPC_SWI ; put a SWI instruction in place
00FFFB65 0A7A04 sta ,y
00FFFB67 08E000820 ldx #Breakpoints ; also store the address in a table
00FFFB6A 058 aslb ; index for 2 byte values
00FFFB6B 1AFA05 sty b,x
00FFFB6D 054 lsrb ; size back to single byte
00FFFB6E 05C incb
00FFFB6F 0F7000811 stb NumSetBreakpoints
00FFFB72 035036 puls d,x,y
00FFFB74 016FFF7E5 lbra Monitor
*** warning 1: Long branch within short branch range could be optimized
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
DisarmBreakpoint:
00FFF77A 034076 pshs d,x,y,u
00FFF77C 017FFFA4D lbsr GetHexNumber
00FFFB77 034076 pshs d,x,y,u
00FFFB79 017FFF8FE lbsr ignBlanks
*** warning 1: Long branch within short branch range could be optimized
00FFF77F 05F clrb
00FFF780 05F clrb
00FFF781 01F001 tfr d,x ; x = zero too
00FFFB7C 017FFF97C lbsr GetHexNumber
*** warning 1: Long branch within short branch range could be optimized
00FFFB7F 05D tstb
00FFFB80 12BFFF7D9 lbmi Monitor
*** warning 1: Long branch within short branch range could be optimized
00FFFB83 05F clrb
00FFFB84 05F clrb
00FFFB85 01F001 tfr d,x ; x = zero too
disarm6:
00FFF783 0F1FFF631 cmpb numBreakpoints ; no more than this many may be set
00FFF786 024041 bhs disarm4
00FFF788 0F1000811 cmpb NumSetBreakpoints ; number actually set
00FFF78B 02403C bhs disarm4
00FFF78D 1AE809000820 ldy Breakpoints,x ; y = breakpoint address
00FFF791 1BC000912 cmpy mon_numwka+2 ; is it the one we want?
00FFF794 02602E bne disarm3 ; if not, go increment to next
00FFF796 0BE000912 ldx mon_numwka+2 ; x = memory address
00FFF799 18E000830 ldy #BreakpointBytes
00FFF79C 0A6A0D lda b,y ; get saved byte from table
00FFF79E 0A7804 sta ,x ; set the byte at the memory address
00FFFB87 0F1FFFA1B cmpb numBreakpoints ; no more than this many may be set
00FFFB8A 024041 bhs disarm4
00FFFB8C 0F1000811 cmpb NumSetBreakpoints ; number actually set
00FFFB8F 02403C bhs disarm4
00FFFB91 1AE809000820 ldy Breakpoints,x ; y = breakpoint address
00FFFB95 1BC000912 cmpy mon_numwka+2 ; is it the one we want?
00FFFB98 02602E bne disarm3 ; if not, go increment to next
00FFFB9A 0BE000912 ldx mon_numwka+2 ; x = memory address
00FFFB9D 18E000830 ldy #BreakpointBytes
00FFFBA0 0A6A0D lda b,y ; get saved byte from table
00FFFBA2 0A7804 sta ,x ; set the byte at the memory address
; compress breakpoint table by removing breakpoint
00FFF7A0 07A000811 dec NumSetBreakpoints ; set the new number of set breakpoints
00FFF7A3 034004 pshs b ; save the position we're removing from
00FFFBA4 07A000811 dec NumSetBreakpoints ; set the new number of set breakpoints
00FFFBA7 034004 pshs b ; save the position we're removing from
disarm7:
00FFF7A5 05C incb ; set index for next byte
00FFF7A6 0A6A05 lda b,y ; get byte
00FFF7A8 05A decb ; and store it back
00FFF7A9 0A7A05 sta b,y
00FFF7AB 05C incb ; move to next position
00FFF7AC 0F1FFF631 cmpb numBreakpoints ; hit end of table?
00FFF7AF 025FF4 blo disarm7
00FFF7B1 035004 puls b ; get back position
00FFF7B3 058 aslb ; times two for word index
00FFF7B4 04F clra
00FFF7B5 01F002 tfr d,y
00FFF7B7 054 lsrb ; back to byte index value
00FFFBA9 05C incb ; set index for next byte
00FFFBAA 0A6A05 lda b,y ; get byte
00FFFBAC 05A decb ; and store it back
00FFFBAD 0A7A05 sta b,y
00FFFBAF 05C incb ; move to next position
00FFFBB0 0F1FFFA1B cmpb numBreakpoints ; hit end of table?
00FFFBB3 025FF4 blo disarm7
00FFFBB5 035004 puls b ; get back position
00FFFBB7 058 aslb ; times two for word index
00FFFBB8 04F clra
00FFFBB9 01F002 tfr d,y
00FFFBBB 054 lsrb ; back to byte index value
disarm8:
00FFF7B8 0EE202 ldu 2,y ; get next breakpoint address
00FFF7BA 0EFA01 stu ,y++ ; store in current pos, increment
00FFF7BC 05C incb ; increment count
00FFF7BD 0F1FFF631 cmpb numBreakpoints ; hit end of table?
00FFF7C0 025FF6 blo disarm8
00FFF7C2 0350F6 puls d,x,y,u,pc
00FFFBBC 0EE202 ldu 2,y ; get next breakpoint address
00FFFBBE 0EFA01 stu ,y++ ; store in current pos, increment
00FFFBC0 05C incb ; increment count
00FFFBC1 0F1FFFA1B cmpb numBreakpoints ; hit end of table?
00FFFBC4 025FF6 blo disarm8
00FFFBC6 0350F6 puls d,x,y,u,pc
disarm3:
00FFF7C4 030002 leax 2,x
00FFF7C6 05C incb
00FFF7C7 020FBA bra disarm6
00FFFBC8 030002 leax 2,x
00FFFBCA 05C incb
00FFFBCB 020FBA bra disarm6
disarm4:
00FFF7C9 0350F6 puls d,x,y,u,pc
00FFFBCD 035076 puls d,x,y,u
00FFFBCF 016FFF78A lbra Monitor
*** warning 1: Long branch within short branch range could be optimized
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
ListBreakpoints:
00FFFBD2 034016 pshs d,x
00FFFBD4 03F swi
00FFFBD5 003 fcb MF_CRLF
00FFFBD6 08E000000 ldx #0
00FFFBD9 0C6000 ldb #0
lbrk1:
00FFFBDB 0F1FFFA1B cmpb numBreakpoints
00FFFBDE 024016 bhs lbrk2
00FFFBE0 0F1000811 cmpb NumSetBreakpoints
00FFFBE3 024011 bhs lbrk2
00FFFBE5 0EC809000820 ldd Breakpoints,x
00FFFBE9 030002 leax 2,x
00FFFBEB 05C incb
00FFFBEC 034004 pshs b
00FFFBEE 03F swi
00FFFBEF 006 fcb MF_DisplayWordAsHex
00FFFBF0 03F swi
00FFFBF1 003 fcb MF_CRLF
00FFFBF2 035004 puls b
00FFFBF4 020FE5 bra lbrk1
lbrk2:
00FFFBF6 035016 puls d,x
00FFFBF8 016FFF761 lbra Monitor
*** warning 1: Long branch within short branch range could be optimized
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
swi3_rout:
00FFF7CB 01A010 sei
00FFF7CD 0A6E04 lda ,s
00FFF7CF 0B700090F sta mon_CCRSAVE
00FFF7D2 0EC601 ldd 1,s
00FFF7D4 0FD000900 std mon_DSAVE
00FFF7D7 0E6603 ldb 3,s
00FFF7D9 0F700090E stb mon_DPRSAVE
00FFF7DC 0EC604 ldd 4,s
00FFF7DE 0FD000902 std mon_XSAVE
00FFF7E1 0EC606 ldd 6,s
00FFF7E3 0FD000904 std mon_YSAVE
00FFF7E6 0EC608 ldd 8,s
00FFF7E8 0FD000906 std mon_USAVE
00FFF7EB 1FF000908 sts mon_SSAVE
00FFF7EE 0EC60B ldd 11,s
00FFF7F0 0FD00090A std mon_PCSAVE
00FFF7F3 1FF000908 sts mon_SSAVE
00FFF7F6 1CE003FFF lds #$3FFF
00FFF7F9 0CCFFF803 ldd #swi3_exit
00FFF7FC 034006 pshs d
00FFF7FE 01C0EF cli
00FFF800 07EFFF54A jmp DumpRegs
00FFFBFB 01A010 sei
00FFFBFD 0A6E04 lda ,s
00FFFBFF 0B700090F sta mon_CCRSAVE
00FFFC02 0EC601 ldd 1,s
00FFFC04 0FD000900 std mon_DSAVE
00FFFC07 0E6603 ldb 3,s
00FFFC09 0F700090E stb mon_DPRSAVE
00FFFC0C 0EC604 ldd 4,s
00FFFC0E 0FD000902 std mon_XSAVE
00FFFC11 0EC606 ldd 6,s
00FFFC13 0FD000904 std mon_YSAVE
00FFFC16 0EC608 ldd 8,s
00FFFC18 0FD000906 std mon_USAVE
00FFFC1B 1FF000908 sts mon_SSAVE
00FFFC1E 0EC60B ldd 11,s
00FFFC20 0FD00090A std mon_PCSAVE
00FFFC23 1FF000908 sts mon_SSAVE
00FFFC26 1CE003FFF lds #$3FFF
00FFFC29 0CCFFFC33 ldd #swi3_exit
00FFFC2C 034006 pshs d
00FFFC2E 01C0EF cli
00FFFC30 07EFFF899 jmp DumpRegs
swi3_exit:
00FFF803 1FE000908 lds mon_SSAVE
00FFF806 03B rti
00FFFC33 1FE000908 lds mon_SSAVE
00FFFC36 03B rti
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
firq_rout:
00FFF807 03B rti
00FFFC37 03B rti
irq_rout:
00FFFC38 04F clra
00FFFC39 01F08B tfr a,dpr
setdp $000
; lbsr SerialIRQ ; check for recieved character
00FFF808 017FFEC85 lbsr TimerIRQ
00FFFC3B 017FFE855 lbsr TimerIRQ
*** warning 1: Long branch within short branch range could be optimized
; Reset the edge sense circuit in the PIC
; lda #31 ; Timer is IRQ #31
; sta IrqSource ; stuff a byte indicating the IRQ source for PEEK()
; sta PIC+16 ; register 16 is edge sense reset reg
; lda VIA+VIA_IFR
; bpl notTimerIRQ2
; bita #$800
; beq notTimerIRQ2
; clr VIA+VIA_T3LL
; clr VIA+VIA_T3LH
; inc $E00037 ; update timer IRQ screen flag
;notTimerIRQ2:
00FFFC3E 0B6FFC014 lda IrqBase ; get the IRQ flag byte
00FFFC41 044 lsra
00FFFC42 0BAFFC014 ora IrqBase
00FFFC45 084FE0 anda #$FE0
00FFFC47 0B7FFC014 sta IrqBase
00FFF80B 0B6FFC014 lda IrqBase ; get the IRQ flag byte
00FFF80E 044 lsra
00FFF80F 0BAFFC014 ora IrqBase
00FFF812 084FE0 anda #$FE0
00FFF814 0B7FFC014 sta IrqBase
; inc TEXTSCR+54 ; update IRQ live indicator on screen
; inc TEXTSCR+$2000+54
; flash the cursor
; only bother to flash the cursor for the task with the IO focus.
; lda COREID
; cmpa IOFocusID
; bne tr1a
; lda CursorFlash ; test if we want a flashing cursor
; beq tr1a
; lbsr CalcScreenLoc ; compute cursor location in memory
; tfr d,y
; lda $2000,y ; get color code $2000 higher in memory
; ldb IRQFlag ; get counter
; lsrb
; lsra
; lsra
; lsra
; lsra
; lsrb
; rola
; lsrb
; rola
; lsrb
; rola
; lsrb
; rola
; sta $E00000,y ; store the color code back to memory
00FFFC4A 0150B6FFFFFFFE0 lda COREID
00FFFC4F 0B1FFC010 cmpa IOFocusID
00FFFC52 02600D bne tr1a
00FFFC54 096114 lda CursorFlash ; test if we want a flashing cursor
00FFFC56 027009 beq tr1a
00FFFC58 017FFE69A lbsr CalcScreenLoc ; compute cursor location in memory
*** warning 1: Long branch within short branch range could be optimized
00FFFC5B 01F002 tfr d,y
00FFFC5D 06CA09002000 inc $2000,y ; get color code $2000 higher in memory
tr1a:
00FFF817 03B rti
00FFFC61 03B rti
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
nmi_rout:
00FFF818 0150F6FFFFFFFE0 ldb COREID
00FFF81D 086049 lda #'I'
00FFF81F 08EE00028 ldx #TEXTSCR+40
00FFF822 0A7807 sta b,x
00FFFC62 0150F6FFFFFFFE0 ldb COREID
00FFFC67 086049 lda #'I'
00FFFC69 08EE00028 ldx #TEXTSCR+40
00FFFC6C 0A7A0D sta b,x
rti_insn:
00FFF824 03B rti
00FFFC6E 03B rti
; Special Register Area
org $FFFFE0
4467,35 → 5211,36
; Interrupt vector table
org $FFFFF0
00FFFFF0 FFF824 fcw rti_insn ; reserved
00FFFFF2 FFF7CB fcw swi3_rout ; SWI3
00FFFFF4 FFF824 fcw rti_insn ; SWI2
00FFFFF6 FFF807 fcw firq_rout ; FIRQ
00FFFFF8 FFF808 fcw irq_rout ; IRQ
00FFFFFA FFF65B fcw swi_rout ; SWI
00FFFFFC FFF818 fcw nmi_rout ; NMI
00FFFFF0 FFFC6E fcw rti_insn ; reserved
00FFFFF2 FFFBFB fcw swi3_rout ; SWI3
00FFFFF4 FFFC6E fcw rti_insn ; SWI2
00FFFFF6 FFFC37 fcw firq_rout ; FIRQ
00FFFFF8 FFFC38 fcw irq_rout ; IRQ
00FFFFFA FFFA49 fcw swi_rout ; SWI
00FFFFFC FFFC62 fcw nmi_rout ; NMI
00FFFFFE FFE023 fcw start ; RST
 
66 warning(s) in pass 2.
112 warning(s) in pass 2.
 
SYMBOL TABLE
ABD1 02 00FFF2AC ABD2 02 00FFF2B3 ACIA 00 FFE30100 ACIA_CMD 00 00000002
ACIA_CTRL 00 00000003 ACIA_CTRL2 00 0000000B ACIA_RX 00 00000000 ACIA_STAT 00 00000001
ACIA_TX 00 00000000 ARM1 02 00FFF74C ARM2 02 00FFF737 ARMALLBREAKPOINTS 02 00FFF72E
ARMBREAKPOINT 02 00FFF74E ASCIITOBINDIGIT 02 00FFF2A6 ASCIITODECDIGIT 02 00FFF298 ASCIITOHEXNYBBLE 02 00FFF270
ASMBUF 00 00000160 BIOS_SCREENS 00 17000000 BLANKLINE 02 00FFE280 BLKCPYDST 00 00000020
BLKCPYSRC 00 0000001C BLNKLN1 02 00FFE293 BOOTPG 02 00FFF62E BOOT_STACK 02 00FFF62F
BREAKPOINTBYTES 00 00000830 BREAKPOINTFLAG 00 00000810 BREAKPOINTS 00 00000820 CALCSCREENLOC 02 00FFE2F2
CHARCOLOR 00 00000112 CHARINVEC 00 00000804 CHAROUTVEC 00 00000800 CHECKPOINT 02 00FFE13D
CLEARSCREEN 02 00FFE239 CLEARSCREENJMP 02 00FFD300 CMDPROMPT 02 00FFF009 CMDPROMPTJI 00 00000808
CMDTABLE1 02 00FFEFB2 CMDTABLE2 02 00FFEFE3 COLORCODELOCATION 00 00000014 COLS 00 00000040
COPYSCREENTOVIRTUALSCREEN 02 00FFE209 COPYVIRTUALSCREENTOSCREEN 02 00FFE1D2 COREID 00 FFFFFFE0 CR 00 0000000D
CRLF 02 00FFD0D2 CRLF1 02 00FFD0D2 CRLFST 02 00FFE422 CS1 02 00FFE246
CS2 02 00FFE25D CS2V1 02 00FFE215 CS3 02 00FFE263 CSL1 02 00FFE311
ABD1 02 00FFF5DB ABD2 02 00FFF5E2 ACIA 00 FFE30100 ACIA_CMD 00 00000002
ACIA_CTRL 00 00000003 ACIA_CTRL2 00 0000000B ACIA_IRQS 00 00000004 ACIA_RX 00 00000000
ACIA_STAT 00 00000001 ACIA_TX 00 00000000 ACK 00 00000006 ARM1 02 00FFFB3F
ARM2 02 00FFFB2A ARMALLBREAKPOINTS 02 00FFFB21 ARMBREAKPOINT 02 00FFFB41 ASCIITOBINDIGIT 02 00FFF5D5
ASCIITODECDIGIT 02 00FFF5C7 ASCIITOHEXNYBBLE 02 00FFF59F ASMBUF 00 00000160 BIOS_SCREENS 00 17000000
BLANKLINE 02 00FFE283 BLKCPYDST 00 00000020 BLKCPYSRC 00 0000001C BLNKLN1 02 00FFE296
BOOTPG 02 00FFFA18 BOOT_STACK 02 00FFFA19 BREAKPOINTBYTES 00 00000830 BREAKPOINTFLAG 00 00000810
BREAKPOINTS 00 00000820 BS 00 00000008 CALCSCREENLOC 02 00FFE2F5 CAN 00 00000018
CHARCOLOR 00 00000112 CHARINVEC 00 00000804 CHAROUTVEC 00 00000800 CHECKPOINT 02 00FFE140
CLEARSCREEN 02 00FFE23C CLEARSCREENJMP 02 00FFD300 CMDPROMPT 02 00FFF32C CMDPROMPTJI 00 00000808
CMDTABLE1 02 00FFF29A CMDTABLE2 02 00FFF2EC COLORCODELOCATION 00 00000014 COLS 00 00000040
COPYSCREENTOVIRTUALSCREEN 02 00FFE20C COPYVIRTUALSCREENTOSCREEN 02 00FFE1D5 COREID 00 FFFFFFE0 CR 00 0000000D
CRLF 02 00FFD0D2 CRLF1 02 00FFD0D2 CRLFST 02 00FFE425 CS1 02 00FFE249
CS2 02 00FFE260 CS2V1 02 00FFE218 CS3 02 00FFE266 CSL1 02 00FFE314
CTRLC 00 00000003 CTRLH 00 00000008 CTRLI 00 00000009 CTRLJ 00 0000000A
CTRLK 00 0000000B CTRLM 00 0000000D CTRLS 00 00000013 CTRLT 00 00000014
CTRLX 00 00000018 CTRLZ 00 0000001A CURSORCOL 00 00000111 CURSORFLASH 00 00000114
CURSORROW 00 00000110 CV2S1 02 00FFE1E7 DBGCHECKFORKEY 02 00FFEA90 DBGK1 02 00FFEACB
CURSORROW 00 00000110 CV2S1 02 00FFE1EA DBGCHECKFORKEY 02 00FFEA90 DBGK1 02 00FFEACB
DBGK10 02 00FFEB30 DBGK11 02 00FFEB89 DBGK12 02 00FFEB8F DBGK13 02 00FFEB9B
DBGK14 02 00FFEBAB DBGK15 02 00FFEBBA DBGK16 02 00FFEBC5 DBGK17 02 00FFEBCE
DBGK18 02 00FFEBD1 DBGK2 02 00FFEA96 DBGK20 02 00FFEAB8 DBGK22 02 00FFEAD4
4502,127 → 5247,147
DBGK23 02 00FFEAE5 DBGK24 02 00FFEAC6 DBGK3 02 00FFEAE8 DBGK4 02 00FFEAF4
DBGK5 02 00FFEB00 DBGK7 02 00FFEB10 DBGK8 02 00FFEB16 DBGK9 02 00FFEB2A
DBGKNOTALT 02 00FFEB93 DBGKNOTCAPSLOCK 02 00FFEB62 DBGKNOTCTRL 02 00FFEB1A DBGKNOTNUMLOCK 02 00FFEB4B
DBGKNOTRSHIFT 02 00FFEB34 DBGKNOTSCROLLLOCK 02 00FFEB79 DCCR 02 00FFE329 DCLF 02 00FFE3B3
DCX10 02 00FFE363 DCX11 02 00FFE373 DCX12 02 00FFE36F DCX13 02 00FFE37F
DCX14 02 00FFE326 DCX3 02 00FFE3A1 DCX4 02 00FFE3B5 DCX5 02 00FFE390
DCX6 02 00FFE33A DCX7 02 00FFE336 DCX8 02 00FFE347 DCX9 02 00FFE354
DELAY3S 02 00FFE1B5 DFL1 02 00FFF621 DFL2 02 00FFF60E DISARM1 02 00FFF72C
DISARM2 02 00FFF718 DISARM3 02 00FFF7C4 DISARM4 02 00FFF7C9 DISARM6 02 00FFF783
DISARM7 02 00FFF7A5 DISARM8 02 00FFF7B8 DISARMALLBREAKPOINTS 02 00FFF70F DISARMBREAKPOINT 02 00FFF77A
DISPBYTEASHEX 02 00FFE437 DISPDWORDASHEX 02 00FFE425 DISPLAYCHAR 02 00FFE319 DISPLAYERR 02 00FFF2B6
DISPLAYSTRING 02 00FFE3DA DISPLAYSTRINGCRLF 02 00FFE3FA DISPLAYSTRINGDX 02 00FFF2BF DISPNYB 02 00FFE44F
DISPNYB1 02 00FFE45E DISPWORDASHEX 02 00FFE42E DLY3S1 02 00FFE1B8 DLY3S2 02 00FFE1BC
DMPM1 02 00FFF4A1 DMPM2 02 00FFF48C DMPM3 02 00FFF4DA DMPM4 02 00FFF4CC
DMPM5 02 00FFF4C4 DRAM_BASE 00 10000000 DSPJ1B 02 00FFE3EC DSPJ2 02 00FFE3E7
DSRETB 02 00FFE3F5 DUMPIOFOCUSLIST 02 00FFF60B DUMPMEMORY 02 00FFF484 DUMPREGS 02 00FFF54A
DUMRTS 02 00FFE022 EDITMEM1 02 00FFF4FE EDITMEM2 02 00FFF4E9 EDITMEM3 02 00FFF51D
EDITMEM4 02 00FFF508 EDITMEM6 02 00FFF514 EDITMEMORY 02 00FFF4E0 ENDOFWORD 02 00FFF0ED
FARFLAG 00 0000015F FILLM1 02 00FFF530 FILLM2 02 00FFF540 FILLM3 02 00FFF547
FILLMEMORY 02 00FFF520 FIRQ_ROUT 02 00FFF807 FIRST_CORE 00 00000001 FREEMBX 02 00000002
FREEMSG 02 00000006 FREETCB 00 0000078A GETBINNUMBER 02 00FFF1FC GETDECNUMBER 02 00FFF223
GETHEXNUMBER 02 00FFF1CC GETKEY 02 00FFEA92 GETNUMBER 02 00FFF262 GETRANGE 02 00FFF1A3
GETSCREENLOCATION 02 00FFE29A GETTWOPARAMS 02 00FFF182 GRNG1 02 00FFF1BE GSL1 02 00FFE2AC
GTBIN1 02 00FFF21F GTBIN2 02 00FFF209 GTDC3 02 00FFF2A3 GTDEC1 02 00FFF25E
GTDEC2 02 00FFF230 GTHX3 02 00FFF295 GTHX5 02 00FFF27B GTHX6 02 00FFF288
GTHXN1 02 00FFF1F8 GTHXN2 02 00FFF1D9 HC1 02 00FFE2CA HELPMSG 02 00FFF2CF
HEX2 02 00FFD2CE HEX4 02 00FFD2D2 HOMECURSOR 02 00FFE2B0 HOMECURSORJMP 02 00FFD308
I2CW1 02 00FFE4BF I2CWR1 02 00FFE4EC I2C_CMD 00 00000004 I2C_CTRL 00 00000002
I2C_INIT 02 00FFE4B3 I2C_PREH 00 00000001 I2C_PREL 00 00000000 I2C_RXR 00 00000003
I2C_STAT 00 00000004 I2C_TXR 00 00000003 I2C_WAIT_RX_NACK 02 00FFE4EA I2C_WAIT_TIP 02 00FFE4BD
I2C_WR_CMD 02 00FFE4C7 I2C_XMIT1 02 00FFE4D0 ICC1 02 00FFE3D6 ICC2 02 00FFE3D8
ICR1 02 00FFE3C8 IGNBLANKS 02 00FFF14B IGNBLANKS1 02 00FFF14B INCCURSORPOS 02 00FFE3B7
INCCURSORROW 02 00FFE3C6 INCH 02 00FFEEA9 INCH1 02 00FFEEBE INCH2 02 00FFEEAB
INCHE 02 00FFEEC7 INCHEK 02 00FFEECB INCHEK1 02 00FFEEE0 INCHEK2 02 00FFEEDD
INCHEK3 02 00FFEED4 INIT 02 00FFE0A8 INIT1 02 00FFE0B0 INIT2 02 00FFE0F8
INITSERIAL 02 00FFEBEF IOFOCUSID 00 00FFC010 IOFOCUSLIST 00 00FFC000 IOFOCUSNDX 00 00000100
IRQBASE 00 00FFC014 IRQFLAG 00 00FFC012 IRQSOURCE 00 00FFC011 IRQ_ROUT 02 00FFF808
JMPVEC 00 00000928 JTC_EXIT 02 00FFF5D0 JUMP_TO_CODE 02 00FFF595 KBDBUFFULL 02 00FFEA8D
KBDFIFO 00 00000040 KBDFIFOALIAS 00 00C00040 KBDHEADRCV 00 00000127 KBDI0002 02 00FFE9C9
KBDI0004 02 00FFEA0E KBDITRYAGAIN 02 00FFEA02 KBDRCVCOUNT 02 00FFEA3D KBDTAILRCV 00 00000128
KBGS1 02 00FFE978 KBGS2 02 00FFE970 KBGS3 02 00FFE961 KEYBD 00 FFE30400
KEYBDACK 00 FFFFCC00 KEYBDBAD 00 FFFFCB00 KEYBDBLOCK 00 00000126 KEYBDBUFFER 00 FFFFC000
KEYBDCHECKFORKEYDIRECT 02 00FFEEA7 KEYBDCLOSE 02 00FFEBEB KEYBDCLR 00 FFE30402 KEYBDCONTROLCODES 02 00FFE800
KEYBDECHO 00 FFFFCA00 KEYBDEXTENDEDCODES 02 00FFE880 KEYBDGETID 02 00FFE99C KEYBDGETSCANCODE 02 00FFE97D
KEYBDGETSTATUS 02 00FFE961 KEYBDHEAD 00 FFFFC800 KEYBDID 00 00000124 KEYBDINIT 02 00FFE9C0
KEYBDIRQ 02 00FFEA4F KEYBDLOCKS 00 FFFFCD00 KEYBDOPEN 02 00FFEBEA KEYBDREAD 02 00FFEBEC
KEYBDRECVBYTE 02 00FFE900 KEYBDSEEK 02 00FFEBEE KEYBDSENDBYTE 02 00FFE919 KEYBDSETLED 02 00FFE989
KEYBDTAIL 00 FFFFC900 KEYBDWAITTX 02 00FFE91F KEYBDWRITE 02 00FFEBED KEYLED 00 00000122
KEYSTATE1 00 00000120 KEYSTATE2 00 00000121 KGID1 02 00FFE9B9 KGNOTKBD 02 00FFE9BC
KRB3 02 00FFE905 KRB4 02 00FFE915 KRCXIT 02 00FFEA4E KWT1 02 00FFE924
KWT2 02 00FFE935 LEDS 00 FFE60001 LEDXIT 02 00FFEA22 LETTER 02 00FFD2C1
LF 00 0000000A MAX_TASKNO 00 0000003F MF_CRLF 00 00000003 MF_DISPLAYBYTEASHEX 00 00000005
MF_DISPLAYSTRING 00 00000004 MF_DISPLAYWORDASHEX 00 00000006 MF_GETNUMBER 00 0000000C MF_GETRANGE 00 0000000B
MF_INCH 00 00000001 MF_MONITOR 00 00000000 MF_OSCALL 00 0000000A MF_OUTCH 00 00000002
MF_RANDOM 00 00000009 MF_SHOWSPRITES 00 00000007 MF_SRAND 00 00000008 MON1 02 00FFF08E
MONARMBREAKPOINT 02 00FFF13A MONDISARMBREAKPOINT 02 00FFF145 MONERRVEC 00 0000080C MONGETCH 02 00FFF12E
MONGETNONSPACE 02 00FFF133 MONITOR 02 00FFF039 MON_CCRSAVE 00 0000090F MON_DPRSAVE 00 0000090E
DBGKNOTRSHIFT 02 00FFEB34 DBGKNOTSCROLLLOCK 02 00FFEB79 DCCR 02 00FFE32C DCLF 02 00FFE3B6
DCX10 02 00FFE366 DCX11 02 00FFE376 DCX12 02 00FFE372 DCX13 02 00FFE382
DCX14 02 00FFE329 DCX3 02 00FFE3A4 DCX4 02 00FFE3B8 DCX5 02 00FFE393
DCX6 02 00FFE33D DCX7 02 00FFE339 DCX8 02 00FFE34A DCX9 02 00FFE357
DEL 00 0000007F DELAY3S 02 00FFE1B8 DFL1 02 00FFFA0B DFL2 02 00FFF9F8
DISARM1 02 00FFFB1F DISARM2 02 00FFFB0B DISARM3 02 00FFFBC8 DISARM4 02 00FFFBCD
DISARM6 02 00FFFB87 DISARM7 02 00FFFBA9 DISARM8 02 00FFFBBC DISARMALLBREAKPOINTS 02 00FFFB02
DISARMBREAKPOINT 02 00FFFB77 DISPBYTEASHEX 02 00FFE43A DISPDWORDASHEX 02 00FFE428 DISPLAYCHAR 02 00FFE31C
DISPLAYERR 02 00FFF5E5 DISPLAYSTRING 02 00FFE3DD DISPLAYSTRINGCRLF 02 00FFE3FD DISPLAYSTRINGDX 02 00FFF5EE
DISPNYB 02 00FFE452 DISPNYB1 02 00FFE461 DISPWORDASHEX 02 00FFE431 DLY3S1 02 00FFE1BB
DLY3S2 02 00FFE1BF DMPM1 02 00FFF7ED DMPM2 02 00FFF7D8 DMPM3 02 00FFF826
DMPM4 02 00FFF818 DMPM5 02 00FFF810 DRAM_BASE 00 10000000 DSPJ1B 02 00FFE3EF
DSPJ2 02 00FFE3EA DSRETB 02 00FFE3F8 DUMPIOFOCUSLIST 02 00FFF9F5 DUMPMEMORY 02 00FFF7D0
DUMPREGS 02 00FFF899 DUMRTS 02 00FFE022 EDITMEM1 02 00FFF84D EDITMEM2 02 00FFF838
EDITMEM3 02 00FFF86C EDITMEM4 02 00FFF857 EDITMEM6 02 00FFF863 EDITMEMORY 02 00FFF82C
ENDOFWORD 02 00FFF41C EOT 00 00000004 ETB 00 00000017 FARFLAG 00 0000015F
FILLM1 02 00FFF87F FILLM2 02 00FFF88F FILLM3 02 00FFF896 FILLMEMORY 02 00FFF86F
FIRQ_ROUT 02 00FFFC37 FIRST_CORE 00 00000001 FREEMBX 02 00000002 FREEMSG 02 00000006
FREETCB 00 0000078A GETBINNUMBER 02 00FFF52B GETDECNUMBER 02 00FFF552 GETHEXNUMBER 02 00FFF4FB
GETKEY 02 00FFEA92 GETNUMBER 02 00FFF591 GETRANGE 02 00FFF4D2 GETSCREENLOCATION 02 00FFE29D
GETTWOPARAMS 02 00FFF4B1 GRNG1 02 00FFF4ED GSL1 02 00FFE2AF GTBIN1 02 00FFF54E
GTBIN2 02 00FFF538 GTDC3 02 00FFF5D2 GTDEC1 02 00FFF58D GTDEC2 02 00FFF55F
GTHX3 02 00FFF5C4 GTHX5 02 00FFF5AA GTHX6 02 00FFF5B7 GTHXN1 02 00FFF527
GTHXN2 02 00FFF508 HC1 02 00FFE2CD HELPMSG 02 00FFF5FE HEX2 02 00FFD2CE
HEX4 02 00FFD2D2 HOMECURSOR 02 00FFE2B3 HOMECURSORJMP 02 00FFD308 I2CW1 02 00FFE4EF
I2CWR1 02 00FFE51C I2C_CMD 00 00000004 I2C_CTRL 00 00000002 I2C_INIT 02 00FFE4E3
I2C_PREH 00 00000001 I2C_PREL 00 00000000 I2C_RXR 00 00000003 I2C_STAT 00 00000004
I2C_TXR 00 00000003 I2C_WAIT_RX_NACK 02 00FFE51A I2C_WAIT_TIP 02 00FFE4ED I2C_WR_CMD 02 00FFE4F7
I2C_XMIT1 02 00FFE500 ICC1 02 00FFE3D9 ICC2 02 00FFE3DB ICR1 02 00FFE3CB
IGNBLANKS 02 00FFF47A IGNBLANKS1 02 00FFF47A INCCURSORPOS 02 00FFE3BA INCCURSORROW 02 00FFE3C9
INCH 02 00FFF191 INCH1 02 00FFF1A6 INCH2 02 00FFF193 INCHE 02 00FFF1AF
INCHEK 02 00FFF1B3 INCHEK1 02 00FFF1C8 INCHEK2 02 00FFF1C5 INCHEK3 02 00FFF1BC
INIT 02 00FFE0A8 INIT1 02 00FFE0B0 INIT2 02 00FFE0FB INITSERIAL 02 00FFEBEF
IOFOCUSID 00 00FFC010 IOFOCUSLIST 00 00FFC000 IOFOCUSNDX 00 00000100 IRQBASE 00 00FFC014
IRQFLAG 00 00FFC012 IRQSOURCE 00 00FFC011 IRQ_ROUT 02 00FFFC38 JMPVEC 00 00000928
JTC_EXIT 02 00FFF9BA JUMP_TO_CODE 02 00FFF980 KBDBUFFULL 02 00FFEA8D KBDFIFO 00 00000040
KBDFIFOALIAS 00 00C00040 KBDHEADRCV 00 00000127 KBDI0002 02 00FFE9C9 KBDI0004 02 00FFEA0E
KBDITRYAGAIN 02 00FFEA02 KBDRCVCOUNT 02 00FFEA3D KBDTAILRCV 00 00000128 KBGS1 02 00FFE978
KBGS2 02 00FFE970 KBGS3 02 00FFE961 KEYBD 00 FFE30400 KEYBDACK 00 FFFFCC00
KEYBDBAD 00 FFFFCB00 KEYBDBLOCK 00 00000126 KEYBDBUFFER 00 FFFFC000 KEYBDCHECKFORKEYDIRECT 02 00FFF18F
KEYBDCLOSE 02 00FFEBEB KEYBDCLR 00 FFE30402 KEYBDCONTROLCODES 02 00FFE800 KEYBDECHO 00 FFFFCA00
KEYBDEXTENDEDCODES 02 00FFE880 KEYBDGETID 02 00FFE99C KEYBDGETSCANCODE 02 00FFE97D KEYBDGETSTATUS 02 00FFE961
KEYBDHEAD 00 FFFFC800 KEYBDID 00 00000124 KEYBDINIT 02 00FFE9C0 KEYBDIRQ 02 00FFEA4F
KEYBDLOCKS 00 FFFFCD00 KEYBDOPEN 02 00FFEBEA KEYBDREAD 02 00FFEBEC KEYBDRECVBYTE 02 00FFE900
KEYBDSEEK 02 00FFEBEE KEYBDSENDBYTE 02 00FFE919 KEYBDSETLED 02 00FFE989 KEYBDTAIL 00 FFFFC900
KEYBDWAITTX 02 00FFE91F KEYBDWRITE 02 00FFEBED KEYLED 00 00000122 KEYSTATE1 00 00000120
KEYSTATE2 00 00000121 KGID1 02 00FFE9B9 KGNOTKBD 02 00FFE9BC KRB3 02 00FFE905
KRB4 02 00FFE915 KRCXIT 02 00FFEA4E KWT1 02 00FFE924 KWT2 02 00FFE935
LBRK1 02 00FFFBDB LBRK2 02 00FFFBF6 LEDS 00 FFE60001 LEDXIT 02 00FFEA22
LETTER 02 00FFD2C1 LF 00 0000000A LISTBREAKPOINTS 02 00FFFBD2 MAX_TASKNO 00 0000003F
MF_CRLF 00 00000003 MF_DISPLAYBYTEASHEX 00 00000005 MF_DISPLAYSTRING 00 00000004 MF_DISPLAYWORDASHEX 00 00000006
MF_GETNUMBER 00 0000000C MF_GETRANGE 00 0000000B MF_INCH 00 00000001 MF_MONITOR 00 00000000
MF_OSCALL 00 0000000A MF_OUTCH 00 00000002 MF_RANDOM 00 00000009 MF_SERIALPUTCHAR 00 0000000D
MF_SHOWSPRITES 00 00000007 MF_SRAND 00 00000008 MILLISECONDS 00 00FFC014 MON1 02 00FFF3BA
MONARMBREAKPOINT 02 00FFF469 MONDISARMBREAKPOINT 02 00FFF474 MONERRVEC 00 0000080C MONGETCH 02 00FFF45D
MONGETNONSPACE 02 00FFF462 MONITOR 02 00FFF35C MON_CCRSAVE 00 0000090F MON_DPRSAVE 00 0000090E
MON_DSAVE 00 00000900 MON_INIT 00 0000092C MON_NUMWKA 00 00000910 MON_PCSAVE 00 0000090A
MON_R1 00 00000920 MON_R2 00 00000924 MON_RAND 02 00FFEF9D MON_RETFLAG 00 00000930
MON_RETTAB 02 00FFF64E MON_ROM_VECS 02 00FFF634 MON_ROM_VECTAB 02 00FFF632 MON_SRAND 02 00FFEF6F
MON_SRAND1 02 00FFEF72 MON_SSAVE 00 00000908 MON_USAVE 00 00000906 MON_VECTB 00 00000880
MON_R1 00 00000920 MON_R2 00 00000924 MON_RAND 02 00FFF285 MON_RETFLAG 00 00000930
MON_RETTAB 02 00FFFA3B MON_ROM_VECS 02 00FFFA1F MON_ROM_VECTAB 02 00FFFA1D MON_SRAND 02 00FFF257
MON_SRAND1 02 00FFF25A MON_SSAVE 00 00000908 MON_USAVE 00 00000906 MON_VECTB 00 00000880
MON_XSAVE 00 00000902 MON_YSAVE 00 00000904 MSCOUNT 00 FFFFFFE4 MSGBADKEYBD 02 00FFEA2E
MSGERR 02 00FFF2C7 MSGF09STARTING 02 00FFF014 MSGREGHEADINGS 02 00FFF441 MSGS19LOADER 02 00FFEE93
MSGSERIALTEST 02 00FFED45 MSGSTARTUP 02 00FFE11C MULTI_SIEVE 02 00FFE153 MULTI_SIEVE1 02 00FFE176
MULTI_SIEVE2 02 00FFE172 MULTI_SIEVE3 02 00FFE160 MULTI_SIEVE4 02 00FFE189 NHEX4 02 00FFF47B
NMAILBOX 02 00000004 NMESERIAL 02 00FFED0E NMIBASE 00 00FFC013 NMI_ROUT 02 00FFF818
NMSGBLK 02 00000008 NOTKBDIRQ 02 00FFEA8C NOTRXINT 02 00FFED0D NOTTIMERIRQ 02 00FFE4B2
NUMBREAKPOINTS 02 00FFF631 NUMFUNCS 00 0000000E NUMOSFUNCS 00 00000019 NUMSETBREAKPOINTS 00 00000811
NXBLANK 02 00FFF47F ONEKEY 02 00FFD1DC OPC_SWI 00 0000003F OSC1 02 00FFF708
OSCALLTBL 02 00FFEEF6 OSCX 02 00FFF70A OSSEMA 00 00EF0010 OUTCH 02 00FFEEE1
OUTSEMA 00 00EF0000 PARSECMD1 02 00FFF0D8 PCRLF 02 00FFE40E PDATA 02 00FFE41B
PIC 00 FFE3F000 PICPTR 00 00000028 PRINT 02 00FFE418 PRNG 00 FFE30600
PROCESSBREAKPOINT 02 00FFF6C0 PROMPT1 02 00FFF0BB PROMPT2A 02 00FFF10C PROMPT3 02 00FFF0AC
PROMPTCLEARSCREEN 02 00FFF126 PROMPTHELP 02 00FFF11E PROMPTLN 02 00FFF0A8 PSTRNG 02 00FFE40A
QNDX0 00 00000780 QNDX1 00 00000782 QNDX2 00 00000784 QNDX3 00 00000786
QNDX4 00 00000788 RAMERR 02 00FFD42C RAMERR1 02 00FFD445 RAMTEST 02 00FFD400
RAMTEST1 02 00FFD40D RAMTEST3 02 00FFD417 REDIRECT 02 00FFF0F8 RELEASEIOFOCUS 02 00FFEF3F
REQUESTIOFOCUS 02 00FFEF28 RIOF1 02 00FFEF66 RIOF2 02 00FFEF55 ROMTORAM 02 00FFE143
ROMTORAM1 02 00FFE149 ROWS 00 00000020 RTC 00 FFE30500 RTCBUF 00 00007FC0
RTCR0001 02 00FFE51A RTCW0001 02 00FFE565 RTC_READ 02 00FFE4F4 RTC_RXERR 02 00FFE543
RTC_WRITE 02 00FFE547 RTI_INSN 02 00FFF824 RUNNINGID 00 00FFC013 RUNNINGTCB 06 00000000
S19ABORT 00 0000094A S19ADDRESS 00 00000940 S19CLEARADDRESS 02 00FFEDA6 S19GA1 02 00FFEDC4
S19GA2 02 00FFEDE0 S19GB1 02 00FFED81 S19GB2 02 00FFEDA2 S19GETADDRESS2 02 00FFEDB3
S19GETADDRESS3 02 00FFEDC5 S19GETBYTE 02 00FFED75 S19L2 02 00FFEE90 S19L3 02 00FFEE3F
S19LNR 02 00FFEE83 S19LOADER 02 00FFEE37 S19NEXTRECORD 02 00FFED58 S19NR1 02 00FFED74
S19NR2 02 00FFED68 S19NR3 02 00FFED6F S19PM1 02 00FFEE07 S19PM2 02 00FFEDFD
S19PM3 02 00FFEDE2 S19PROCESSS1 02 00FFEE0B S19PROCESSS2 02 00FFEE11 S19PROCESSS8 02 00FFEE27
S19PROCESSS9 02 00FFEE17 S19PUTMEM 02 00FFEDE1 S19RECLEN 00 00000949 S19RECTYPE 00 00000948
S19STARTADDRESS 00 00000944 SCANNEXTWORD 02 00FFF0E2 SCREENCOLOR 00 00000113 SCREENLOCATION 00 00000010
SCREENLOCATION2 00 00000018 SCROLLUP 02 00FFE265 SCRUP1 02 00FFE272 SC_ALT 00 00000011
SC_C 00 00000021 SC_CAPSLOCK 00 00000058 SC_CTRL 00 00000014 SC_DEL 00 00000071
SC_EXTEND 00 000000E0 SC_F12 00 00000007 SC_KEYUP 00 000000F0 SC_NUMLOCK 00 00000077
SC_RSHIFT 00 00000059 SC_SCROLLLOCK 00 0000007E SC_T 00 0000002C SC_TAB 00 0000000D
SC_Z 00 0000001A SEMAABS 00 00001000 SERHEADRCV 00 00000131 SERHEADXMIT 00 00000136
SERHZERO 00 00000130 SERIALGETCHAR 02 00FFEC1D SERIALINIT 02 00FFEBEF SERIALIRQ 02 00FFECBB
SERIALOUTPUTTEST 02 00FFED25 SERIALPEEKCHAR 02 00FFEC4D SERIALPEEKCHARDIRECT 02 00FFEC64 SERIALPUTCHAR 02 00FFEC88
SERIALPUTSTRING 02 00FFED15 SERIALRCVCOUNT 02 00FFECA8 SERRCVBUF 00 00BFF000 SERRCVXOFF 00 00000140
SERRCVXON 00 00000139 SERTAILRCV 00 00000133 SERTAILXMIT 00 00000138 SERTZERO 00 00000132
SETKEYBOARDECHO 02 00FFEEE5 SGC2 02 00FFEC36 SGCNOCHARS 02 00FFEC46 SGCXIT 02 00FFEC49
SHIFTEDSCANCODES 02 00FFE700 SHIFTLEFT5 02 00FFE1C7 SHL_NUMWKA 02 00FFF1BF SHOWSPRITES 02 00FFEEEB
SIEVE 02 00FFE18D SIEVE1 02 00FFE1A5 SIEVE2 02 00FFE1A1 SIEVE3 02 00FFE192
SIEVE4 02 00FFE1B4 SINI1 02 00FFEC02 SIRQ0001 02 00FFECCD SIRQNXTBYTE 02 00FFECBB
SIRQRXFULL 02 00FFED0D SKIPDOLLAR 02 00FFF0CA SKIP_INIT 02 00FFE10A SOTST1 02 00FFED2F
SPC0001 02 00FFEC8A SPCD0001 02 00FFEC82 SPCNOCHARS 02 00FFEC5F SPCXIT 02 00FFEC62
SPRITE_CTRL 00 FFE10000 SPRITE_EN 00 000003C0 SPS2 02 00FFED19 SPSXIT 02 00FFED23
SRCXIT 02 00FFECBA ST1 02 00FFE0B5 ST10 02 00FFE118 ST11 02 00FFE060
MSGCHECKSUMERR 02 00FFEF19 MSGERR 02 00FFF5F6 MSGF09STARTING 02 00FFF337 MSGREGHEADINGS 02 00FFF78D
MSGS19LOADER 02 00FFEF05 MSGSERIALTEST 02 00FFED54 MSGSTARTUP 02 00FFE11F MSGXMNOTRANSMITTER 02 00FFF0B2
MSGXMTIMEOUT 02 00FFF09E MULTI_SIEVE 02 00FFE156 MULTI_SIEVE1 02 00FFE179 MULTI_SIEVE2 02 00FFE175
MULTI_SIEVE3 02 00FFE163 MULTI_SIEVE4 02 00FFE18C NAK 00 00000015 NHEX4 02 00FFF7C7
NMAILBOX 02 00000004 NMESERIAL 02 00FFED1D NMIBASE 00 00FFC013 NMI_ROUT 02 00FFFC62
NMSGBLK 02 00000008 NOTKBDIRQ 02 00FFEA8C NOTRXINT 02 00FFED1B NOTRXINT1 02 00FFED19
NOTSERINT 02 00FFED1B NOTTIMERIRQ 02 00FFE4E2 NUMBREAKPOINTS 02 00FFFA1B NUMFUNCS 00 0000000F
NUMOSFUNCS 00 00000019 NUMSETBREAKPOINTS 00 00000811 NXBLANK 02 00FFF7CB ONEKEY 02 00FFD1DC
OPC_SWI 00 0000003F OSC1 02 00FFFAFB OSCALLTBL 02 00FFF1DE OSCX 02 00FFFAFD
OSSEMA 00 00EF0010 OUTCH 02 00FFF1C9 OUTSEMA 00 00EF0000 PARSECMD1 02 00FFF407
PCRLF 02 00FFE411 PDATA 02 00FFE41E PIC 00 FFE3F000 PICPTR 00 00000028
PRINT 02 00FFE41B PRNG 00 FFE30600 PROCESSBREAKPOINT 02 00FFFAAE PROMPT1 02 00FFF3EA
PROMPT2A 02 00FFF43B PROMPT3 02 00FFF3D8 PROMPTCLEARSCREEN 02 00FFF455 PROMPTHELP 02 00FFF44D
PROMPTLN 02 00FFF3D4 PSTRNG 02 00FFE40D QNDX0 00 00000780 QNDX1 00 00000782
QNDX2 00 00000784 QNDX3 00 00000786 QNDX4 00 00000788 RAMERR 02 00FFD42C
RAMERR1 02 00FFD445 RAMTEST 02 00FFD400 RAMTEST1 02 00FFD40D RAMTEST3 02 00FFD417
REDIRECT 02 00FFF427 RELEASEIOFOCUS 02 00FFF227 REQUESTIOFOCUS 02 00FFF210 RIOF1 02 00FFF24E
RIOF2 02 00FFF23D ROMTORAM 02 00FFE146 ROMTORAM1 02 00FFE14C ROWS 00 00000020
RTC 00 FFE30500 RTCBUF 00 00007FC0 RTCR0001 02 00FFE54A RTCW0001 02 00FFE595
RTC_READ 02 00FFE524 RTC_RXERR 02 00FFE573 RTC_WRITE 02 00FFE577 RTI_INSN 02 00FFFC6E
RUNNINGID 00 00FFC013 RUNNINGTCB 06 00000000 S19ABORT 00 0000094A S19ADDCHECK 02 00FFED99
S19ADDRESS 00 00000940 S19CHECKSUM 00 0000094B S19CLEARADDRESS 02 00FFEDD4 S19GA1 02 00FFEDF6
S19GA2 02 00FFEE18 S19GB1 02 00FFEDAF S19GB2 02 00FFEDD0 S19GETADDRESS2 02 00FFEDE1
S19GETADDRESS3 02 00FFEDF7 S19GETBYTE 02 00FFEDA3 S19IC1 02 00FFED79 S19IC2 02 00FFED78
S19INPUTCHAR 02 00FFED67 S19L2 02 00FFEF02 S19L3 02 00FFEEAC S19L4 02 00FFEEA1
S19LNR 02 00FFEEF5 S19LOADER 02 00FFEE8F S19NEXTRECORD 02 00FFED7F S19NR1 02 00FFED98
S19NR2 02 00FFED8C S19NR3 02 00FFED93 S19P11 02 00FFEE5A S19P21 02 00FFEE6D
S19PM1 02 00FFEE43 S19PM2 02 00FFEE37 S19PM3 02 00FFEE1A S19PROCESSS1 02 00FFEE49
S19PROCESSS2 02 00FFEE5C S19PROCESSS8 02 00FFEE7F S19PROCESSS9 02 00FFEE6F S19PUTMEM 02 00FFEE19
S19RECLEN 00 00000949 S19RECTYPE 00 00000948 S19SOURCE 00 0000094E S19STARTADDRESS 00 00000944
S19SUMMARYCHECKSUM 00 0000094C S19XFERADDRESS 00 00000950 SCANNEXTWORD 02 00FFF411 SCREENCOLOR 00 00000113
SCREENDISPLAYCHAR 02 00FFE31F SCREENLOCATION 00 00000010 SCREENLOCATION2 00 00000018 SCROLLUP 02 00FFE268
SCRUP1 02 00FFE275 SC_ALT 00 00000011 SC_C 00 00000021 SC_CAPSLOCK 00 00000058
SC_CTRL 00 00000014 SC_DEL 00 00000071 SC_EXTEND 00 000000E0 SC_F12 00 00000007
SC_KEYUP 00 000000F0 SC_NUMLOCK 00 00000077 SC_RSHIFT 00 00000059 SC_SCROLLLOCK 00 0000007E
SC_T 00 0000002C SC_TAB 00 0000000D SC_Z 00 0000001A SEMAABS 00 00001000
SERHEADRCV 00 00FFC015 SERHEADXMIT 00 00FFC017 SERHZERO 00 00000130 SERIALGETCHAR 02 00FFEC23
SERIALINIT 02 00FFEBEF SERIALIRQ 02 00FFECCC SERIALOUTPUTTEST 02 00FFED34 SERIALPEEKCHAR 02 00FFEC55
SERIALPEEKCHARDIRECT 02 00FFEC73 SERIALPUTCHAR 02 00FFEC9A SERIALPUTSTRING 02 00FFED24 SERIALRCVCOUNT 02 00FFECBD
SERRCVBUF 00 00FFB000 SERRCVXOFF 00 00FFC01A SERRCVXON 00 00FFC019 SERTAILRCV 00 00FFC016
SERTAILXMIT 00 00FFC018 SERTZERO 00 00000132 SETKEYBOARDECHO 02 00FFF1CD SETREGA 02 00FFF8E4
SETREGB 02 00FFF8F3 SETREGCCR 02 00FFF95C SETREGD 02 00FFF902 SETREGDPR 02 00FFF94D
SETREGPC 02 00FFF96B SETREGS 02 00FFF93E SETREGU 02 00FFF92F SETREGX 02 00FFF911
SETREGY 02 00FFF920 SGC2 02 00FFEC3D SGCNOCHARS 02 00FFEC50 SGCXIT 02 00FFEC53
SHIFTEDSCANCODES 02 00FFE700 SHIFTLEFT5 02 00FFE1CA SHL_NUMWKA 02 00FFF4EE SHOWSPRITES 02 00FFF1D3
SIEVE 02 00FFE190 SIEVE1 02 00FFE1A8 SIEVE2 02 00FFE1A4 SIEVE3 02 00FFE195
SIEVE4 02 00FFE1B7 SINI1 02 00FFEC08 SIRQNXTBYTE 02 00FFECD9 SIRQRXFULL 02 00FFED1B
SKIPDOLLAR 02 00FFF3F9 SKIP_INIT 02 00FFE10D SOH 00 00000001 SOTST1 02 00FFED3E
SPC0001 02 00FFECA0 SPCD0001 02 00FFEC95 SPCNOCHARS 02 00FFEC6E SPCXIT 02 00FFEC71
SPRITE_CTRL 00 FFE10000 SPRITE_EN 00 000003C0 SPS2 02 00FFED28 SPSXIT 02 00FFED32
SRCXIT 02 00FFECCB ST1 02 00FFE0B8 ST10 02 00FFE11B ST11 02 00FFE060
ST3 02 00FFE09F ST6 02 00FFE03C ST7 02 00FFE046 ST8 02 00FFE046
ST9 02 00FFE069 START 02 00FFE023 STRPTR 00 00000024 SWI3_EXIT 02 00FFF803
SWI3_ROUT 02 00FFF7CB SWICALLOS 02 00FFF6F5 SWINOTBKPT 02 00FFF678 SWI_ROUT 02 00FFF65B
SWI_ROUT1 02 00FFF660 SWI_ROUT2 02 00FFF671 SWI_ROUT3 02 00FFF6AE SWI_ROUT4 02 00FFF6BF
ST9 02 00FFE069 START 02 00FFE023 STRPTR 00 00000024 SWI3_EXIT 02 00FFFC33
SWI3_ROUT 02 00FFFBFB SWICALLOS 02 00FFFAE8 SWINOTBKPT 02 00FFFA66 SWI_ROUT 02 00FFFA49
SWI_ROUT1 02 00FFFA4E SWI_ROUT2 02 00FFFA5F SWI_ROUT3 02 00FFFA9C SWI_ROUT4 02 00FFFAAD
TAB 00 00000009 TCB_CURSORCOL 00 00000021 TCB_CURSORROW 00 00000020 TCB_HJCB 00 0000001C
TCB_HWAITMBX 00 00000022 TCB_IOF_NEXT 00 0000002C TCB_IOF_PREV 00 00000030 TCB_MBQ_NEXT 00 00000024
TCB_MBQ_PREV 00 00000028 TCB_MMU_MAP 00 00000038 TCB_MSGPTR_D1 00 00000014 TCB_MSGPTR_D2 00 00000018
TCB_NXTRDY 00 00000000 TCB_NXTTCB 00 00000008 TCB_PRIORITY 00 00000010 TCB_PRVRDY 00 00000004
TCB_SPSAVE 00 00000034 TCB_STATUS 00 0000001E TCB_TIMEOUT 00 0000000C TEXTCLOSE 02 00FFE235
TEXTOPEN 02 00FFE234 TEXTREAD 02 00FFE236 TEXTREG 00 FFE07F00 TEXTSCR 00 FFE00000
TEXTSEEK 02 00FFE238 TEXTWRITE 02 00FFE237 TEXT_COLS 00 00000000 TEXT_CURPOS 00 00000022
TEXT_ROWS 00 00000001 TIMEOUTLIST 00 0000078C TIMERINIT 02 00FFE465 TIMERIRQ 02 00FFE490
TIMES10 02 00FFF154 TR1A 02 00FFF817 UCP1 02 00FFE2F0 UNSHIFTEDSCANCODES 02 00FFE600
UPDATECURSORPOS 02 00FFE2CC VIA 00 FFE60000 VIA_ACR 00 0000000B VIA_DDRA 00 00000003
TCB_SPSAVE 00 00000034 TCB_STATUS 00 0000001E TCB_TIMEOUT 00 0000000C TEXTCLOSE 02 00FFE238
TEXTOPEN 02 00FFE237 TEXTREAD 02 00FFE239 TEXTREG 00 FFE07F00 TEXTSCR 00 FFE00000
TEXTSEEK 02 00FFE23B TEXTWRITE 02 00FFE23A TEXT_COLS 00 00000000 TEXT_CURPOS 00 00000022
TEXT_ROWS 00 00000001 TIMEOUTLIST 00 0000078C TIMERINIT 02 00FFE468 TIMERIRQ 02 00FFE493
TIMES10 02 00FFF483 TR1A 02 00FFFC61 UCP1 02 00FFE2F3 UNSHIFTEDSCANCODES 02 00FFE600
UPDATECURSORPOS 02 00FFE2CF VIA 00 FFE60000 VIA_ACR 00 0000000B VIA_DDRA 00 00000003
VIA_IER 00 0000000E VIA_IFR 00 0000000D VIA_PA 00 00000001 VIA_T3CMPH 00 00000015
VIA_T3CMPL 00 00000014 VIA_T3LH 00 00000013 VIA_T3LL 00 00000012 W10_0001 02 00FFE940
W300_0001 02 00FFE954 WAIT10MS 02 00FFE939 WAIT300MS 02 00FFE94D XBLANK 02 00FFD0AF
XITMONITOR 02 00FFF6F3 XOFF 00 00000013 XON 00 00000011
575 SYMBOLS
XITMONITOR 02 00FFFAE6 XM_CALC_CHECKSUM 02 00FFF0D7 XM_CALC_CRC 02 00FFF0E9 XM_CHECKSUM 00 000009F7
XM_CRC 00 000009FE XM_CRC1 02 00FFF0F4 XM_CRC2 02 00FFF150 XM_CRC3 02 00FFF158
XM_CRC4 02 00FFF13B XM_CS1 02 00FFF0DB XM_EOT 02 00FFF07E XM_FLAG 00 000009F6
XM_GB1 02 00FFEFA9 XM_GB2 02 00FFEFB7 XM_GETBYTE 02 00FFEFA9 XM_IBUF 00 00000A00
XM_NOTRANSMITTER 02 00FFF096 XM_OBUF 00 00000A80 XM_OUTBYTEASHEX 02 00FFF170 XM_PACKETNUM 00 000009FA
XM_PROTOCOL 00 000009F5 XM_RCV1 02 00FFEFDF XM_RCV2 02 00FFF015 XM_RCV3 02 00FFF05A
XM_RCV4 02 00FFEFDC XM_RCV5 02 00FFEFD7 XM_RCV_CHKSUM 02 00FFF052 XM_RCV_NAK 02 00FFEFF4
XM_RCV_TO1 02 00FFF076 XM_RCV_TO2 02 00FFF074 XM_RECEIVE 02 00FFEFD5 XM_RECEIVESTART 02 00FFEFBA
XM_RETRY1 02 00FFF085 XM_SEND 02 00FFEF39 XM_SEND1 02 00FFEF58 XM_SEND2 02 00FFEF86
XM_SEND3 02 00FFEF8D XM_SEND4 02 00FFEF49 XM_SEND5 02 00FFEF46 XM_SENDSTART 02 00FFEF2C
XM_SOH 02 00FFEFFA XM_TIMER 00 00FFC020 XM_TMP 00 000009FC XM_TMP2 00 000009F8
XOFF 00 00000013 XON 00 00000011
658 SYMBOLS
 
3 error(s), 592 warning(s)
3 error(s), 1006 warning(s)
/rf6809/trunk/software/boot/boot_rom.ver
4,8 → 4,8
rommem[ 4271] <= 12'h0C6;
rommem[ 4272] <= 12'h020;
rommem[ 4273] <= 12'h017;
rommem[ 4274] <= 12'h001;
rommem[ 4275] <= 12'hE2D;
rommem[ 4274] <= 12'h002;
rommem[ 4275] <= 12'h115;
rommem[ 4276] <= 12'h039;
rommem[ 4304] <= 12'h012;
rommem[ 4305] <= 12'h012;
12,13 → 12,13
rommem[ 4306] <= 12'h0C6;
rommem[ 4307] <= 12'h00D;
rommem[ 4308] <= 12'h017;
rommem[ 4309] <= 12'h001;
rommem[ 4310] <= 12'hE0A;
rommem[ 4309] <= 12'h002;
rommem[ 4310] <= 12'h0F2;
rommem[ 4311] <= 12'h0C6;
rommem[ 4312] <= 12'h00A;
rommem[ 4313] <= 12'h017;
rommem[ 4314] <= 12'h001;
rommem[ 4315] <= 12'hE05;
rommem[ 4314] <= 12'h002;
rommem[ 4315] <= 12'h0ED;
rommem[ 4316] <= 12'h039;
rommem[ 4336] <= 12'h012;
rommem[ 4337] <= 12'h020;
30,24 → 30,24
rommem[ 4800] <= 12'h012;
rommem[ 4801] <= 12'h017;
rommem[ 4802] <= 12'h001;
rommem[ 4803] <= 12'hC1D;
rommem[ 4803] <= 12'hF05;
rommem[ 4804] <= 12'h039;
rommem[ 4812] <= 12'h012;
rommem[ 4813] <= 12'h012;
rommem[ 4814] <= 12'h017;
rommem[ 4815] <= 12'h001;
rommem[ 4816] <= 12'h166;
rommem[ 4816] <= 12'h169;
rommem[ 4817] <= 12'h039;
rommem[ 4818] <= 12'h017;
rommem[ 4819] <= 12'h001;
rommem[ 4820] <= 12'h159;
rommem[ 4820] <= 12'h15C;
rommem[ 4821] <= 12'h039;
rommem[ 4864] <= 12'h016;
rommem[ 4865] <= 12'h000;
rommem[ 4866] <= 12'hF36;
rommem[ 4866] <= 12'hF39;
rommem[ 4872] <= 12'h016;
rommem[ 4873] <= 12'h000;
rommem[ 4874] <= 12'hFA5;
rommem[ 4874] <= 12'hFA8;
rommem[ 5120] <= 12'h18E;
rommem[ 5121] <= 12'h000;
rommem[ 5122] <= 12'h000;
120,23 → 120,23
rommem[ 5189] <= 12'h06E;
rommem[ 5190] <= 12'hC04;
rommem[ 8192] <= 12'hFFF;
rommem[ 8193] <= 12'h039;
rommem[ 8193] <= 12'h35C;
rommem[ 8194] <= 12'hFFE;
rommem[ 8195] <= 12'h022;
rommem[ 8196] <= 12'hFFE;
rommem[ 8197] <= 12'hEA9;
rommem[ 8198] <= 12'hFFE;
rommem[ 8199] <= 12'hEC7;
rommem[ 8200] <= 12'hFFE;
rommem[ 8201] <= 12'hECB;
rommem[ 8202] <= 12'hFFE;
rommem[ 8203] <= 12'hEE1;
rommem[ 8196] <= 12'hFFF;
rommem[ 8197] <= 12'h191;
rommem[ 8198] <= 12'hFFF;
rommem[ 8199] <= 12'h1AF;
rommem[ 8200] <= 12'hFFF;
rommem[ 8201] <= 12'h1B3;
rommem[ 8202] <= 12'hFFF;
rommem[ 8203] <= 12'h1C9;
rommem[ 8204] <= 12'hFFE;
rommem[ 8205] <= 12'h41B;
rommem[ 8205] <= 12'h41E;
rommem[ 8206] <= 12'hFFE;
rommem[ 8207] <= 12'h40E;
rommem[ 8207] <= 12'h411;
rommem[ 8208] <= 12'hFFE;
rommem[ 8209] <= 12'h40A;
rommem[ 8209] <= 12'h40D;
rommem[ 8210] <= 12'hFFE;
rommem[ 8211] <= 12'h022;
rommem[ 8212] <= 12'hFFE;
148,7 → 148,7
rommem[ 8218] <= 12'hFFE;
rommem[ 8219] <= 12'h022;
rommem[ 8220] <= 12'hFFE;
rommem[ 8221] <= 12'h319;
rommem[ 8221] <= 12'h31C;
rommem[ 8222] <= 12'hFFE;
rommem[ 8223] <= 12'h022;
rommem[ 8224] <= 12'hFFE;
190,7 → 190,7
rommem[ 8260] <= 12'h081;
rommem[ 8261] <= 12'h001;
rommem[ 8262] <= 12'h08D;
rommem[ 8263] <= 12'h16D;
rommem[ 8263] <= 12'h170;
rommem[ 8264] <= 12'h07F;
rommem[ 8265] <= 12'h000;
rommem[ 8266] <= 12'h810;
248,16 → 248,16
rommem[ 8318] <= 12'h097;
rommem[ 8319] <= 12'h112;
rommem[ 8320] <= 12'h08D;
rommem[ 8321] <= 12'h1B7;
rommem[ 8321] <= 12'h1BA;
rommem[ 8322] <= 12'h0CC;
rommem[ 8323] <= 12'hFFE;
rommem[ 8324] <= 12'h319;
rommem[ 8324] <= 12'h31C;
rommem[ 8325] <= 12'h0FD;
rommem[ 8326] <= 12'h000;
rommem[ 8327] <= 12'h800;
rommem[ 8328] <= 12'h0CC;
rommem[ 8329] <= 12'hFFE;
rommem[ 8330] <= 12'hC64;
rommem[ 8330] <= 12'hC73;
rommem[ 8331] <= 12'h0FD;
rommem[ 8332] <= 12'h000;
rommem[ 8333] <= 12'h804;
273,11 → 273,11
rommem[ 8343] <= 12'h0C1;
rommem[ 8344] <= 12'h020;
rommem[ 8345] <= 12'h027;
rommem[ 8346] <= 12'h05D;
rommem[ 8346] <= 12'h060;
rommem[ 8347] <= 12'h020;
rommem[ 8348] <= 12'h06D;
rommem[ 8348] <= 12'h070;
rommem[ 8349] <= 12'h020;
rommem[ 8350] <= 12'h0B4;
rommem[ 8350] <= 12'h0B7;
rommem[ 8351] <= 12'h086;
rommem[ 8352] <= 12'h0FF;
rommem[ 8353] <= 12'h015;
289,7 → 289,7
rommem[ 8359] <= 12'hFF7;
rommem[ 8360] <= 12'h017;
rommem[ 8361] <= 12'h000;
rommem[ 8362] <= 12'h449;
rommem[ 8362] <= 12'h479;
rommem[ 8363] <= 12'h08E;
rommem[ 8364] <= 12'h000;
rommem[ 8365] <= 12'h127;
300,998 → 300,998
rommem[ 8370] <= 12'h05A;
rommem[ 8371] <= 12'h026;
rommem[ 8372] <= 12'hFFB;
rommem[ 8373] <= 12'h06F;
rommem[ 8374] <= 12'h809;
rommem[ 8375] <= 12'hE3F;
rommem[ 8376] <= 12'h000;
rommem[ 8377] <= 12'h0A7;
rommem[ 8378] <= 12'h809;
rommem[ 8379] <= 12'hE3F;
rommem[ 8380] <= 12'h001;
rommem[ 8381] <= 12'h0E7;
rommem[ 8382] <= 12'h809;
rommem[ 8383] <= 12'hE3F;
rommem[ 8384] <= 12'h002;
rommem[ 8385] <= 12'h030;
rommem[ 8386] <= 12'h004;
rommem[ 8387] <= 12'h08C;
rommem[ 8388] <= 12'h000;
rommem[ 8389] <= 12'h100;
rommem[ 8390] <= 12'h025;
rommem[ 8391] <= 12'hFED;
rommem[ 8392] <= 12'h086;
rommem[ 8393] <= 12'h081;
rommem[ 8394] <= 12'h015;
rommem[ 8395] <= 12'h0B7;
rommem[ 8396] <= 12'hFFF;
rommem[ 8397] <= 12'hE3F;
rommem[ 8398] <= 12'h0FD;
rommem[ 8399] <= 12'h086;
rommem[ 8400] <= 12'h01F;
rommem[ 8401] <= 12'h015;
rommem[ 8402] <= 12'h0B7;
rommem[ 8403] <= 12'hFFF;
rommem[ 8404] <= 12'hE3F;
rommem[ 8405] <= 12'h009;
rommem[ 8406] <= 12'h086;
rommem[ 8407] <= 12'h040;
rommem[ 8408] <= 12'h015;
rommem[ 8409] <= 12'h0B7;
rommem[ 8410] <= 12'hFFF;
rommem[ 8411] <= 12'hE07;
rommem[ 8412] <= 12'hF00;
rommem[ 8413] <= 12'h086;
rommem[ 8414] <= 12'h020;
rommem[ 8415] <= 12'h015;
rommem[ 8416] <= 12'h0B7;
rommem[ 8417] <= 12'hFFF;
rommem[ 8418] <= 12'hE07;
rommem[ 8419] <= 12'hF01;
rommem[ 8420] <= 12'h08D;
rommem[ 8421] <= 12'h153;
rommem[ 8422] <= 12'h08D;
rommem[ 8423] <= 12'h1C8;
rommem[ 8424] <= 12'h08E;
rommem[ 8425] <= 12'h000;
rommem[ 8426] <= 12'h000;
rommem[ 8427] <= 12'h0CC;
rommem[ 8373] <= 12'h08E;
rommem[ 8374] <= 12'h000;
rommem[ 8375] <= 12'h080;
rommem[ 8376] <= 12'h06F;
rommem[ 8377] <= 12'h809;
rommem[ 8378] <= 12'hE3F;
rommem[ 8379] <= 12'h000;
rommem[ 8380] <= 12'h0A7;
rommem[ 8381] <= 12'h809;
rommem[ 8382] <= 12'hE3F;
rommem[ 8383] <= 12'h001;
rommem[ 8384] <= 12'h0E7;
rommem[ 8385] <= 12'h809;
rommem[ 8386] <= 12'hE3F;
rommem[ 8387] <= 12'h002;
rommem[ 8388] <= 12'h030;
rommem[ 8389] <= 12'h004;
rommem[ 8390] <= 12'h08C;
rommem[ 8391] <= 12'h000;
rommem[ 8392] <= 12'h100;
rommem[ 8393] <= 12'h025;
rommem[ 8394] <= 12'hFED;
rommem[ 8395] <= 12'h086;
rommem[ 8396] <= 12'h0C1;
rommem[ 8397] <= 12'h015;
rommem[ 8398] <= 12'h0B7;
rommem[ 8399] <= 12'hFFF;
rommem[ 8400] <= 12'hE3F;
rommem[ 8401] <= 12'h0FD;
rommem[ 8402] <= 12'h086;
rommem[ 8403] <= 12'h041;
rommem[ 8404] <= 12'h015;
rommem[ 8405] <= 12'h0B7;
rommem[ 8406] <= 12'hFFF;
rommem[ 8407] <= 12'hE3F;
rommem[ 8408] <= 12'h0D1;
rommem[ 8409] <= 12'h086;
rommem[ 8410] <= 12'h040;
rommem[ 8411] <= 12'h015;
rommem[ 8412] <= 12'h0B7;
rommem[ 8413] <= 12'hFFF;
rommem[ 8414] <= 12'hE07;
rommem[ 8415] <= 12'hF00;
rommem[ 8416] <= 12'h086;
rommem[ 8417] <= 12'h020;
rommem[ 8418] <= 12'h015;
rommem[ 8419] <= 12'h0B7;
rommem[ 8420] <= 12'hFFF;
rommem[ 8421] <= 12'hE07;
rommem[ 8422] <= 12'hF01;
rommem[ 8423] <= 12'h08D;
rommem[ 8424] <= 12'h153;
rommem[ 8425] <= 12'h08D;
rommem[ 8426] <= 12'h1C8;
rommem[ 8427] <= 12'h08E;
rommem[ 8428] <= 12'h000;
rommem[ 8429] <= 12'h000;
rommem[ 8430] <= 12'h017;
rommem[ 8430] <= 12'h0CC;
rommem[ 8431] <= 12'h000;
rommem[ 8432] <= 12'hDFA;
rommem[ 8432] <= 12'h000;
rommem[ 8433] <= 12'h017;
rommem[ 8434] <= 12'h000;
rommem[ 8435] <= 12'h8CC;
rommem[ 8436] <= 12'h0DC;
rommem[ 8437] <= 12'h124;
rommem[ 8438] <= 12'h08D;
rommem[ 8439] <= 12'h336;
rommem[ 8440] <= 12'h017;
rommem[ 8441] <= 12'h000;
rommem[ 8442] <= 12'h36A;
rommem[ 8434] <= 12'h001;
rommem[ 8435] <= 12'h0DF;
rommem[ 8436] <= 12'h017;
rommem[ 8437] <= 12'h000;
rommem[ 8438] <= 12'h8C9;
rommem[ 8439] <= 12'h0DC;
rommem[ 8440] <= 12'h124;
rommem[ 8441] <= 12'h08D;
rommem[ 8442] <= 12'h336;
rommem[ 8443] <= 12'h017;
rommem[ 8444] <= 12'h000;
rommem[ 8445] <= 12'hAF1;
rommem[ 8446] <= 12'h08E;
rommem[ 8445] <= 12'h36A;
rommem[ 8446] <= 12'h017;
rommem[ 8447] <= 12'h000;
rommem[ 8448] <= 12'h080;
rommem[ 8449] <= 12'h086;
rommem[ 8450] <= 12'h001;
rommem[ 8451] <= 12'h0C6;
rommem[ 8452] <= 12'h001;
rommem[ 8453] <= 12'h0C6;
rommem[ 8454] <= 12'h001;
rommem[ 8455] <= 12'h0F7;
rommem[ 8456] <= 12'hEF1;
rommem[ 8457] <= 12'h000;
rommem[ 8458] <= 12'h01C;
rommem[ 8459] <= 12'h0EF;
rommem[ 8460] <= 12'h086;
rommem[ 8461] <= 12'h005;
rommem[ 8462] <= 12'h015;
rommem[ 8463] <= 12'h0B7;
rommem[ 8464] <= 12'hFFF;
rommem[ 8465] <= 12'hE60;
rommem[ 8466] <= 12'h001;
rommem[ 8467] <= 12'h0CC;
rommem[ 8468] <= 12'hFFE;
rommem[ 8469] <= 12'h11C;
rommem[ 8470] <= 12'h08D;
rommem[ 8471] <= 12'h2C2;
rommem[ 8472] <= 12'h03F;
rommem[ 8473] <= 12'h000;
rommem[ 8474] <= 12'h020;
rommem[ 8475] <= 12'hFFC;
rommem[ 8476] <= 12'h072;
rommem[ 8477] <= 12'h066;
rommem[ 8478] <= 12'h036;
rommem[ 8479] <= 12'h038;
rommem[ 8480] <= 12'h030;
rommem[ 8481] <= 12'h039;
rommem[ 8482] <= 12'h020;
rommem[ 8483] <= 12'h031;
rommem[ 8484] <= 12'h032;
rommem[ 8485] <= 12'h02D;
rommem[ 8486] <= 12'h062;
rommem[ 8487] <= 12'h069;
rommem[ 8488] <= 12'h074;
rommem[ 8489] <= 12'h020;
rommem[ 8490] <= 12'h053;
rommem[ 8491] <= 12'h079;
rommem[ 8492] <= 12'h073;
rommem[ 8493] <= 12'h074;
rommem[ 8494] <= 12'h065;
rommem[ 8495] <= 12'h06D;
rommem[ 8496] <= 12'h020;
rommem[ 8497] <= 12'h053;
rommem[ 8498] <= 12'h074;
rommem[ 8499] <= 12'h061;
rommem[ 8500] <= 12'h072;
rommem[ 8448] <= 12'hAEE;
rommem[ 8449] <= 12'h08E;
rommem[ 8450] <= 12'h000;
rommem[ 8451] <= 12'h080;
rommem[ 8452] <= 12'h086;
rommem[ 8453] <= 12'h001;
rommem[ 8454] <= 12'h0C6;
rommem[ 8455] <= 12'h001;
rommem[ 8456] <= 12'h0C6;
rommem[ 8457] <= 12'h001;
rommem[ 8458] <= 12'h0F7;
rommem[ 8459] <= 12'hEF1;
rommem[ 8460] <= 12'h000;
rommem[ 8461] <= 12'h01C;
rommem[ 8462] <= 12'h0EF;
rommem[ 8463] <= 12'h086;
rommem[ 8464] <= 12'h005;
rommem[ 8465] <= 12'h015;
rommem[ 8466] <= 12'h0B7;
rommem[ 8467] <= 12'hFFF;
rommem[ 8468] <= 12'hE60;
rommem[ 8469] <= 12'h001;
rommem[ 8470] <= 12'h0CC;
rommem[ 8471] <= 12'hFFE;
rommem[ 8472] <= 12'h11F;
rommem[ 8473] <= 12'h08D;
rommem[ 8474] <= 12'h2C2;
rommem[ 8475] <= 12'h03F;
rommem[ 8476] <= 12'h000;
rommem[ 8477] <= 12'h020;
rommem[ 8478] <= 12'hFFC;
rommem[ 8479] <= 12'h072;
rommem[ 8480] <= 12'h066;
rommem[ 8481] <= 12'h036;
rommem[ 8482] <= 12'h038;
rommem[ 8483] <= 12'h030;
rommem[ 8484] <= 12'h039;
rommem[ 8485] <= 12'h020;
rommem[ 8486] <= 12'h031;
rommem[ 8487] <= 12'h032;
rommem[ 8488] <= 12'h02D;
rommem[ 8489] <= 12'h062;
rommem[ 8490] <= 12'h069;
rommem[ 8491] <= 12'h074;
rommem[ 8492] <= 12'h020;
rommem[ 8493] <= 12'h053;
rommem[ 8494] <= 12'h079;
rommem[ 8495] <= 12'h073;
rommem[ 8496] <= 12'h074;
rommem[ 8497] <= 12'h065;
rommem[ 8498] <= 12'h06D;
rommem[ 8499] <= 12'h020;
rommem[ 8500] <= 12'h053;
rommem[ 8501] <= 12'h074;
rommem[ 8502] <= 12'h069;
rommem[ 8503] <= 12'h06E;
rommem[ 8504] <= 12'h067;
rommem[ 8505] <= 12'h02E;
rommem[ 8506] <= 12'h00D;
rommem[ 8507] <= 12'h00A;
rommem[ 8508] <= 12'h000;
rommem[ 8509] <= 12'h015;
rommem[ 8510] <= 12'h07F;
rommem[ 8511] <= 12'hFFF;
rommem[ 8512] <= 12'hFFF;
rommem[ 8513] <= 12'hFE1;
rommem[ 8514] <= 12'h039;
rommem[ 8515] <= 12'h08E;
rommem[ 8516] <= 12'hFFC;
rommem[ 8517] <= 12'h000;
rommem[ 8518] <= 12'h18E;
rommem[ 8519] <= 12'h00C;
rommem[ 8502] <= 12'h061;
rommem[ 8503] <= 12'h072;
rommem[ 8504] <= 12'h074;
rommem[ 8505] <= 12'h069;
rommem[ 8506] <= 12'h06E;
rommem[ 8507] <= 12'h067;
rommem[ 8508] <= 12'h02E;
rommem[ 8509] <= 12'h00D;
rommem[ 8510] <= 12'h00A;
rommem[ 8511] <= 12'h000;
rommem[ 8512] <= 12'h015;
rommem[ 8513] <= 12'h07F;
rommem[ 8514] <= 12'hFFF;
rommem[ 8515] <= 12'hFFF;
rommem[ 8516] <= 12'hFE1;
rommem[ 8517] <= 12'h039;
rommem[ 8518] <= 12'h08E;
rommem[ 8519] <= 12'hFFC;
rommem[ 8520] <= 12'h000;
rommem[ 8521] <= 12'h0EC;
rommem[ 8522] <= 12'h801;
rommem[ 8523] <= 12'h0ED;
rommem[ 8524] <= 12'hA01;
rommem[ 8525] <= 12'h08C;
rommem[ 8526] <= 12'h000;
rommem[ 8527] <= 12'h000;
rommem[ 8528] <= 12'h026;
rommem[ 8529] <= 12'hFF7;
rommem[ 8530] <= 12'h039;
rommem[ 8531] <= 12'h086;
rommem[ 8532] <= 12'h050;
rommem[ 8533] <= 12'h015;
rommem[ 8534] <= 12'h0F6;
rommem[ 8535] <= 12'hFFF;
rommem[ 8536] <= 12'hFFF;
rommem[ 8537] <= 12'hFE0;
rommem[ 8538] <= 12'h0C0;
rommem[ 8539] <= 12'h001;
rommem[ 8540] <= 12'h08E;
rommem[ 8541] <= 12'h000;
rommem[ 8542] <= 12'h000;
rommem[ 8543] <= 12'h03A;
rommem[ 8544] <= 12'h0A7;
rommem[ 8545] <= 12'h809;
rommem[ 8546] <= 12'hE00;
rommem[ 8547] <= 12'h000;
rommem[ 8548] <= 12'h030;
rommem[ 8549] <= 12'h008;
rommem[ 8550] <= 12'h08C;
rommem[ 8551] <= 12'h000;
rommem[ 8552] <= 12'hFFF;
rommem[ 8553] <= 12'h025;
rommem[ 8554] <= 12'hFF5;
rommem[ 8555] <= 12'h0BD;
rommem[ 8556] <= 12'hFFE;
rommem[ 8557] <= 12'h13D;
rommem[ 8558] <= 12'h0CB;
rommem[ 8559] <= 12'h002;
rommem[ 8560] <= 12'h086;
rommem[ 8561] <= 12'h04E;
rommem[ 8562] <= 12'h08E;
rommem[ 8563] <= 12'h000;
rommem[ 8564] <= 12'h000;
rommem[ 8565] <= 12'h03A;
rommem[ 8566] <= 12'h03A;
rommem[ 8567] <= 12'h0A7;
rommem[ 8568] <= 12'h809;
rommem[ 8569] <= 12'hE00;
rommem[ 8570] <= 12'h000;
rommem[ 8571] <= 12'h08C;
rommem[ 8572] <= 12'h000;
rommem[ 8573] <= 12'hFFF;
rommem[ 8574] <= 12'h025;
rommem[ 8575] <= 12'hFF6;
rommem[ 8576] <= 12'h0BD;
rommem[ 8577] <= 12'hFFE;
rommem[ 8578] <= 12'h13D;
rommem[ 8579] <= 12'h0CB;
rommem[ 8580] <= 12'h008;
rommem[ 8581] <= 12'h0C1;
rommem[ 8582] <= 12'hFF0;
rommem[ 8583] <= 12'h025;
rommem[ 8584] <= 12'hFE9;
rommem[ 8585] <= 12'h013;
rommem[ 8586] <= 12'h016;
rommem[ 8587] <= 12'h000;
rommem[ 8588] <= 12'hEAC;
rommem[ 8589] <= 12'h086;
rommem[ 8590] <= 12'h050;
rommem[ 8591] <= 12'h08E;
rommem[ 8592] <= 12'h000;
rommem[ 8593] <= 12'h000;
rommem[ 8594] <= 12'h0A7;
rommem[ 8595] <= 12'h809;
rommem[ 8596] <= 12'hE00;
rommem[ 8597] <= 12'h000;
rommem[ 8598] <= 12'h030;
rommem[ 8599] <= 12'h001;
rommem[ 8600] <= 12'h08C;
rommem[ 8601] <= 12'h000;
rommem[ 8602] <= 12'hFFF;
rommem[ 8603] <= 12'h025;
rommem[ 8604] <= 12'hFF5;
rommem[ 8605] <= 12'h0C6;
rommem[ 8606] <= 12'h002;
rommem[ 8607] <= 12'h086;
rommem[ 8608] <= 12'h04E;
rommem[ 8609] <= 12'h08E;
rommem[ 8610] <= 12'h000;
rommem[ 8611] <= 12'h000;
rommem[ 8612] <= 12'h03A;
rommem[ 8613] <= 12'h03A;
rommem[ 8614] <= 12'h0A7;
rommem[ 8615] <= 12'h809;
rommem[ 8616] <= 12'hE00;
rommem[ 8617] <= 12'h000;
rommem[ 8618] <= 12'h08C;
rommem[ 8619] <= 12'h000;
rommem[ 8620] <= 12'hFFF;
rommem[ 8621] <= 12'h025;
rommem[ 8622] <= 12'hFC7;
rommem[ 8623] <= 12'h05C;
rommem[ 8624] <= 12'h0C1;
rommem[ 8625] <= 12'hFF0;
rommem[ 8626] <= 12'h025;
rommem[ 8627] <= 12'hFED;
rommem[ 8628] <= 12'h039;
rommem[ 8629] <= 12'h0CC;
rommem[ 8630] <= 12'h895;
rommem[ 8631] <= 12'h440;
rommem[ 8632] <= 12'h0C1;
rommem[ 8633] <= 12'h0FF;
rommem[ 8634] <= 12'h026;
rommem[ 8635] <= 12'h000;
rommem[ 8636] <= 12'h015;
rommem[ 8637] <= 12'h0B7;
rommem[ 8638] <= 12'hFFF;
rommem[ 8639] <= 12'hE60;
rommem[ 8640] <= 12'h001;
rommem[ 8641] <= 12'h083;
rommem[ 8642] <= 12'h000;
rommem[ 8521] <= 12'h18E;
rommem[ 8522] <= 12'h00C;
rommem[ 8523] <= 12'h000;
rommem[ 8524] <= 12'h0EC;
rommem[ 8525] <= 12'h801;
rommem[ 8526] <= 12'h0ED;
rommem[ 8527] <= 12'hA01;
rommem[ 8528] <= 12'h08C;
rommem[ 8529] <= 12'h000;
rommem[ 8530] <= 12'h000;
rommem[ 8531] <= 12'h026;
rommem[ 8532] <= 12'hFF7;
rommem[ 8533] <= 12'h039;
rommem[ 8534] <= 12'h086;
rommem[ 8535] <= 12'h050;
rommem[ 8536] <= 12'h015;
rommem[ 8537] <= 12'h0F6;
rommem[ 8538] <= 12'hFFF;
rommem[ 8539] <= 12'hFFF;
rommem[ 8540] <= 12'hFE0;
rommem[ 8541] <= 12'h0C0;
rommem[ 8542] <= 12'h001;
rommem[ 8543] <= 12'h08E;
rommem[ 8544] <= 12'h000;
rommem[ 8545] <= 12'h000;
rommem[ 8546] <= 12'h03A;
rommem[ 8547] <= 12'h0A7;
rommem[ 8548] <= 12'h809;
rommem[ 8549] <= 12'hE00;
rommem[ 8550] <= 12'h000;
rommem[ 8551] <= 12'h030;
rommem[ 8552] <= 12'h008;
rommem[ 8553] <= 12'h08C;
rommem[ 8554] <= 12'h000;
rommem[ 8555] <= 12'hFFF;
rommem[ 8556] <= 12'h025;
rommem[ 8557] <= 12'hFF5;
rommem[ 8558] <= 12'h0BD;
rommem[ 8559] <= 12'hFFE;
rommem[ 8560] <= 12'h140;
rommem[ 8561] <= 12'h0CB;
rommem[ 8562] <= 12'h002;
rommem[ 8563] <= 12'h086;
rommem[ 8564] <= 12'h04E;
rommem[ 8565] <= 12'h08E;
rommem[ 8566] <= 12'h000;
rommem[ 8567] <= 12'h000;
rommem[ 8568] <= 12'h03A;
rommem[ 8569] <= 12'h03A;
rommem[ 8570] <= 12'h0A7;
rommem[ 8571] <= 12'h809;
rommem[ 8572] <= 12'hE00;
rommem[ 8573] <= 12'h000;
rommem[ 8574] <= 12'h08C;
rommem[ 8575] <= 12'h000;
rommem[ 8576] <= 12'hFFF;
rommem[ 8577] <= 12'h025;
rommem[ 8578] <= 12'hFF6;
rommem[ 8579] <= 12'h0BD;
rommem[ 8580] <= 12'hFFE;
rommem[ 8581] <= 12'h140;
rommem[ 8582] <= 12'h0CB;
rommem[ 8583] <= 12'h008;
rommem[ 8584] <= 12'h0C1;
rommem[ 8585] <= 12'hFF0;
rommem[ 8586] <= 12'h025;
rommem[ 8587] <= 12'hFE9;
rommem[ 8588] <= 12'h013;
rommem[ 8589] <= 12'h016;
rommem[ 8590] <= 12'h001;
rommem[ 8591] <= 12'h1CC;
rommem[ 8592] <= 12'h086;
rommem[ 8593] <= 12'h050;
rommem[ 8594] <= 12'h08E;
rommem[ 8595] <= 12'h000;
rommem[ 8596] <= 12'h000;
rommem[ 8597] <= 12'h0A7;
rommem[ 8598] <= 12'h809;
rommem[ 8599] <= 12'hE00;
rommem[ 8600] <= 12'h000;
rommem[ 8601] <= 12'h030;
rommem[ 8602] <= 12'h001;
rommem[ 8603] <= 12'h08C;
rommem[ 8604] <= 12'h000;
rommem[ 8605] <= 12'hFFF;
rommem[ 8606] <= 12'h025;
rommem[ 8607] <= 12'hFF5;
rommem[ 8608] <= 12'h0C6;
rommem[ 8609] <= 12'h002;
rommem[ 8610] <= 12'h086;
rommem[ 8611] <= 12'h04E;
rommem[ 8612] <= 12'h08E;
rommem[ 8613] <= 12'h000;
rommem[ 8614] <= 12'h000;
rommem[ 8615] <= 12'h03A;
rommem[ 8616] <= 12'h03A;
rommem[ 8617] <= 12'h0A7;
rommem[ 8618] <= 12'h809;
rommem[ 8619] <= 12'hE00;
rommem[ 8620] <= 12'h000;
rommem[ 8621] <= 12'h08C;
rommem[ 8622] <= 12'h000;
rommem[ 8623] <= 12'hFFF;
rommem[ 8624] <= 12'h025;
rommem[ 8625] <= 12'hFC7;
rommem[ 8626] <= 12'h05C;
rommem[ 8627] <= 12'h0C1;
rommem[ 8628] <= 12'hFF0;
rommem[ 8629] <= 12'h025;
rommem[ 8630] <= 12'hFED;
rommem[ 8631] <= 12'h039;
rommem[ 8632] <= 12'h0CC;
rommem[ 8633] <= 12'h895;
rommem[ 8634] <= 12'h440;
rommem[ 8635] <= 12'h0C1;
rommem[ 8636] <= 12'h0FF;
rommem[ 8637] <= 12'h026;
rommem[ 8638] <= 12'h000;
rommem[ 8639] <= 12'h015;
rommem[ 8640] <= 12'h0B7;
rommem[ 8641] <= 12'hFFF;
rommem[ 8642] <= 12'hE60;
rommem[ 8643] <= 12'h001;
rommem[ 8644] <= 12'h026;
rommem[ 8645] <= 12'hFF2;
rommem[ 8646] <= 12'h039;
rommem[ 8647] <= 12'h058;
rommem[ 8648] <= 12'h049;
rommem[ 8649] <= 12'h058;
rommem[ 8650] <= 12'h049;
rommem[ 8651] <= 12'h058;
rommem[ 8652] <= 12'h049;
rommem[ 8653] <= 12'h058;
rommem[ 8654] <= 12'h049;
rommem[ 8655] <= 12'h058;
rommem[ 8656] <= 12'h049;
rommem[ 8657] <= 12'h039;
rommem[ 8658] <= 12'h034;
rommem[ 8659] <= 12'h076;
rommem[ 8660] <= 12'h01F;
rommem[ 8661] <= 12'h098;
rommem[ 8662] <= 12'h048;
rommem[ 8663] <= 12'h048;
rommem[ 8664] <= 12'h048;
rommem[ 8644] <= 12'h083;
rommem[ 8645] <= 12'h000;
rommem[ 8646] <= 12'h001;
rommem[ 8647] <= 12'h026;
rommem[ 8648] <= 12'hFF2;
rommem[ 8649] <= 12'h039;
rommem[ 8650] <= 12'h058;
rommem[ 8651] <= 12'h049;
rommem[ 8652] <= 12'h058;
rommem[ 8653] <= 12'h049;
rommem[ 8654] <= 12'h058;
rommem[ 8655] <= 12'h049;
rommem[ 8656] <= 12'h058;
rommem[ 8657] <= 12'h049;
rommem[ 8658] <= 12'h058;
rommem[ 8659] <= 12'h049;
rommem[ 8660] <= 12'h039;
rommem[ 8661] <= 12'h034;
rommem[ 8662] <= 12'h076;
rommem[ 8663] <= 12'h01F;
rommem[ 8664] <= 12'h098;
rommem[ 8665] <= 12'h048;
rommem[ 8666] <= 12'h08A;
rommem[ 8667] <= 12'hC00;
rommem[ 8668] <= 12'h05F;
rommem[ 8669] <= 12'h01F;
rommem[ 8670] <= 12'h001;
rommem[ 8671] <= 12'h034;
rommem[ 8672] <= 12'h006;
rommem[ 8673] <= 12'h18E;
rommem[ 8674] <= 12'hE00;
rommem[ 8675] <= 12'h000;
rommem[ 8676] <= 12'h0CE;
rommem[ 8677] <= 12'h000;
rommem[ 8678] <= 12'h400;
rommem[ 8679] <= 12'h0EC;
rommem[ 8680] <= 12'h801;
rommem[ 8681] <= 12'h0ED;
rommem[ 8682] <= 12'hA01;
rommem[ 8683] <= 12'h033;
rommem[ 8684] <= 12'h5FF;
rommem[ 8685] <= 12'h283;
rommem[ 8686] <= 12'h000;
rommem[ 8687] <= 12'h000;
rommem[ 8688] <= 12'h026;
rommem[ 8689] <= 12'hFF5;
rommem[ 8690] <= 12'h035;
rommem[ 8691] <= 12'h010;
rommem[ 8692] <= 12'h0E6;
rommem[ 8693] <= 12'h808;
rommem[ 8694] <= 12'h110;
rommem[ 8695] <= 12'h086;
rommem[ 8696] <= 12'h040;
rommem[ 8697] <= 12'h03D;
rommem[ 8698] <= 12'h01F;
rommem[ 8699] <= 12'h002;
rommem[ 8700] <= 12'h0E6;
rommem[ 8701] <= 12'h808;
rommem[ 8702] <= 12'h111;
rommem[ 8703] <= 12'h01F;
rommem[ 8704] <= 12'h021;
rommem[ 8705] <= 12'h03A;
rommem[ 8706] <= 12'h015;
rommem[ 8707] <= 12'h0BF;
rommem[ 8708] <= 12'hFFF;
rommem[ 8709] <= 12'hE07;
rommem[ 8710] <= 12'hF22;
rommem[ 8711] <= 12'h035;
rommem[ 8712] <= 12'h0F6;
rommem[ 8713] <= 12'h034;
rommem[ 8714] <= 12'h076;
rommem[ 8715] <= 12'h08D;
rommem[ 8716] <= 12'h08D;
rommem[ 8717] <= 12'h01F;
rommem[ 8718] <= 12'h002;
rommem[ 8719] <= 12'h08E;
rommem[ 8720] <= 12'hE00;
rommem[ 8721] <= 12'h000;
rommem[ 8722] <= 12'h0CE;
rommem[ 8723] <= 12'h000;
rommem[ 8724] <= 12'h400;
rommem[ 8725] <= 12'h0EC;
rommem[ 8726] <= 12'h801;
rommem[ 8727] <= 12'h0ED;
rommem[ 8728] <= 12'hA01;
rommem[ 8729] <= 12'h033;
rommem[ 8730] <= 12'h5FF;
rommem[ 8731] <= 12'h283;
rommem[ 8732] <= 12'h000;
rommem[ 8733] <= 12'h000;
rommem[ 8734] <= 12'h026;
rommem[ 8735] <= 12'hFF5;
rommem[ 8736] <= 12'h035;
rommem[ 8737] <= 12'h0F6;
rommem[ 8738] <= 12'h054;
rommem[ 8739] <= 12'h045;
rommem[ 8740] <= 12'h058;
rommem[ 8666] <= 12'h048;
rommem[ 8667] <= 12'h048;
rommem[ 8668] <= 12'h048;
rommem[ 8669] <= 12'h08A;
rommem[ 8670] <= 12'hC00;
rommem[ 8671] <= 12'h05F;
rommem[ 8672] <= 12'h01F;
rommem[ 8673] <= 12'h001;
rommem[ 8674] <= 12'h034;
rommem[ 8675] <= 12'h006;
rommem[ 8676] <= 12'h18E;
rommem[ 8677] <= 12'hE00;
rommem[ 8678] <= 12'h000;
rommem[ 8679] <= 12'h0CE;
rommem[ 8680] <= 12'h000;
rommem[ 8681] <= 12'h400;
rommem[ 8682] <= 12'h0EC;
rommem[ 8683] <= 12'h801;
rommem[ 8684] <= 12'h0ED;
rommem[ 8685] <= 12'hA01;
rommem[ 8686] <= 12'h033;
rommem[ 8687] <= 12'h5FF;
rommem[ 8688] <= 12'h283;
rommem[ 8689] <= 12'h000;
rommem[ 8690] <= 12'h000;
rommem[ 8691] <= 12'h026;
rommem[ 8692] <= 12'hFF5;
rommem[ 8693] <= 12'h035;
rommem[ 8694] <= 12'h010;
rommem[ 8695] <= 12'h0E6;
rommem[ 8696] <= 12'h808;
rommem[ 8697] <= 12'h110;
rommem[ 8698] <= 12'h086;
rommem[ 8699] <= 12'h040;
rommem[ 8700] <= 12'h03D;
rommem[ 8701] <= 12'h01F;
rommem[ 8702] <= 12'h002;
rommem[ 8703] <= 12'h0E6;
rommem[ 8704] <= 12'h808;
rommem[ 8705] <= 12'h111;
rommem[ 8706] <= 12'h01F;
rommem[ 8707] <= 12'h021;
rommem[ 8708] <= 12'h03A;
rommem[ 8709] <= 12'h015;
rommem[ 8710] <= 12'h0BF;
rommem[ 8711] <= 12'hFFF;
rommem[ 8712] <= 12'hE07;
rommem[ 8713] <= 12'hF22;
rommem[ 8714] <= 12'h035;
rommem[ 8715] <= 12'h0F6;
rommem[ 8716] <= 12'h034;
rommem[ 8717] <= 12'h076;
rommem[ 8718] <= 12'h08D;
rommem[ 8719] <= 12'h08D;
rommem[ 8720] <= 12'h01F;
rommem[ 8721] <= 12'h002;
rommem[ 8722] <= 12'h08E;
rommem[ 8723] <= 12'hE00;
rommem[ 8724] <= 12'h000;
rommem[ 8725] <= 12'h0CE;
rommem[ 8726] <= 12'h000;
rommem[ 8727] <= 12'h400;
rommem[ 8728] <= 12'h0EC;
rommem[ 8729] <= 12'h801;
rommem[ 8730] <= 12'h0ED;
rommem[ 8731] <= 12'hA01;
rommem[ 8732] <= 12'h033;
rommem[ 8733] <= 12'h5FF;
rommem[ 8734] <= 12'h283;
rommem[ 8735] <= 12'h000;
rommem[ 8736] <= 12'h000;
rommem[ 8737] <= 12'h026;
rommem[ 8738] <= 12'hFF5;
rommem[ 8739] <= 12'h035;
rommem[ 8740] <= 12'h0F6;
rommem[ 8741] <= 12'h054;
rommem[ 8742] <= 12'h053;
rommem[ 8743] <= 12'h043;
rommem[ 8744] <= 12'h052;
rommem[ 8745] <= 12'h020;
rommem[ 8746] <= 12'hFFE;
rommem[ 8747] <= 12'h234;
rommem[ 8748] <= 12'hFFE;
rommem[ 8749] <= 12'h235;
rommem[ 8750] <= 12'hFFE;
rommem[ 8751] <= 12'h236;
rommem[ 8752] <= 12'hFFE;
rommem[ 8753] <= 12'h237;
rommem[ 8754] <= 12'hFFE;
rommem[ 8755] <= 12'h238;
rommem[ 8756] <= 12'h039;
rommem[ 8757] <= 12'h039;
rommem[ 8758] <= 12'h039;
rommem[ 8742] <= 12'h045;
rommem[ 8743] <= 12'h058;
rommem[ 8744] <= 12'h054;
rommem[ 8745] <= 12'h053;
rommem[ 8746] <= 12'h043;
rommem[ 8747] <= 12'h052;
rommem[ 8748] <= 12'h020;
rommem[ 8749] <= 12'hFFE;
rommem[ 8750] <= 12'h237;
rommem[ 8751] <= 12'hFFE;
rommem[ 8752] <= 12'h238;
rommem[ 8753] <= 12'hFFE;
rommem[ 8754] <= 12'h239;
rommem[ 8755] <= 12'hFFE;
rommem[ 8756] <= 12'h23A;
rommem[ 8757] <= 12'hFFE;
rommem[ 8758] <= 12'h23B;
rommem[ 8759] <= 12'h039;
rommem[ 8760] <= 12'h039;
rommem[ 8761] <= 12'h034;
rommem[ 8762] <= 12'h076;
rommem[ 8763] <= 12'h08E;
rommem[ 8764] <= 12'h000;
rommem[ 8765] <= 12'h800;
rommem[ 8766] <= 12'h01F;
rommem[ 8767] <= 12'h013;
rommem[ 8768] <= 12'h08D;
rommem[ 8769] <= 12'h058;
rommem[ 8770] <= 12'h01F;
rommem[ 8771] <= 12'h002;
rommem[ 8772] <= 12'h0C6;
rommem[ 8773] <= 12'h020;
rommem[ 8774] <= 12'h0E7;
rommem[ 8775] <= 12'hA00;
rommem[ 8776] <= 12'h030;
rommem[ 8777] <= 12'h1FF;
rommem[ 8778] <= 12'h026;
rommem[ 8779] <= 12'hFFA;
rommem[ 8780] <= 12'h015;
rommem[ 8781] <= 12'h0F6;
rommem[ 8782] <= 12'hFFF;
rommem[ 8783] <= 12'hFFF;
rommem[ 8784] <= 12'hFE0;
rommem[ 8785] <= 12'h0F1;
rommem[ 8786] <= 12'hFFC;
rommem[ 8787] <= 12'h010;
rommem[ 8788] <= 12'h020;
rommem[ 8789] <= 12'h00D;
rommem[ 8790] <= 12'h18E;
rommem[ 8791] <= 12'hE02;
rommem[ 8792] <= 12'h000;
rommem[ 8793] <= 12'h086;
rommem[ 8794] <= 12'h0CE;
rommem[ 8795] <= 12'h01F;
rommem[ 8796] <= 12'h031;
rommem[ 8797] <= 12'h0A7;
rommem[ 8798] <= 12'hA00;
rommem[ 8799] <= 12'h030;
rommem[ 8800] <= 12'h1FF;
rommem[ 8801] <= 12'h026;
rommem[ 8802] <= 12'hFFA;
rommem[ 8803] <= 12'h035;
rommem[ 8804] <= 12'h0F6;
rommem[ 8805] <= 12'h034;
rommem[ 8806] <= 12'h076;
rommem[ 8807] <= 12'h18E;
rommem[ 8808] <= 12'h000;
rommem[ 8809] <= 12'h3FF;
rommem[ 8810] <= 12'h08D;
rommem[ 8811] <= 12'h02E;
rommem[ 8812] <= 12'h01F;
rommem[ 8813] <= 12'h001;
rommem[ 8814] <= 12'h01F;
rommem[ 8815] <= 12'h003;
rommem[ 8816] <= 12'h030;
rommem[ 8817] <= 12'h040;
rommem[ 8818] <= 12'h0EC;
rommem[ 8819] <= 12'h801;
rommem[ 8820] <= 12'h0ED;
rommem[ 8821] <= 12'hC01;
rommem[ 8822] <= 12'h031;
rommem[ 8823] <= 12'h3FF;
rommem[ 8824] <= 12'h026;
rommem[ 8825] <= 12'hFF8;
rommem[ 8826] <= 12'h086;
rommem[ 8827] <= 12'h01F;
rommem[ 8828] <= 12'h08D;
rommem[ 8829] <= 12'h002;
rommem[ 8830] <= 12'h035;
rommem[ 8831] <= 12'h0F6;
rommem[ 8832] <= 12'h034;
rommem[ 8833] <= 12'h016;
rommem[ 8834] <= 12'h034;
rommem[ 8835] <= 12'h002;
rommem[ 8836] <= 12'h08D;
rommem[ 8837] <= 12'h014;
rommem[ 8838] <= 12'h01F;
rommem[ 8839] <= 12'h001;
rommem[ 8840] <= 12'h035;
rommem[ 8841] <= 12'h002;
rommem[ 8842] <= 12'h0C6;
rommem[ 8843] <= 12'h040;
rommem[ 8844] <= 12'h03D;
rommem[ 8845] <= 12'h030;
rommem[ 8846] <= 12'h80B;
rommem[ 8847] <= 12'h086;
rommem[ 8848] <= 12'h020;
rommem[ 8849] <= 12'h0C6;
rommem[ 8850] <= 12'h040;
rommem[ 8851] <= 12'h0A7;
rommem[ 8852] <= 12'h800;
rommem[ 8853] <= 12'h05A;
rommem[ 8854] <= 12'h026;
rommem[ 8855] <= 12'hFFB;
rommem[ 8856] <= 12'h035;
rommem[ 8857] <= 12'h096;
rommem[ 8858] <= 12'h015;
rommem[ 8859] <= 12'h0B6;
rommem[ 8860] <= 12'hFFF;
rommem[ 8861] <= 12'hFFF;
rommem[ 8862] <= 12'hFE0;
rommem[ 8863] <= 12'h0B1;
rommem[ 8864] <= 12'hFFC;
rommem[ 8865] <= 12'h010;
rommem[ 8866] <= 12'h026;
rommem[ 8867] <= 12'h008;
rommem[ 8868] <= 12'h081;
rommem[ 8869] <= 12'h020;
rommem[ 8870] <= 12'h027;
rommem[ 8871] <= 12'h004;
rommem[ 8872] <= 12'h0CC;
rommem[ 8873] <= 12'hE00;
rommem[ 8874] <= 12'h000;
rommem[ 8875] <= 12'h039;
rommem[ 8876] <= 12'h0CC;
rommem[ 8877] <= 12'h007;
rommem[ 8878] <= 12'h800;
rommem[ 8879] <= 12'h039;
rommem[ 8880] <= 12'h034;
rommem[ 8881] <= 12'h016;
rommem[ 8882] <= 12'h00F;
rommem[ 8883] <= 12'h110;
rommem[ 8884] <= 12'h00F;
rommem[ 8885] <= 12'h111;
rommem[ 8886] <= 12'h015;
rommem[ 8887] <= 12'h0F6;
rommem[ 8888] <= 12'hFFF;
rommem[ 8889] <= 12'hFFF;
rommem[ 8890] <= 12'hFE0;
rommem[ 8891] <= 12'h0F1;
rommem[ 8892] <= 12'hFFC;
rommem[ 8893] <= 12'h010;
rommem[ 8894] <= 12'h026;
rommem[ 8895] <= 12'h00A;
rommem[ 8896] <= 12'h0C1;
rommem[ 8897] <= 12'h020;
rommem[ 8898] <= 12'h027;
rommem[ 8899] <= 12'h006;
rommem[ 8900] <= 12'h04F;
rommem[ 8901] <= 12'h015;
rommem[ 8902] <= 12'h0B7;
rommem[ 8903] <= 12'hFFF;
rommem[ 8904] <= 12'hE07;
rommem[ 8905] <= 12'hF22;
rommem[ 8906] <= 12'h035;
rommem[ 8907] <= 12'h096;
rommem[ 8908] <= 12'h034;
rommem[ 8909] <= 12'h016;
rommem[ 8910] <= 12'h015;
rommem[ 8911] <= 12'h0F6;
rommem[ 8912] <= 12'hFFF;
rommem[ 8913] <= 12'hFFF;
rommem[ 8914] <= 12'hFE0;
rommem[ 8915] <= 12'h0F1;
rommem[ 8916] <= 12'hFFC;
rommem[ 8917] <= 12'h010;
rommem[ 8918] <= 12'h026;
rommem[ 8919] <= 12'h018;
rommem[ 8920] <= 12'h0C1;
rommem[ 8921] <= 12'h020;
rommem[ 8922] <= 12'h027;
rommem[ 8923] <= 12'h014;
rommem[ 8924] <= 12'h096;
rommem[ 8925] <= 12'h110;
rommem[ 8926] <= 12'h084;
rommem[ 8927] <= 12'h03F;
rommem[ 8928] <= 12'h015;
rommem[ 8929] <= 12'h0F6;
rommem[ 8930] <= 12'hFFF;
rommem[ 8931] <= 12'hE07;
rommem[ 8932] <= 12'hF00;
rommem[ 8933] <= 12'h03D;
rommem[ 8934] <= 12'h01F;
rommem[ 8935] <= 12'h001;
rommem[ 8936] <= 12'h0D6;
rommem[ 8937] <= 12'h111;
rommem[ 8938] <= 12'h03A;
rommem[ 8939] <= 12'h015;
rommem[ 8940] <= 12'h0BF;
rommem[ 8941] <= 12'hFFF;
rommem[ 8942] <= 12'hE07;
rommem[ 8943] <= 12'hF22;
rommem[ 8944] <= 12'h035;
rommem[ 8945] <= 12'h096;
rommem[ 8946] <= 12'h034;
rommem[ 8947] <= 12'h010;
rommem[ 8761] <= 12'h039;
rommem[ 8762] <= 12'h039;
rommem[ 8763] <= 12'h039;
rommem[ 8764] <= 12'h034;
rommem[ 8765] <= 12'h076;
rommem[ 8766] <= 12'h08E;
rommem[ 8767] <= 12'h000;
rommem[ 8768] <= 12'h800;
rommem[ 8769] <= 12'h01F;
rommem[ 8770] <= 12'h013;
rommem[ 8771] <= 12'h08D;
rommem[ 8772] <= 12'h058;
rommem[ 8773] <= 12'h01F;
rommem[ 8774] <= 12'h002;
rommem[ 8775] <= 12'h0C6;
rommem[ 8776] <= 12'h020;
rommem[ 8777] <= 12'h0E7;
rommem[ 8778] <= 12'hA00;
rommem[ 8779] <= 12'h030;
rommem[ 8780] <= 12'h1FF;
rommem[ 8781] <= 12'h026;
rommem[ 8782] <= 12'hFFA;
rommem[ 8783] <= 12'h015;
rommem[ 8784] <= 12'h0F6;
rommem[ 8785] <= 12'hFFF;
rommem[ 8786] <= 12'hFFF;
rommem[ 8787] <= 12'hFE0;
rommem[ 8788] <= 12'h0F1;
rommem[ 8789] <= 12'hFFC;
rommem[ 8790] <= 12'h010;
rommem[ 8791] <= 12'h020;
rommem[ 8792] <= 12'h00D;
rommem[ 8793] <= 12'h18E;
rommem[ 8794] <= 12'hE02;
rommem[ 8795] <= 12'h000;
rommem[ 8796] <= 12'h086;
rommem[ 8797] <= 12'h0CE;
rommem[ 8798] <= 12'h01F;
rommem[ 8799] <= 12'h031;
rommem[ 8800] <= 12'h0A7;
rommem[ 8801] <= 12'hA00;
rommem[ 8802] <= 12'h030;
rommem[ 8803] <= 12'h1FF;
rommem[ 8804] <= 12'h026;
rommem[ 8805] <= 12'hFFA;
rommem[ 8806] <= 12'h035;
rommem[ 8807] <= 12'h0F6;
rommem[ 8808] <= 12'h034;
rommem[ 8809] <= 12'h076;
rommem[ 8810] <= 12'h18E;
rommem[ 8811] <= 12'h000;
rommem[ 8812] <= 12'h3FF;
rommem[ 8813] <= 12'h08D;
rommem[ 8814] <= 12'h02E;
rommem[ 8815] <= 12'h01F;
rommem[ 8816] <= 12'h001;
rommem[ 8817] <= 12'h01F;
rommem[ 8818] <= 12'h003;
rommem[ 8819] <= 12'h030;
rommem[ 8820] <= 12'h040;
rommem[ 8821] <= 12'h0EC;
rommem[ 8822] <= 12'h801;
rommem[ 8823] <= 12'h0ED;
rommem[ 8824] <= 12'hC01;
rommem[ 8825] <= 12'h031;
rommem[ 8826] <= 12'h3FF;
rommem[ 8827] <= 12'h026;
rommem[ 8828] <= 12'hFF8;
rommem[ 8829] <= 12'h086;
rommem[ 8830] <= 12'h01F;
rommem[ 8831] <= 12'h08D;
rommem[ 8832] <= 12'h002;
rommem[ 8833] <= 12'h035;
rommem[ 8834] <= 12'h0F6;
rommem[ 8835] <= 12'h034;
rommem[ 8836] <= 12'h016;
rommem[ 8837] <= 12'h034;
rommem[ 8838] <= 12'h002;
rommem[ 8839] <= 12'h08D;
rommem[ 8840] <= 12'h014;
rommem[ 8841] <= 12'h01F;
rommem[ 8842] <= 12'h001;
rommem[ 8843] <= 12'h035;
rommem[ 8844] <= 12'h002;
rommem[ 8845] <= 12'h0C6;
rommem[ 8846] <= 12'h040;
rommem[ 8847] <= 12'h03D;
rommem[ 8848] <= 12'h030;
rommem[ 8849] <= 12'h80B;
rommem[ 8850] <= 12'h086;
rommem[ 8851] <= 12'h020;
rommem[ 8852] <= 12'h0C6;
rommem[ 8853] <= 12'h040;
rommem[ 8854] <= 12'h0A7;
rommem[ 8855] <= 12'h800;
rommem[ 8856] <= 12'h05A;
rommem[ 8857] <= 12'h026;
rommem[ 8858] <= 12'hFFB;
rommem[ 8859] <= 12'h035;
rommem[ 8860] <= 12'h096;
rommem[ 8861] <= 12'h015;
rommem[ 8862] <= 12'h0B6;
rommem[ 8863] <= 12'hFFF;
rommem[ 8864] <= 12'hFFF;
rommem[ 8865] <= 12'hFE0;
rommem[ 8866] <= 12'h0B1;
rommem[ 8867] <= 12'hFFC;
rommem[ 8868] <= 12'h010;
rommem[ 8869] <= 12'h026;
rommem[ 8870] <= 12'h008;
rommem[ 8871] <= 12'h081;
rommem[ 8872] <= 12'h020;
rommem[ 8873] <= 12'h027;
rommem[ 8874] <= 12'h004;
rommem[ 8875] <= 12'h0CC;
rommem[ 8876] <= 12'hE00;
rommem[ 8877] <= 12'h000;
rommem[ 8878] <= 12'h039;
rommem[ 8879] <= 12'h0CC;
rommem[ 8880] <= 12'h007;
rommem[ 8881] <= 12'h800;
rommem[ 8882] <= 12'h039;
rommem[ 8883] <= 12'h034;
rommem[ 8884] <= 12'h016;
rommem[ 8885] <= 12'h00F;
rommem[ 8886] <= 12'h110;
rommem[ 8887] <= 12'h00F;
rommem[ 8888] <= 12'h111;
rommem[ 8889] <= 12'h015;
rommem[ 8890] <= 12'h0F6;
rommem[ 8891] <= 12'hFFF;
rommem[ 8892] <= 12'hFFF;
rommem[ 8893] <= 12'hFE0;
rommem[ 8894] <= 12'h0F1;
rommem[ 8895] <= 12'hFFC;
rommem[ 8896] <= 12'h010;
rommem[ 8897] <= 12'h026;
rommem[ 8898] <= 12'h00A;
rommem[ 8899] <= 12'h0C1;
rommem[ 8900] <= 12'h020;
rommem[ 8901] <= 12'h027;
rommem[ 8902] <= 12'h006;
rommem[ 8903] <= 12'h04F;
rommem[ 8904] <= 12'h015;
rommem[ 8905] <= 12'h0B7;
rommem[ 8906] <= 12'hFFF;
rommem[ 8907] <= 12'hE07;
rommem[ 8908] <= 12'hF22;
rommem[ 8909] <= 12'h035;
rommem[ 8910] <= 12'h096;
rommem[ 8911] <= 12'h034;
rommem[ 8912] <= 12'h016;
rommem[ 8913] <= 12'h015;
rommem[ 8914] <= 12'h0F6;
rommem[ 8915] <= 12'hFFF;
rommem[ 8916] <= 12'hFFF;
rommem[ 8917] <= 12'hFE0;
rommem[ 8918] <= 12'h0F1;
rommem[ 8919] <= 12'hFFC;
rommem[ 8920] <= 12'h010;
rommem[ 8921] <= 12'h026;
rommem[ 8922] <= 12'h018;
rommem[ 8923] <= 12'h0C1;
rommem[ 8924] <= 12'h020;
rommem[ 8925] <= 12'h027;
rommem[ 8926] <= 12'h014;
rommem[ 8927] <= 12'h096;
rommem[ 8928] <= 12'h110;
rommem[ 8929] <= 12'h084;
rommem[ 8930] <= 12'h03F;
rommem[ 8931] <= 12'h015;
rommem[ 8932] <= 12'h0F6;
rommem[ 8933] <= 12'hFFF;
rommem[ 8934] <= 12'hE07;
rommem[ 8935] <= 12'hF00;
rommem[ 8936] <= 12'h03D;
rommem[ 8937] <= 12'h01F;
rommem[ 8938] <= 12'h001;
rommem[ 8939] <= 12'h0D6;
rommem[ 8940] <= 12'h111;
rommem[ 8941] <= 12'h03A;
rommem[ 8942] <= 12'h015;
rommem[ 8943] <= 12'h0BF;
rommem[ 8944] <= 12'hFFF;
rommem[ 8945] <= 12'hE07;
rommem[ 8946] <= 12'hF22;
rommem[ 8947] <= 12'h035;
rommem[ 8948] <= 12'h096;
rommem[ 8949] <= 12'h110;
rommem[ 8950] <= 12'h0C6;
rommem[ 8951] <= 12'h040;
rommem[ 8952] <= 12'h03D;
rommem[ 8953] <= 12'h01F;
rommem[ 8954] <= 12'h001;
rommem[ 8955] <= 12'h0D6;
rommem[ 8956] <= 12'h111;
rommem[ 8957] <= 12'h03A;
rommem[ 8958] <= 12'h015;
rommem[ 8959] <= 12'h0F6;
rommem[ 8960] <= 12'hFFF;
rommem[ 8961] <= 12'hFFF;
rommem[ 8962] <= 12'hFE0;
rommem[ 8963] <= 12'h0F1;
rommem[ 8964] <= 12'hFFC;
rommem[ 8965] <= 12'h010;
rommem[ 8966] <= 12'h026;
rommem[ 8967] <= 12'h009;
rommem[ 8968] <= 12'h0C1;
rommem[ 8969] <= 12'h020;
rommem[ 8970] <= 12'h027;
rommem[ 8971] <= 12'h005;
rommem[ 8972] <= 12'h015;
rommem[ 8973] <= 12'h0BF;
rommem[ 8974] <= 12'hFFF;
rommem[ 8975] <= 12'hE07;
rommem[ 8976] <= 12'hF22;
rommem[ 8977] <= 12'h08D;
rommem[ 8978] <= 12'hF87;
rommem[ 8979] <= 12'h030;
rommem[ 8980] <= 12'h80B;
rommem[ 8981] <= 12'h01F;
rommem[ 8982] <= 12'h010;
rommem[ 8983] <= 12'h035;
rommem[ 8984] <= 12'h090;
rommem[ 8985] <= 12'h017;
rommem[ 8986] <= 12'h000;
rommem[ 8987] <= 12'h96C;
rommem[ 8988] <= 12'h034;
rommem[ 8989] <= 12'h016;
rommem[ 8990] <= 12'h0C1;
rommem[ 8991] <= 12'h00D;
rommem[ 8992] <= 12'h026;
rommem[ 8993] <= 12'h007;
rommem[ 8994] <= 12'h00F;
rommem[ 8995] <= 12'h111;
rommem[ 8996] <= 12'h08D;
rommem[ 8997] <= 12'hFA6;
rommem[ 8998] <= 12'h016;
rommem[ 8999] <= 12'h000;
rommem[ 9000] <= 12'h08C;
rommem[ 9001] <= 12'h0C1;
rommem[ 9002] <= 12'h091;
rommem[ 9003] <= 12'h026;
rommem[ 9004] <= 12'h00D;
rommem[ 9005] <= 12'h096;
rommem[ 9006] <= 12'h111;
rommem[ 9007] <= 12'h081;
rommem[ 9008] <= 12'h040;
rommem[ 9009] <= 12'h024;
rommem[ 9010] <= 12'h003;
rommem[ 9011] <= 12'h04C;
rommem[ 9012] <= 12'h097;
rommem[ 9013] <= 12'h111;
rommem[ 9014] <= 12'h08D;
rommem[ 9015] <= 12'hF94;
rommem[ 9016] <= 12'h035;
rommem[ 9017] <= 12'h096;
rommem[ 9018] <= 12'h0C1;
rommem[ 9019] <= 12'h090;
rommem[ 9020] <= 12'h026;
rommem[ 9021] <= 12'h009;
rommem[ 9022] <= 12'h096;
rommem[ 9023] <= 12'h110;
rommem[ 9024] <= 12'h027;
rommem[ 9025] <= 12'hFF4;
rommem[ 9026] <= 12'h04A;
rommem[ 9027] <= 12'h097;
rommem[ 9028] <= 12'h110;
rommem[ 9029] <= 12'h020;
rommem[ 9030] <= 12'hFEF;
rommem[ 9031] <= 12'h0C1;
rommem[ 9032] <= 12'h093;
rommem[ 9033] <= 12'h026;
rommem[ 9034] <= 12'h009;
rommem[ 9035] <= 12'h096;
rommem[ 9036] <= 12'h111;
rommem[ 9037] <= 12'h027;
rommem[ 9038] <= 12'hFE7;
rommem[ 9039] <= 12'h04A;
rommem[ 9040] <= 12'h097;
rommem[ 9041] <= 12'h111;
rommem[ 9042] <= 12'h020;
rommem[ 9043] <= 12'hFE2;
rommem[ 9044] <= 12'h0C1;
rommem[ 9045] <= 12'h092;
rommem[ 9046] <= 12'h026;
rommem[ 9047] <= 12'h00B;
rommem[ 9048] <= 12'h096;
rommem[ 9049] <= 12'h110;
rommem[ 9050] <= 12'h081;
rommem[ 9051] <= 12'h020;
rommem[ 9052] <= 12'h027;
rommem[ 9053] <= 12'hFD8;
rommem[ 9054] <= 12'h04C;
rommem[ 9055] <= 12'h097;
rommem[ 9056] <= 12'h110;
rommem[ 9057] <= 12'h020;
rommem[ 9058] <= 12'hFD3;
rommem[ 9059] <= 12'h0C1;
rommem[ 9060] <= 12'h094;
rommem[ 9061] <= 12'h026;
rommem[ 9062] <= 12'h00C;
rommem[ 9063] <= 12'h096;
rommem[ 9064] <= 12'h111;
rommem[ 9065] <= 12'h027;
rommem[ 9066] <= 12'h004;
rommem[ 9067] <= 12'h00F;
rommem[ 9068] <= 12'h111;
rommem[ 9069] <= 12'h020;
rommem[ 9070] <= 12'hFC7;
rommem[ 9071] <= 12'h00F;
rommem[ 9072] <= 12'h110;
rommem[ 9073] <= 12'h020;
rommem[ 9074] <= 12'hFC3;
rommem[ 9075] <= 12'h0C1;
rommem[ 9076] <= 12'h099;
rommem[ 9077] <= 12'h026;
rommem[ 9078] <= 12'h008;
rommem[ 9079] <= 12'h08D;
rommem[ 9080] <= 12'hF79;
rommem[ 9081] <= 12'h01F;
rommem[ 9082] <= 12'h001;
rommem[ 9083] <= 12'h096;
rommem[ 9084] <= 12'h111;
rommem[ 9085] <= 12'h020;
rommem[ 9086] <= 12'h011;
rommem[ 9087] <= 12'h0C1;
rommem[ 9088] <= 12'h008;
rommem[ 9089] <= 12'h026;
rommem[ 9090] <= 12'h01E;
rommem[ 9091] <= 12'h096;
rommem[ 9092] <= 12'h111;
rommem[ 9093] <= 12'h027;
rommem[ 9094] <= 12'h02E;
rommem[ 9095] <= 12'h04A;
rommem[ 9096] <= 12'h097;
rommem[ 9097] <= 12'h111;
rommem[ 9098] <= 12'h08D;
rommem[ 9099] <= 12'hF66;
rommem[ 9100] <= 12'h01F;
rommem[ 9101] <= 12'h001;
rommem[ 9102] <= 12'h096;
rommem[ 9103] <= 12'h111;
rommem[ 9104] <= 12'h0E6;
rommem[ 9105] <= 12'h001;
rommem[ 9106] <= 12'h0E7;
rommem[ 9107] <= 12'h801;
rommem[ 9108] <= 12'h04C;
rommem[ 9109] <= 12'h081;
rommem[ 9110] <= 12'h040;
rommem[ 9111] <= 12'h025;
rommem[ 9112] <= 12'hFF7;
rommem[ 9113] <= 12'h0C6;
rommem[ 9114] <= 12'h020;
rommem[ 9115] <= 12'h030;
rommem[ 9116] <= 12'h1FF;
rommem[ 9117] <= 12'h0E7;
rommem[ 9118] <= 12'h804;
rommem[ 9119] <= 12'h020;
rommem[ 9120] <= 12'h014;
rommem[ 9121] <= 12'h0C1;
rommem[ 9122] <= 12'h00A;
rommem[ 9123] <= 12'h027;
rommem[ 9124] <= 12'h00E;
rommem[ 9125] <= 12'h034;
rommem[ 9126] <= 12'h004;
rommem[ 9127] <= 12'h08D;
rommem[ 9128] <= 12'hF49;
rommem[ 9129] <= 12'h01F;
rommem[ 9130] <= 12'h001;
rommem[ 9131] <= 12'h035;
rommem[ 9132] <= 12'h004;
rommem[ 9133] <= 12'h0E7;
rommem[ 9134] <= 12'h804;
rommem[ 9135] <= 12'h08D;
rommem[ 9136] <= 12'h006;
rommem[ 9137] <= 12'h020;
rommem[ 9138] <= 12'h002;
rommem[ 9139] <= 12'h08D;
rommem[ 9140] <= 12'h011;
rommem[ 9141] <= 12'h035;
rommem[ 9142] <= 12'h096;
rommem[ 9143] <= 12'h034;
rommem[ 9144] <= 12'h016;
rommem[ 8949] <= 12'h034;
rommem[ 8950] <= 12'h010;
rommem[ 8951] <= 12'h096;
rommem[ 8952] <= 12'h110;
rommem[ 8953] <= 12'h0C6;
rommem[ 8954] <= 12'h040;
rommem[ 8955] <= 12'h03D;
rommem[ 8956] <= 12'h01F;
rommem[ 8957] <= 12'h001;
rommem[ 8958] <= 12'h0D6;
rommem[ 8959] <= 12'h111;
rommem[ 8960] <= 12'h03A;
rommem[ 8961] <= 12'h015;
rommem[ 8962] <= 12'h0F6;
rommem[ 8963] <= 12'hFFF;
rommem[ 8964] <= 12'hFFF;
rommem[ 8965] <= 12'hFE0;
rommem[ 8966] <= 12'h0F1;
rommem[ 8967] <= 12'hFFC;
rommem[ 8968] <= 12'h010;
rommem[ 8969] <= 12'h026;
rommem[ 8970] <= 12'h009;
rommem[ 8971] <= 12'h0C1;
rommem[ 8972] <= 12'h020;
rommem[ 8973] <= 12'h027;
rommem[ 8974] <= 12'h005;
rommem[ 8975] <= 12'h015;
rommem[ 8976] <= 12'h0BF;
rommem[ 8977] <= 12'hFFF;
rommem[ 8978] <= 12'hE07;
rommem[ 8979] <= 12'hF22;
rommem[ 8980] <= 12'h08D;
rommem[ 8981] <= 12'hF87;
rommem[ 8982] <= 12'h030;
rommem[ 8983] <= 12'h80B;
rommem[ 8984] <= 12'h01F;
rommem[ 8985] <= 12'h010;
rommem[ 8986] <= 12'h035;
rommem[ 8987] <= 12'h090;
rommem[ 8988] <= 12'h017;
rommem[ 8989] <= 12'h000;
rommem[ 8990] <= 12'h97B;
rommem[ 8991] <= 12'h034;
rommem[ 8992] <= 12'h016;
rommem[ 8993] <= 12'h0C1;
rommem[ 8994] <= 12'h00D;
rommem[ 8995] <= 12'h026;
rommem[ 8996] <= 12'h007;
rommem[ 8997] <= 12'h00F;
rommem[ 8998] <= 12'h111;
rommem[ 8999] <= 12'h08D;
rommem[ 9000] <= 12'hFA6;
rommem[ 9001] <= 12'h016;
rommem[ 9002] <= 12'h000;
rommem[ 9003] <= 12'h08C;
rommem[ 9004] <= 12'h0C1;
rommem[ 9005] <= 12'h091;
rommem[ 9006] <= 12'h026;
rommem[ 9007] <= 12'h00D;
rommem[ 9008] <= 12'h096;
rommem[ 9009] <= 12'h111;
rommem[ 9010] <= 12'h081;
rommem[ 9011] <= 12'h040;
rommem[ 9012] <= 12'h024;
rommem[ 9013] <= 12'h003;
rommem[ 9014] <= 12'h04C;
rommem[ 9015] <= 12'h097;
rommem[ 9016] <= 12'h111;
rommem[ 9017] <= 12'h08D;
rommem[ 9018] <= 12'hF94;
rommem[ 9019] <= 12'h035;
rommem[ 9020] <= 12'h096;
rommem[ 9021] <= 12'h0C1;
rommem[ 9022] <= 12'h090;
rommem[ 9023] <= 12'h026;
rommem[ 9024] <= 12'h009;
rommem[ 9025] <= 12'h096;
rommem[ 9026] <= 12'h110;
rommem[ 9027] <= 12'h027;
rommem[ 9028] <= 12'hFF4;
rommem[ 9029] <= 12'h04A;
rommem[ 9030] <= 12'h097;
rommem[ 9031] <= 12'h110;
rommem[ 9032] <= 12'h020;
rommem[ 9033] <= 12'hFEF;
rommem[ 9034] <= 12'h0C1;
rommem[ 9035] <= 12'h093;
rommem[ 9036] <= 12'h026;
rommem[ 9037] <= 12'h009;
rommem[ 9038] <= 12'h096;
rommem[ 9039] <= 12'h111;
rommem[ 9040] <= 12'h027;
rommem[ 9041] <= 12'hFE7;
rommem[ 9042] <= 12'h04A;
rommem[ 9043] <= 12'h097;
rommem[ 9044] <= 12'h111;
rommem[ 9045] <= 12'h020;
rommem[ 9046] <= 12'hFE2;
rommem[ 9047] <= 12'h0C1;
rommem[ 9048] <= 12'h092;
rommem[ 9049] <= 12'h026;
rommem[ 9050] <= 12'h00B;
rommem[ 9051] <= 12'h096;
rommem[ 9052] <= 12'h110;
rommem[ 9053] <= 12'h081;
rommem[ 9054] <= 12'h020;
rommem[ 9055] <= 12'h027;
rommem[ 9056] <= 12'hFD8;
rommem[ 9057] <= 12'h04C;
rommem[ 9058] <= 12'h097;
rommem[ 9059] <= 12'h110;
rommem[ 9060] <= 12'h020;
rommem[ 9061] <= 12'hFD3;
rommem[ 9062] <= 12'h0C1;
rommem[ 9063] <= 12'h094;
rommem[ 9064] <= 12'h026;
rommem[ 9065] <= 12'h00C;
rommem[ 9066] <= 12'h096;
rommem[ 9067] <= 12'h111;
rommem[ 9068] <= 12'h027;
rommem[ 9069] <= 12'h004;
rommem[ 9070] <= 12'h00F;
rommem[ 9071] <= 12'h111;
rommem[ 9072] <= 12'h020;
rommem[ 9073] <= 12'hFC7;
rommem[ 9074] <= 12'h00F;
rommem[ 9075] <= 12'h110;
rommem[ 9076] <= 12'h020;
rommem[ 9077] <= 12'hFC3;
rommem[ 9078] <= 12'h0C1;
rommem[ 9079] <= 12'h099;
rommem[ 9080] <= 12'h026;
rommem[ 9081] <= 12'h008;
rommem[ 9082] <= 12'h08D;
rommem[ 9083] <= 12'hF79;
rommem[ 9084] <= 12'h01F;
rommem[ 9085] <= 12'h001;
rommem[ 9086] <= 12'h096;
rommem[ 9087] <= 12'h111;
rommem[ 9088] <= 12'h020;
rommem[ 9089] <= 12'h011;
rommem[ 9090] <= 12'h0C1;
rommem[ 9091] <= 12'h008;
rommem[ 9092] <= 12'h026;
rommem[ 9093] <= 12'h01E;
rommem[ 9094] <= 12'h096;
rommem[ 9095] <= 12'h111;
rommem[ 9096] <= 12'h027;
rommem[ 9097] <= 12'h02E;
rommem[ 9098] <= 12'h04A;
rommem[ 9099] <= 12'h097;
rommem[ 9100] <= 12'h111;
rommem[ 9101] <= 12'h08D;
rommem[ 9102] <= 12'hF66;
rommem[ 9103] <= 12'h01F;
rommem[ 9104] <= 12'h001;
rommem[ 9105] <= 12'h096;
rommem[ 9106] <= 12'h111;
rommem[ 9107] <= 12'h0E6;
rommem[ 9108] <= 12'h001;
rommem[ 9109] <= 12'h0E7;
rommem[ 9110] <= 12'h801;
rommem[ 9111] <= 12'h04C;
rommem[ 9112] <= 12'h081;
rommem[ 9113] <= 12'h040;
rommem[ 9114] <= 12'h025;
rommem[ 9115] <= 12'hFF7;
rommem[ 9116] <= 12'h0C6;
rommem[ 9117] <= 12'h020;
rommem[ 9118] <= 12'h030;
rommem[ 9119] <= 12'h1FF;
rommem[ 9120] <= 12'h0E7;
rommem[ 9121] <= 12'h804;
rommem[ 9122] <= 12'h020;
rommem[ 9123] <= 12'h014;
rommem[ 9124] <= 12'h0C1;
rommem[ 9125] <= 12'h00A;
rommem[ 9126] <= 12'h027;
rommem[ 9127] <= 12'h00E;
rommem[ 9128] <= 12'h034;
rommem[ 9129] <= 12'h004;
rommem[ 9130] <= 12'h08D;
rommem[ 9131] <= 12'hF49;
rommem[ 9132] <= 12'h01F;
rommem[ 9133] <= 12'h001;
rommem[ 9134] <= 12'h035;
rommem[ 9135] <= 12'h004;
rommem[ 9136] <= 12'h0E7;
rommem[ 9137] <= 12'h804;
rommem[ 9138] <= 12'h08D;
rommem[ 9139] <= 12'h006;
rommem[ 9140] <= 12'h020;
rommem[ 9141] <= 12'h002;
rommem[ 9142] <= 12'h08D;
rommem[ 9143] <= 12'h011;
rommem[ 9144] <= 12'h035;
rommem[ 9145] <= 12'h096;
rommem[ 9146] <= 12'h111;
rommem[ 9147] <= 12'h04C;
rommem[ 9148] <= 12'h097;
rommem[ 9146] <= 12'h034;
rommem[ 9147] <= 12'h016;
rommem[ 9148] <= 12'h096;
rommem[ 9149] <= 12'h111;
rommem[ 9150] <= 12'h081;
rommem[ 9151] <= 12'h040;
rommem[ 9152] <= 12'h025;
rommem[ 9153] <= 12'h014;
rommem[ 9154] <= 12'h00F;
rommem[ 9155] <= 12'h111;
rommem[ 9156] <= 12'h020;
rommem[ 9157] <= 12'h002;
rommem[ 9158] <= 12'h034;
rommem[ 9159] <= 12'h016;
rommem[ 9160] <= 12'h096;
rommem[ 9161] <= 12'h110;
rommem[ 9162] <= 12'h04C;
rommem[ 9163] <= 12'h097;
rommem[ 9150] <= 12'h04C;
rommem[ 9151] <= 12'h097;
rommem[ 9152] <= 12'h111;
rommem[ 9153] <= 12'h081;
rommem[ 9154] <= 12'h040;
rommem[ 9155] <= 12'h025;
rommem[ 9156] <= 12'h014;
rommem[ 9157] <= 12'h00F;
rommem[ 9158] <= 12'h111;
rommem[ 9159] <= 12'h020;
rommem[ 9160] <= 12'h002;
rommem[ 9161] <= 12'h034;
rommem[ 9162] <= 12'h016;
rommem[ 9163] <= 12'h096;
rommem[ 9164] <= 12'h110;
rommem[ 9165] <= 12'h081;
rommem[ 9166] <= 12'h020;
rommem[ 9167] <= 12'h025;
rommem[ 9168] <= 12'h005;
rommem[ 9169] <= 12'h04A;
rommem[ 9170] <= 12'h097;
rommem[ 9171] <= 12'h110;
rommem[ 9172] <= 12'h08D;
rommem[ 9173] <= 12'hE8F;
rommem[ 9174] <= 12'h08D;
rommem[ 9175] <= 12'hEF4;
rommem[ 9176] <= 12'h035;
rommem[ 9177] <= 12'h096;
rommem[ 9178] <= 12'h034;
rommem[ 9179] <= 12'h016;
rommem[ 9180] <= 12'h01F;
rommem[ 9181] <= 12'h001;
rommem[ 9182] <= 12'h015;
rommem[ 9183] <= 12'h0B6;
rommem[ 9184] <= 12'hFFF;
rommem[ 9185] <= 12'hFFF;
rommem[ 9186] <= 12'hFE0;
rommem[ 9187] <= 12'h081;
rommem[ 9188] <= 12'h020;
rommem[ 9189] <= 12'h027;
rommem[ 9190] <= 12'h005;
rommem[ 9191] <= 12'h0B6;
rommem[ 9192] <= 12'hEF0;
rommem[ 9193] <= 12'h001;
rommem[ 9194] <= 12'h027;
rommem[ 9195] <= 12'hFFB;
rommem[ 9196] <= 12'h0E6;
rommem[ 9197] <= 12'h800;
rommem[ 9198] <= 12'h027;
rommem[ 9199] <= 12'h005;
rommem[ 9200] <= 12'h017;
rommem[ 9201] <= 12'h000;
rommem[ 9202] <= 12'hAEE;
rommem[ 9203] <= 12'h020;
rommem[ 9204] <= 12'hFF7;
rommem[ 9205] <= 12'h07F;
rommem[ 9206] <= 12'hEF0;
rommem[ 9207] <= 12'h001;
rommem[ 9208] <= 12'h035;
rommem[ 9209] <= 12'h096;
rommem[ 9210] <= 12'h034;
rommem[ 9211] <= 12'h006;
rommem[ 9212] <= 12'h08D;
rommem[ 9213] <= 12'hFDC;
rommem[ 9214] <= 12'h0C6;
rommem[ 9215] <= 12'h00D;
rommem[ 9216] <= 12'h017;
rommem[ 9217] <= 12'h000;
rommem[ 9218] <= 12'hADE;
rommem[ 9219] <= 12'h0C6;
rommem[ 9220] <= 12'h00A;
rommem[ 9221] <= 12'h017;
rommem[ 9222] <= 12'h000;
rommem[ 9223] <= 12'hAD9;
rommem[ 9224] <= 12'h035;
rommem[ 9225] <= 12'h086;
rommem[ 9226] <= 12'h08D;
rommem[ 9227] <= 12'h002;
rommem[ 9228] <= 12'h020;
rommem[ 9229] <= 12'h00D;
rommem[ 9230] <= 12'h034;
rommem[ 9231] <= 12'h010;
rommem[ 9232] <= 12'h08E;
rommem[ 9233] <= 12'hFFE;
rommem[ 9234] <= 12'h422;
rommem[ 9235] <= 12'h08D;
rommem[ 9236] <= 12'h006;
rommem[ 9237] <= 12'h035;
rommem[ 9238] <= 12'h010;
rommem[ 9239] <= 12'h039;
rommem[ 9240] <= 12'h0BD;
rommem[ 9241] <= 12'hFFE;
rommem[ 9242] <= 12'hEE1;
rommem[ 9243] <= 12'h0E6;
rommem[ 9244] <= 12'h800;
rommem[ 9245] <= 12'h0C1;
rommem[ 9246] <= 12'h004;
rommem[ 9247] <= 12'h026;
rommem[ 9248] <= 12'hFF7;
rommem[ 9249] <= 12'h039;
rommem[ 9250] <= 12'h00D;
rommem[ 9251] <= 12'h00A;
rommem[ 9252] <= 12'h004;
rommem[ 9253] <= 12'h08D;
rommem[ 9254] <= 12'h007;
rommem[ 9255] <= 12'h01E;
rommem[ 9256] <= 12'h001;
rommem[ 9257] <= 12'h08D;
rommem[ 9258] <= 12'h003;
rommem[ 9259] <= 12'h01E;
rommem[ 9260] <= 12'h001;
rommem[ 9261] <= 12'h039;
rommem[ 9165] <= 12'h04C;
rommem[ 9166] <= 12'h097;
rommem[ 9167] <= 12'h110;
rommem[ 9168] <= 12'h081;
rommem[ 9169] <= 12'h020;
rommem[ 9170] <= 12'h025;
rommem[ 9171] <= 12'h005;
rommem[ 9172] <= 12'h04A;
rommem[ 9173] <= 12'h097;
rommem[ 9174] <= 12'h110;
rommem[ 9175] <= 12'h08D;
rommem[ 9176] <= 12'hE8F;
rommem[ 9177] <= 12'h08D;
rommem[ 9178] <= 12'hEF4;
rommem[ 9179] <= 12'h035;
rommem[ 9180] <= 12'h096;
rommem[ 9181] <= 12'h034;
rommem[ 9182] <= 12'h016;
rommem[ 9183] <= 12'h01F;
rommem[ 9184] <= 12'h001;
rommem[ 9185] <= 12'h015;
rommem[ 9186] <= 12'h0B6;
rommem[ 9187] <= 12'hFFF;
rommem[ 9188] <= 12'hFFF;
rommem[ 9189] <= 12'hFE0;
rommem[ 9190] <= 12'h081;
rommem[ 9191] <= 12'h020;
rommem[ 9192] <= 12'h027;
rommem[ 9193] <= 12'h005;
rommem[ 9194] <= 12'h0B6;
rommem[ 9195] <= 12'hEF0;
rommem[ 9196] <= 12'h001;
rommem[ 9197] <= 12'h027;
rommem[ 9198] <= 12'hFFB;
rommem[ 9199] <= 12'h0E6;
rommem[ 9200] <= 12'h800;
rommem[ 9201] <= 12'h027;
rommem[ 9202] <= 12'h005;
rommem[ 9203] <= 12'h017;
rommem[ 9204] <= 12'h000;
rommem[ 9205] <= 12'hDD3;
rommem[ 9206] <= 12'h020;
rommem[ 9207] <= 12'hFF7;
rommem[ 9208] <= 12'h07F;
rommem[ 9209] <= 12'hEF0;
rommem[ 9210] <= 12'h001;
rommem[ 9211] <= 12'h035;
rommem[ 9212] <= 12'h096;
rommem[ 9213] <= 12'h034;
rommem[ 9214] <= 12'h006;
rommem[ 9215] <= 12'h08D;
rommem[ 9216] <= 12'hFDC;
rommem[ 9217] <= 12'h0C6;
rommem[ 9218] <= 12'h00D;
rommem[ 9219] <= 12'h017;
rommem[ 9220] <= 12'h000;
rommem[ 9221] <= 12'hDC3;
rommem[ 9222] <= 12'h0C6;
rommem[ 9223] <= 12'h00A;
rommem[ 9224] <= 12'h017;
rommem[ 9225] <= 12'h000;
rommem[ 9226] <= 12'hDBE;
rommem[ 9227] <= 12'h035;
rommem[ 9228] <= 12'h086;
rommem[ 9229] <= 12'h08D;
rommem[ 9230] <= 12'h002;
rommem[ 9231] <= 12'h020;
rommem[ 9232] <= 12'h00D;
rommem[ 9233] <= 12'h034;
rommem[ 9234] <= 12'h010;
rommem[ 9235] <= 12'h08E;
rommem[ 9236] <= 12'hFFE;
rommem[ 9237] <= 12'h425;
rommem[ 9238] <= 12'h08D;
rommem[ 9239] <= 12'h006;
rommem[ 9240] <= 12'h035;
rommem[ 9241] <= 12'h010;
rommem[ 9242] <= 12'h039;
rommem[ 9243] <= 12'h0BD;
rommem[ 9244] <= 12'hFFF;
rommem[ 9245] <= 12'h1C9;
rommem[ 9246] <= 12'h0E6;
rommem[ 9247] <= 12'h800;
rommem[ 9248] <= 12'h0C1;
rommem[ 9249] <= 12'h004;
rommem[ 9250] <= 12'h026;
rommem[ 9251] <= 12'hFF7;
rommem[ 9252] <= 12'h039;
rommem[ 9253] <= 12'h00D;
rommem[ 9254] <= 12'h00A;
rommem[ 9255] <= 12'h004;
rommem[ 9256] <= 12'h08D;
rommem[ 9257] <= 12'h007;
rommem[ 9258] <= 12'h01E;
rommem[ 9259] <= 12'h001;
rommem[ 9260] <= 12'h08D;
rommem[ 9261] <= 12'h003;
rommem[ 9262] <= 12'h01E;
rommem[ 9263] <= 12'h089;
rommem[ 9264] <= 12'h08D;
rommem[ 9265] <= 12'h005;
rommem[ 9266] <= 12'h01E;
rommem[ 9267] <= 12'h089;
rommem[ 9268] <= 12'h08D;
rommem[ 9269] <= 12'h001;
rommem[ 9270] <= 12'h039;
rommem[ 9271] <= 12'h034;
rommem[ 9272] <= 12'h004;
rommem[ 9273] <= 12'h054;
rommem[ 9274] <= 12'h054;
rommem[ 9275] <= 12'h054;
rommem[ 9263] <= 12'h001;
rommem[ 9264] <= 12'h039;
rommem[ 9265] <= 12'h01E;
rommem[ 9266] <= 12'h089;
rommem[ 9267] <= 12'h08D;
rommem[ 9268] <= 12'h005;
rommem[ 9269] <= 12'h01E;
rommem[ 9270] <= 12'h089;
rommem[ 9271] <= 12'h08D;
rommem[ 9272] <= 12'h001;
rommem[ 9273] <= 12'h039;
rommem[ 9274] <= 12'h034;
rommem[ 9275] <= 12'h004;
rommem[ 9276] <= 12'h054;
rommem[ 9277] <= 12'h054;
rommem[ 9278] <= 12'h054;
rommem[ 9279] <= 12'h054;
rommem[ 9280] <= 12'h054;
rommem[ 9281] <= 12'h08D;
rommem[ 9282] <= 12'h00C;
rommem[ 9283] <= 12'h035;
rommem[ 9284] <= 12'h004;
rommem[ 9285] <= 12'h034;
rommem[ 9286] <= 12'h004;
rommem[ 9287] <= 12'h054;
rommem[ 9288] <= 12'h054;
rommem[ 9289] <= 12'h054;
rommem[ 9281] <= 12'h054;
rommem[ 9282] <= 12'h054;
rommem[ 9283] <= 12'h054;
rommem[ 9284] <= 12'h08D;
rommem[ 9285] <= 12'h00C;
rommem[ 9286] <= 12'h035;
rommem[ 9287] <= 12'h004;
rommem[ 9288] <= 12'h034;
rommem[ 9289] <= 12'h004;
rommem[ 9290] <= 12'h054;
rommem[ 9291] <= 12'h08D;
rommem[ 9292] <= 12'h002;
rommem[ 9293] <= 12'h035;
rommem[ 9294] <= 12'h004;
rommem[ 9295] <= 12'h034;
rommem[ 9296] <= 12'h004;
rommem[ 9297] <= 12'h0C4;
rommem[ 9298] <= 12'h00F;
rommem[ 9299] <= 12'h0C1;
rommem[ 9300] <= 12'h00A;
rommem[ 9301] <= 12'h025;
rommem[ 9302] <= 12'h007;
rommem[ 9303] <= 12'h0CB;
rommem[ 9304] <= 12'h037;
rommem[ 9305] <= 12'h017;
rommem[ 9306] <= 12'h000;
rommem[ 9307] <= 12'hA85;
rommem[ 9308] <= 12'h035;
rommem[ 9309] <= 12'h084;
rommem[ 9310] <= 12'h0CB;
rommem[ 9311] <= 12'h030;
rommem[ 9312] <= 12'h017;
rommem[ 9313] <= 12'h000;
rommem[ 9314] <= 12'hA7E;
rommem[ 9315] <= 12'h035;
rommem[ 9316] <= 12'h084;
rommem[ 9317] <= 12'h0CC;
rommem[ 9318] <= 12'h061;
rommem[ 9319] <= 12'hA80;
rommem[ 9320] <= 12'h015;
rommem[ 9321] <= 12'h0F7;
rommem[ 9322] <= 12'hFFF;
rommem[ 9323] <= 12'hE60;
rommem[ 9324] <= 12'h014;
rommem[ 9325] <= 12'h015;
rommem[ 9326] <= 12'h0B7;
rommem[ 9327] <= 12'hFFF;
rommem[ 9328] <= 12'hE60;
rommem[ 9329] <= 12'h015;
rommem[ 9330] <= 12'h015;
rommem[ 9331] <= 12'h07F;
rommem[ 9332] <= 12'hFFF;
rommem[ 9333] <= 12'hE60;
rommem[ 9334] <= 12'h012;
rommem[ 9335] <= 12'h015;
rommem[ 9336] <= 12'h07F;
rommem[ 9337] <= 12'hFFF;
rommem[ 9338] <= 12'hE60;
rommem[ 9339] <= 12'h013;
rommem[ 9340] <= 12'h015;
rommem[ 9341] <= 12'h0B6;
rommem[ 9342] <= 12'hFFF;
rommem[ 9343] <= 12'hE60;
rommem[ 9344] <= 12'h00B;
rommem[ 9345] <= 12'h08A;
rommem[ 9346] <= 12'h100;
rommem[ 9347] <= 12'h015;
rommem[ 9348] <= 12'h0B7;
rommem[ 9349] <= 12'hFFF;
rommem[ 9350] <= 12'hE60;
rommem[ 9351] <= 12'h00B;
rommem[ 9352] <= 12'h086;
rommem[ 9353] <= 12'h810;
rommem[ 9354] <= 12'h015;
rommem[ 9355] <= 12'h0B7;
rommem[ 9356] <= 12'hFFF;
rommem[ 9357] <= 12'hE60;
rommem[ 9358] <= 12'h00E;
rommem[ 9359] <= 12'h039;
rommem[ 9360] <= 12'h086;
rommem[ 9361] <= 12'h01F;
rommem[ 9362] <= 12'h0B7;
rommem[ 9363] <= 12'hFFC;
rommem[ 9364] <= 12'h011;
rommem[ 9291] <= 12'h054;
rommem[ 9292] <= 12'h054;
rommem[ 9293] <= 12'h054;
rommem[ 9294] <= 12'h08D;
rommem[ 9295] <= 12'h002;
rommem[ 9296] <= 12'h035;
rommem[ 9297] <= 12'h004;
rommem[ 9298] <= 12'h034;
rommem[ 9299] <= 12'h004;
rommem[ 9300] <= 12'h0C4;
rommem[ 9301] <= 12'h00F;
rommem[ 9302] <= 12'h0C1;
rommem[ 9303] <= 12'h00A;
rommem[ 9304] <= 12'h025;
rommem[ 9305] <= 12'h007;
rommem[ 9306] <= 12'h0CB;
rommem[ 9307] <= 12'h037;
rommem[ 9308] <= 12'h017;
rommem[ 9309] <= 12'h000;
rommem[ 9310] <= 12'hD6A;
rommem[ 9311] <= 12'h035;
rommem[ 9312] <= 12'h084;
rommem[ 9313] <= 12'h0CB;
rommem[ 9314] <= 12'h030;
rommem[ 9315] <= 12'h017;
rommem[ 9316] <= 12'h000;
rommem[ 9317] <= 12'hD63;
rommem[ 9318] <= 12'h035;
rommem[ 9319] <= 12'h084;
rommem[ 9320] <= 12'h0CC;
rommem[ 9321] <= 12'h061;
rommem[ 9322] <= 12'hA80;
rommem[ 9323] <= 12'h015;
rommem[ 9324] <= 12'h0F7;
rommem[ 9325] <= 12'hFFF;
rommem[ 9326] <= 12'hE60;
rommem[ 9327] <= 12'h014;
rommem[ 9328] <= 12'h015;
rommem[ 9329] <= 12'h0B7;
rommem[ 9330] <= 12'hFFF;
rommem[ 9331] <= 12'hE60;
rommem[ 9332] <= 12'h015;
rommem[ 9333] <= 12'h015;
rommem[ 9334] <= 12'h07F;
rommem[ 9335] <= 12'hFFF;
rommem[ 9336] <= 12'hE60;
rommem[ 9337] <= 12'h012;
rommem[ 9338] <= 12'h015;
rommem[ 9339] <= 12'h07F;
rommem[ 9340] <= 12'hFFF;
rommem[ 9341] <= 12'hE60;
rommem[ 9342] <= 12'h013;
rommem[ 9343] <= 12'h015;
rommem[ 9344] <= 12'h0B6;
rommem[ 9345] <= 12'hFFF;
rommem[ 9346] <= 12'hE60;
rommem[ 9347] <= 12'h00B;
rommem[ 9348] <= 12'h08A;
rommem[ 9349] <= 12'h100;
rommem[ 9350] <= 12'h015;
rommem[ 9351] <= 12'h0B7;
rommem[ 9352] <= 12'hFFF;
rommem[ 9353] <= 12'hE60;
rommem[ 9354] <= 12'h00B;
rommem[ 9355] <= 12'h086;
rommem[ 9356] <= 12'h880;
rommem[ 9357] <= 12'h015;
rommem[ 9358] <= 12'h0B7;
rommem[ 9359] <= 12'hFFF;
rommem[ 9360] <= 12'hE60;
rommem[ 9361] <= 12'h00E;
rommem[ 9362] <= 12'h039;
rommem[ 9363] <= 12'h086;
rommem[ 9364] <= 12'h01F;
rommem[ 9365] <= 12'h015;
rommem[ 9366] <= 12'h0B7;
rommem[ 9367] <= 12'hFFF;
1300,240 → 1300,288
rommem[ 9370] <= 12'h015;
rommem[ 9371] <= 12'h0B6;
rommem[ 9372] <= 12'hFFF;
rommem[ 9373] <= 12'hE60;
rommem[ 9374] <= 12'h00D;
rommem[ 9375] <= 12'h02A;
rommem[ 9376] <= 12'h011;
rommem[ 9377] <= 12'h085;
rommem[ 9378] <= 12'h080;
rommem[ 9379] <= 12'h027;
rommem[ 9380] <= 12'h00D;
rommem[ 9381] <= 12'h015;
rommem[ 9382] <= 12'h07F;
rommem[ 9383] <= 12'hFFF;
rommem[ 9384] <= 12'hE60;
rommem[ 9385] <= 12'h012;
rommem[ 9386] <= 12'h015;
rommem[ 9387] <= 12'h07F;
rommem[ 9388] <= 12'hFFF;
rommem[ 9389] <= 12'hE60;
rommem[ 9390] <= 12'h013;
rommem[ 9391] <= 12'h07C;
rommem[ 9392] <= 12'hE00;
rommem[ 9393] <= 12'h037;
rommem[ 9394] <= 12'h039;
rommem[ 9395] <= 12'h034;
rommem[ 9396] <= 12'h004;
rommem[ 9397] <= 12'h0C6;
rommem[ 9398] <= 12'h004;
rommem[ 9399] <= 12'h0E7;
rommem[ 9400] <= 12'h804;
rommem[ 9401] <= 12'h06F;
rommem[ 9402] <= 12'h001;
rommem[ 9403] <= 12'h035;
rommem[ 9404] <= 12'h084;
rommem[ 9405] <= 12'h034;
rommem[ 9406] <= 12'h004;
rommem[ 9407] <= 12'h0E6;
rommem[ 9408] <= 12'h004;
rommem[ 9409] <= 12'h0C5;
rommem[ 9410] <= 12'h001;
rommem[ 9411] <= 12'h026;
rommem[ 9412] <= 12'hFFA;
rommem[ 9413] <= 12'h035;
rommem[ 9414] <= 12'h084;
rommem[ 9415] <= 12'h0E7;
rommem[ 9416] <= 12'h003;
rommem[ 9417] <= 12'h0A7;
rommem[ 9418] <= 12'h004;
rommem[ 9419] <= 12'h08D;
rommem[ 9420] <= 12'hFF0;
rommem[ 9421] <= 12'h0E6;
rommem[ 9422] <= 12'h004;
rommem[ 9423] <= 12'h039;
rommem[ 9424] <= 12'h034;
rommem[ 9425] <= 12'h006;
rommem[ 9426] <= 12'h034;
rommem[ 9427] <= 12'h006;
rommem[ 9428] <= 12'h0C6;
rommem[ 9429] <= 12'h001;
rommem[ 9430] <= 12'h0E7;
rommem[ 9431] <= 12'h002;
rommem[ 9432] <= 12'h0C6;
rommem[ 9433] <= 12'h076;
rommem[ 9434] <= 12'h086;
rommem[ 9435] <= 12'h090;
rommem[ 9436] <= 12'h08D;
rommem[ 9437] <= 12'hFE9;
rommem[ 9438] <= 12'h08D;
rommem[ 9439] <= 12'h00A;
rommem[ 9440] <= 12'h035;
rommem[ 9441] <= 12'h006;
rommem[ 9442] <= 12'h086;
rommem[ 9443] <= 12'h050;
rommem[ 9444] <= 12'h08D;
rommem[ 9445] <= 12'hFE1;
rommem[ 9446] <= 12'h08D;
rommem[ 9447] <= 12'h002;
rommem[ 9448] <= 12'h035;
rommem[ 9449] <= 12'h086;
rommem[ 9450] <= 12'h034;
rommem[ 9451] <= 12'h004;
rommem[ 9452] <= 12'h0E6;
rommem[ 9453] <= 12'h004;
rommem[ 9454] <= 12'h0C5;
rommem[ 9455] <= 12'h080;
rommem[ 9456] <= 12'h026;
rommem[ 9457] <= 12'hFFA;
rommem[ 9458] <= 12'h035;
rommem[ 9459] <= 12'h084;
rommem[ 9460] <= 12'h08E;
rommem[ 9461] <= 12'hE30;
rommem[ 9462] <= 12'h500;
rommem[ 9463] <= 12'h18E;
rommem[ 9464] <= 12'h007;
rommem[ 9465] <= 12'hFC0;
rommem[ 9466] <= 12'h0C6;
rommem[ 9467] <= 12'h080;
rommem[ 9468] <= 12'h0E7;
rommem[ 9469] <= 12'h002;
rommem[ 9470] <= 12'h0CC;
rommem[ 9471] <= 12'h090;
rommem[ 9472] <= 12'h0DE;
rommem[ 9473] <= 12'h08D;
rommem[ 9474] <= 12'hFC4;
rommem[ 9475] <= 12'h0C5;
rommem[ 9476] <= 12'h080;
rommem[ 9477] <= 12'h026;
rommem[ 9478] <= 12'h03C;
rommem[ 9479] <= 12'h0CC;
rommem[ 9480] <= 12'h010;
rommem[ 9481] <= 12'h000;
rommem[ 9482] <= 12'h08D;
rommem[ 9483] <= 12'hFBB;
rommem[ 9484] <= 12'h0C5;
rommem[ 9485] <= 12'h080;
rommem[ 9486] <= 12'h026;
rommem[ 9487] <= 12'h033;
rommem[ 9488] <= 12'h0CC;
rommem[ 9489] <= 12'h090;
rommem[ 9490] <= 12'h0DF;
rommem[ 9491] <= 12'h08D;
rommem[ 9492] <= 12'hFB2;
rommem[ 9493] <= 12'h0C5;
rommem[ 9494] <= 12'h080;
rommem[ 9495] <= 12'h026;
rommem[ 9496] <= 12'h02A;
rommem[ 9497] <= 12'h05F;
rommem[ 9498] <= 12'h086;
rommem[ 9499] <= 12'h020;
rommem[ 9500] <= 12'h0A7;
rommem[ 9373] <= 12'hE3F;
rommem[ 9374] <= 12'h0FF;
rommem[ 9375] <= 12'h027;
rommem[ 9376] <= 12'h041;
rommem[ 9377] <= 12'h015;
rommem[ 9378] <= 12'h07F;
rommem[ 9379] <= 12'hFFF;
rommem[ 9380] <= 12'hE3F;
rommem[ 9381] <= 12'h0FF;
rommem[ 9382] <= 12'h086;
rommem[ 9383] <= 12'h01F;
rommem[ 9384] <= 12'h0B7;
rommem[ 9385] <= 12'hFFC;
rommem[ 9386] <= 12'h011;
rommem[ 9387] <= 12'h015;
rommem[ 9388] <= 12'h07F;
rommem[ 9389] <= 12'hFFF;
rommem[ 9390] <= 12'hE60;
rommem[ 9391] <= 12'h012;
rommem[ 9392] <= 12'h015;
rommem[ 9393] <= 12'h07F;
rommem[ 9394] <= 12'hFFF;
rommem[ 9395] <= 12'hE60;
rommem[ 9396] <= 12'h013;
rommem[ 9397] <= 12'h086;
rommem[ 9398] <= 12'h01F;
rommem[ 9399] <= 12'h015;
rommem[ 9400] <= 12'h0B7;
rommem[ 9401] <= 12'hFFF;
rommem[ 9402] <= 12'hE3F;
rommem[ 9403] <= 12'h010;
rommem[ 9404] <= 12'h015;
rommem[ 9405] <= 12'h07F;
rommem[ 9406] <= 12'hFFF;
rommem[ 9407] <= 12'hE3F;
rommem[ 9408] <= 12'h0FF;
rommem[ 9409] <= 12'h07C;
rommem[ 9410] <= 12'hE00;
rommem[ 9411] <= 12'h03F;
rommem[ 9412] <= 12'h0FC;
rommem[ 9413] <= 12'hFFC;
rommem[ 9414] <= 12'h016;
rommem[ 9415] <= 12'h0C3;
rommem[ 9416] <= 12'h000;
rommem[ 9417] <= 12'h00A;
rommem[ 9418] <= 12'h0FD;
rommem[ 9419] <= 12'hFFC;
rommem[ 9420] <= 12'h016;
rommem[ 9421] <= 12'h0FC;
rommem[ 9422] <= 12'hFFC;
rommem[ 9423] <= 12'h014;
rommem[ 9424] <= 12'h0C9;
rommem[ 9425] <= 12'h000;
rommem[ 9426] <= 12'h0F7;
rommem[ 9427] <= 12'hFFC;
rommem[ 9428] <= 12'h015;
rommem[ 9429] <= 12'h089;
rommem[ 9430] <= 12'h000;
rommem[ 9431] <= 12'h0B7;
rommem[ 9432] <= 12'hFFC;
rommem[ 9433] <= 12'h014;
rommem[ 9434] <= 12'h0F6;
rommem[ 9435] <= 12'hFFC;
rommem[ 9436] <= 12'h020;
rommem[ 9437] <= 12'h0CB;
rommem[ 9438] <= 12'h004;
rommem[ 9439] <= 12'h0F7;
rommem[ 9440] <= 12'hFFC;
rommem[ 9441] <= 12'h020;
rommem[ 9442] <= 12'h039;
rommem[ 9443] <= 12'h034;
rommem[ 9444] <= 12'h004;
rommem[ 9445] <= 12'h0C6;
rommem[ 9446] <= 12'h004;
rommem[ 9447] <= 12'h0E7;
rommem[ 9448] <= 12'h804;
rommem[ 9449] <= 12'h06F;
rommem[ 9450] <= 12'h001;
rommem[ 9451] <= 12'h035;
rommem[ 9452] <= 12'h084;
rommem[ 9453] <= 12'h034;
rommem[ 9454] <= 12'h004;
rommem[ 9455] <= 12'h0E6;
rommem[ 9456] <= 12'h004;
rommem[ 9457] <= 12'h0C5;
rommem[ 9458] <= 12'h001;
rommem[ 9459] <= 12'h026;
rommem[ 9460] <= 12'hFFA;
rommem[ 9461] <= 12'h035;
rommem[ 9462] <= 12'h084;
rommem[ 9463] <= 12'h0E7;
rommem[ 9464] <= 12'h003;
rommem[ 9465] <= 12'h0A7;
rommem[ 9466] <= 12'h004;
rommem[ 9467] <= 12'h08D;
rommem[ 9468] <= 12'hFF0;
rommem[ 9469] <= 12'h0E6;
rommem[ 9470] <= 12'h004;
rommem[ 9471] <= 12'h039;
rommem[ 9472] <= 12'h034;
rommem[ 9473] <= 12'h006;
rommem[ 9474] <= 12'h034;
rommem[ 9475] <= 12'h006;
rommem[ 9476] <= 12'h0C6;
rommem[ 9477] <= 12'h001;
rommem[ 9478] <= 12'h0E7;
rommem[ 9479] <= 12'h002;
rommem[ 9480] <= 12'h0C6;
rommem[ 9481] <= 12'h076;
rommem[ 9482] <= 12'h086;
rommem[ 9483] <= 12'h090;
rommem[ 9484] <= 12'h08D;
rommem[ 9485] <= 12'hFE9;
rommem[ 9486] <= 12'h08D;
rommem[ 9487] <= 12'h00A;
rommem[ 9488] <= 12'h035;
rommem[ 9489] <= 12'h006;
rommem[ 9490] <= 12'h086;
rommem[ 9491] <= 12'h050;
rommem[ 9492] <= 12'h08D;
rommem[ 9493] <= 12'hFE1;
rommem[ 9494] <= 12'h08D;
rommem[ 9495] <= 12'h002;
rommem[ 9496] <= 12'h035;
rommem[ 9497] <= 12'h086;
rommem[ 9498] <= 12'h034;
rommem[ 9499] <= 12'h004;
rommem[ 9500] <= 12'h0E6;
rommem[ 9501] <= 12'h004;
rommem[ 9502] <= 12'h08D;
rommem[ 9503] <= 12'hF9D;
rommem[ 9504] <= 12'h08D;
rommem[ 9505] <= 12'hFC8;
rommem[ 9506] <= 12'h0A6;
rommem[ 9507] <= 12'h004;
rommem[ 9508] <= 12'h085;
rommem[ 9509] <= 12'h080;
rommem[ 9510] <= 12'h026;
rommem[ 9511] <= 12'h01B;
rommem[ 9512] <= 12'h0A6;
rommem[ 9513] <= 12'h003;
rommem[ 9514] <= 12'h0A7;
rommem[ 9515] <= 12'hA07;
rommem[ 9516] <= 12'h05C;
rommem[ 9517] <= 12'h0C1;
rommem[ 9518] <= 12'h05F;
rommem[ 9519] <= 12'h025;
rommem[ 9520] <= 12'hFE9;
rommem[ 9521] <= 12'h086;
rommem[ 9522] <= 12'h068;
rommem[ 9523] <= 12'h0A7;
rommem[ 9524] <= 12'h004;
rommem[ 9525] <= 12'h08D;
rommem[ 9526] <= 12'hF86;
rommem[ 9527] <= 12'h0A6;
rommem[ 9528] <= 12'h004;
rommem[ 9529] <= 12'h085;
rommem[ 9530] <= 12'h080;
rommem[ 9531] <= 12'h026;
rommem[ 9532] <= 12'h006;
rommem[ 9533] <= 12'h0A6;
rommem[ 9534] <= 12'h003;
rommem[ 9535] <= 12'h0A7;
rommem[ 9536] <= 12'hA07;
rommem[ 9537] <= 12'h04F;
rommem[ 9538] <= 12'h05F;
rommem[ 9539] <= 12'h06F;
rommem[ 9540] <= 12'h002;
rommem[ 9541] <= 12'h04F;
rommem[ 9542] <= 12'h039;
rommem[ 9543] <= 12'h08E;
rommem[ 9544] <= 12'hE30;
rommem[ 9545] <= 12'h500;
rommem[ 9546] <= 12'h18E;
rommem[ 9547] <= 12'h007;
rommem[ 9548] <= 12'hFC0;
rommem[ 9549] <= 12'h0C6;
rommem[ 9550] <= 12'h080;
rommem[ 9551] <= 12'h0E7;
rommem[ 9552] <= 12'h002;
rommem[ 9553] <= 12'h0CC;
rommem[ 9554] <= 12'h090;
rommem[ 9555] <= 12'h0DE;
rommem[ 9556] <= 12'h08D;
rommem[ 9557] <= 12'hF71;
rommem[ 9558] <= 12'h0C5;
rommem[ 9559] <= 12'h080;
rommem[ 9560] <= 12'h026;
rommem[ 9561] <= 12'hFE9;
rommem[ 9562] <= 12'h0CC;
rommem[ 9563] <= 12'h010;
rommem[ 9564] <= 12'h000;
rommem[ 9565] <= 12'h08D;
rommem[ 9566] <= 12'hF68;
rommem[ 9567] <= 12'h0C5;
rommem[ 9568] <= 12'h080;
rommem[ 9569] <= 12'h026;
rommem[ 9570] <= 12'hFE0;
rommem[ 9571] <= 12'h0C6;
rommem[ 9572] <= 12'h000;
rommem[ 9573] <= 12'h034;
rommem[ 9574] <= 12'h004;
rommem[ 9575] <= 12'h0E6;
rommem[ 9576] <= 12'hA05;
rommem[ 9577] <= 12'h086;
rommem[ 9578] <= 12'h010;
rommem[ 9579] <= 12'h08D;
rommem[ 9580] <= 12'hF5A;
rommem[ 9581] <= 12'h0C5;
rommem[ 9582] <= 12'h080;
rommem[ 9583] <= 12'h035;
rommem[ 9584] <= 12'h004;
rommem[ 9585] <= 12'h026;
rommem[ 9586] <= 12'hFD0;
rommem[ 9587] <= 12'h05C;
rommem[ 9588] <= 12'h0C1;
rommem[ 9589] <= 12'h05F;
rommem[ 9590] <= 12'h025;
rommem[ 9591] <= 12'hFED;
rommem[ 9592] <= 12'h0E6;
rommem[ 9593] <= 12'hA05;
rommem[ 9594] <= 12'h086;
rommem[ 9595] <= 12'h050;
rommem[ 9596] <= 12'h08D;
rommem[ 9597] <= 12'hF49;
rommem[ 9598] <= 12'h0C5;
rommem[ 9599] <= 12'h080;
rommem[ 9600] <= 12'h026;
rommem[ 9601] <= 12'hFC1;
rommem[ 9602] <= 12'h04F;
rommem[ 9603] <= 12'h05F;
rommem[ 9604] <= 12'h06F;
rommem[ 9605] <= 12'h002;
rommem[ 9606] <= 12'h039;
rommem[ 9502] <= 12'h0C5;
rommem[ 9503] <= 12'h080;
rommem[ 9504] <= 12'h026;
rommem[ 9505] <= 12'hFFA;
rommem[ 9506] <= 12'h035;
rommem[ 9507] <= 12'h084;
rommem[ 9508] <= 12'h08E;
rommem[ 9509] <= 12'hE30;
rommem[ 9510] <= 12'h500;
rommem[ 9511] <= 12'h18E;
rommem[ 9512] <= 12'h007;
rommem[ 9513] <= 12'hFC0;
rommem[ 9514] <= 12'h0C6;
rommem[ 9515] <= 12'h080;
rommem[ 9516] <= 12'h0E7;
rommem[ 9517] <= 12'h002;
rommem[ 9518] <= 12'h0CC;
rommem[ 9519] <= 12'h090;
rommem[ 9520] <= 12'h0DE;
rommem[ 9521] <= 12'h08D;
rommem[ 9522] <= 12'hFC4;
rommem[ 9523] <= 12'h0C5;
rommem[ 9524] <= 12'h080;
rommem[ 9525] <= 12'h026;
rommem[ 9526] <= 12'h03C;
rommem[ 9527] <= 12'h0CC;
rommem[ 9528] <= 12'h010;
rommem[ 9529] <= 12'h000;
rommem[ 9530] <= 12'h08D;
rommem[ 9531] <= 12'hFBB;
rommem[ 9532] <= 12'h0C5;
rommem[ 9533] <= 12'h080;
rommem[ 9534] <= 12'h026;
rommem[ 9535] <= 12'h033;
rommem[ 9536] <= 12'h0CC;
rommem[ 9537] <= 12'h090;
rommem[ 9538] <= 12'h0DF;
rommem[ 9539] <= 12'h08D;
rommem[ 9540] <= 12'hFB2;
rommem[ 9541] <= 12'h0C5;
rommem[ 9542] <= 12'h080;
rommem[ 9543] <= 12'h026;
rommem[ 9544] <= 12'h02A;
rommem[ 9545] <= 12'h05F;
rommem[ 9546] <= 12'h086;
rommem[ 9547] <= 12'h020;
rommem[ 9548] <= 12'h0A7;
rommem[ 9549] <= 12'h004;
rommem[ 9550] <= 12'h08D;
rommem[ 9551] <= 12'hF9D;
rommem[ 9552] <= 12'h08D;
rommem[ 9553] <= 12'hFC8;
rommem[ 9554] <= 12'h0A6;
rommem[ 9555] <= 12'h004;
rommem[ 9556] <= 12'h085;
rommem[ 9557] <= 12'h080;
rommem[ 9558] <= 12'h026;
rommem[ 9559] <= 12'h01B;
rommem[ 9560] <= 12'h0A6;
rommem[ 9561] <= 12'h003;
rommem[ 9562] <= 12'h0A7;
rommem[ 9563] <= 12'hA07;
rommem[ 9564] <= 12'h05C;
rommem[ 9565] <= 12'h0C1;
rommem[ 9566] <= 12'h05F;
rommem[ 9567] <= 12'h025;
rommem[ 9568] <= 12'hFE9;
rommem[ 9569] <= 12'h086;
rommem[ 9570] <= 12'h068;
rommem[ 9571] <= 12'h0A7;
rommem[ 9572] <= 12'h004;
rommem[ 9573] <= 12'h08D;
rommem[ 9574] <= 12'hF86;
rommem[ 9575] <= 12'h0A6;
rommem[ 9576] <= 12'h004;
rommem[ 9577] <= 12'h085;
rommem[ 9578] <= 12'h080;
rommem[ 9579] <= 12'h026;
rommem[ 9580] <= 12'h006;
rommem[ 9581] <= 12'h0A6;
rommem[ 9582] <= 12'h003;
rommem[ 9583] <= 12'h0A7;
rommem[ 9584] <= 12'hA07;
rommem[ 9585] <= 12'h04F;
rommem[ 9586] <= 12'h05F;
rommem[ 9587] <= 12'h06F;
rommem[ 9588] <= 12'h002;
rommem[ 9589] <= 12'h04F;
rommem[ 9590] <= 12'h039;
rommem[ 9591] <= 12'h08E;
rommem[ 9592] <= 12'hE30;
rommem[ 9593] <= 12'h500;
rommem[ 9594] <= 12'h18E;
rommem[ 9595] <= 12'h007;
rommem[ 9596] <= 12'hFC0;
rommem[ 9597] <= 12'h0C6;
rommem[ 9598] <= 12'h080;
rommem[ 9599] <= 12'h0E7;
rommem[ 9600] <= 12'h002;
rommem[ 9601] <= 12'h0CC;
rommem[ 9602] <= 12'h090;
rommem[ 9603] <= 12'h0DE;
rommem[ 9604] <= 12'h08D;
rommem[ 9605] <= 12'hF71;
rommem[ 9606] <= 12'h0C5;
rommem[ 9607] <= 12'h080;
rommem[ 9608] <= 12'h026;
rommem[ 9609] <= 12'hFE9;
rommem[ 9610] <= 12'h0CC;
rommem[ 9611] <= 12'h010;
rommem[ 9612] <= 12'h000;
rommem[ 9613] <= 12'h08D;
rommem[ 9614] <= 12'hF68;
rommem[ 9615] <= 12'h0C5;
rommem[ 9616] <= 12'h080;
rommem[ 9617] <= 12'h026;
rommem[ 9618] <= 12'hFE0;
rommem[ 9619] <= 12'h0C6;
rommem[ 9620] <= 12'h000;
rommem[ 9621] <= 12'h034;
rommem[ 9622] <= 12'h004;
rommem[ 9623] <= 12'h0E6;
rommem[ 9624] <= 12'hA05;
rommem[ 9625] <= 12'h086;
rommem[ 9626] <= 12'h010;
rommem[ 9627] <= 12'h08D;
rommem[ 9628] <= 12'hF5A;
rommem[ 9629] <= 12'h0C5;
rommem[ 9630] <= 12'h080;
rommem[ 9631] <= 12'h035;
rommem[ 9632] <= 12'h004;
rommem[ 9633] <= 12'h026;
rommem[ 9634] <= 12'hFD0;
rommem[ 9635] <= 12'h05C;
rommem[ 9636] <= 12'h0C1;
rommem[ 9637] <= 12'h05F;
rommem[ 9638] <= 12'h025;
rommem[ 9639] <= 12'hFED;
rommem[ 9640] <= 12'h0E6;
rommem[ 9641] <= 12'hA05;
rommem[ 9642] <= 12'h086;
rommem[ 9643] <= 12'h050;
rommem[ 9644] <= 12'h08D;
rommem[ 9645] <= 12'hF49;
rommem[ 9646] <= 12'h0C5;
rommem[ 9647] <= 12'h080;
rommem[ 9648] <= 12'h026;
rommem[ 9649] <= 12'hFC1;
rommem[ 9650] <= 12'h04F;
rommem[ 9651] <= 12'h05F;
rommem[ 9652] <= 12'h06F;
rommem[ 9653] <= 12'h002;
rommem[ 9654] <= 12'h039;
rommem[ 9728] <= 12'h02E;
rommem[ 9729] <= 12'h0A9;
rommem[ 9730] <= 12'h02E;
2569,7 → 2617,7
rommem[10760] <= 12'hA2E;
rommem[10761] <= 12'h017;
rommem[10762] <= 12'hFFF;
rommem[10763] <= 12'h9EE;
rommem[10763] <= 12'h9F1;
rommem[10764] <= 12'h020;
rommem[10765] <= 12'h014;
rommem[10766] <= 12'h0C6;
3053,3145 → 3101,4243
rommem[11244] <= 12'h039;
rommem[11245] <= 12'h039;
rommem[11246] <= 12'h039;
rommem[11247] <= 12'h04F;
rommem[11248] <= 12'h05F;
rommem[11249] <= 12'h0DD;
rommem[11250] <= 12'h130;
rommem[11251] <= 12'h0DD;
rommem[11252] <= 12'h132;
rommem[11253] <= 12'h0DD;
rommem[11254] <= 12'h135;
rommem[11255] <= 12'h0DD;
rommem[11256] <= 12'h137;
rommem[11247] <= 12'h034;
rommem[11248] <= 12'h008;
rommem[11249] <= 12'h086;
rommem[11250] <= 12'hFFC;
rommem[11251] <= 12'h01F;
rommem[11252] <= 12'h08B;
rommem[11253] <= 12'h04F;
rommem[11254] <= 12'h05F;
rommem[11255] <= 12'h00F;
rommem[11256] <= 12'h015;
rommem[11257] <= 12'h00F;
rommem[11258] <= 12'h139;
rommem[11258] <= 12'h016;
rommem[11259] <= 12'h00F;
rommem[11260] <= 12'h140;
rommem[11261] <= 12'h015;
rommem[11262] <= 12'h0B6;
rommem[11263] <= 12'hFFF;
rommem[11264] <= 12'hFFF;
rommem[11265] <= 12'hFE0;
rommem[11266] <= 12'h0B1;
rommem[11267] <= 12'hFFC;
rommem[11268] <= 12'h010;
rommem[11269] <= 12'h026;
rommem[11270] <= 12'hFFB;
rommem[11271] <= 12'h0C6;
rommem[11272] <= 12'h009;
rommem[11273] <= 12'h015;
rommem[11274] <= 12'h0F7;
rommem[11275] <= 12'hFFF;
rommem[11276] <= 12'hE30;
rommem[11277] <= 12'h102;
rommem[11278] <= 12'h0C6;
rommem[11279] <= 12'h01E;
rommem[11280] <= 12'h015;
rommem[11281] <= 12'h0F7;
rommem[11282] <= 12'hFFF;
rommem[11283] <= 12'hE30;
rommem[11284] <= 12'h103;
rommem[11285] <= 12'h0C6;
rommem[11286] <= 12'h0A6;
rommem[11287] <= 12'h015;
rommem[11288] <= 12'h0F7;
rommem[11289] <= 12'hFFF;
rommem[11290] <= 12'hE30;
rommem[11291] <= 12'h10B;
rommem[11292] <= 12'h039;
rommem[11293] <= 12'h034;
rommem[11294] <= 12'h030;
rommem[11295] <= 12'h18E;
rommem[11296] <= 12'h000;
rommem[11297] <= 12'h000;
rommem[11298] <= 12'h01A;
rommem[11299] <= 12'h010;
rommem[11300] <= 12'h08D;
rommem[11301] <= 12'h082;
rommem[11302] <= 12'h0C1;
rommem[11303] <= 12'h008;
rommem[11304] <= 12'h022;
rommem[11305] <= 12'h00C;
rommem[11306] <= 12'h0D6;
rommem[11307] <= 12'h139;
rommem[11308] <= 12'h026;
rommem[11309] <= 12'h008;
rommem[11310] <= 12'h0C6;
rommem[11311] <= 12'h011;
rommem[11312] <= 12'h00F;
rommem[11313] <= 12'h140;
rommem[11314] <= 12'h0D7;
rommem[11315] <= 12'h139;
rommem[11316] <= 12'h08D;
rommem[11317] <= 12'h052;
rommem[11318] <= 12'h0D6;
rommem[11319] <= 12'h131;
rommem[11320] <= 12'h0D1;
rommem[11321] <= 12'h133;
rommem[11322] <= 12'h027;
rommem[11323] <= 12'h00A;
rommem[11324] <= 12'h08E;
rommem[11325] <= 12'hBFF;
rommem[11326] <= 12'h000;
rommem[11327] <= 12'h04F;
rommem[11328] <= 12'h0E6;
rommem[11329] <= 12'h835;
rommem[11330] <= 12'h00C;
rommem[11331] <= 12'h131;
rommem[11332] <= 12'h020;
rommem[11333] <= 12'h003;
rommem[11334] <= 12'h0CC;
rommem[11335] <= 12'hFFF;
rommem[11336] <= 12'hFFF;
rommem[11337] <= 12'h01C;
rommem[11338] <= 12'h0EF;
rommem[11339] <= 12'h035;
rommem[11340] <= 12'h0B0;
rommem[11341] <= 12'h034;
rommem[11342] <= 12'h011;
rommem[11343] <= 12'h01A;
rommem[11344] <= 12'h010;
rommem[11345] <= 12'h0D6;
rommem[11346] <= 12'h131;
rommem[11347] <= 12'h0D1;
rommem[11348] <= 12'h133;
rommem[11349] <= 12'h027;
rommem[11350] <= 12'h008;
rommem[11351] <= 12'h08E;
rommem[11352] <= 12'hBFF;
rommem[11353] <= 12'h000;
rommem[11354] <= 12'h04F;
rommem[11355] <= 12'h0E6;
rommem[11356] <= 12'h815;
rommem[11357] <= 12'h020;
rommem[11358] <= 12'h003;
rommem[11359] <= 12'h0CC;
rommem[11360] <= 12'hFFF;
rommem[11361] <= 12'hFFF;
rommem[11362] <= 12'h035;
rommem[11363] <= 12'h091;
rommem[11364] <= 12'h015;
rommem[11365] <= 12'h0B6;
rommem[11366] <= 12'hFFF;
rommem[11367] <= 12'hFFF;
rommem[11368] <= 12'hFE0;
rommem[11369] <= 12'h0B1;
rommem[11370] <= 12'hFFC;
rommem[11371] <= 12'h010;
rommem[11372] <= 12'h026;
rommem[11373] <= 12'h014;
rommem[11374] <= 12'h01A;
rommem[11375] <= 12'h010;
rommem[11376] <= 12'h015;
rommem[11377] <= 12'h0F6;
rommem[11378] <= 12'hFFF;
rommem[11379] <= 12'hE30;
rommem[11380] <= 12'h101;
rommem[11381] <= 12'h0C5;
rommem[11382] <= 12'h008;
rommem[11383] <= 12'h027;
rommem[11384] <= 12'h009;
rommem[11385] <= 12'h04F;
rommem[11386] <= 12'h015;
rommem[11387] <= 12'h0F6;
rommem[11260] <= 12'h017;
rommem[11261] <= 12'h00F;
rommem[11262] <= 12'h018;
rommem[11263] <= 12'h00F;
rommem[11264] <= 12'h019;
rommem[11265] <= 12'h00F;
rommem[11266] <= 12'h01A;
rommem[11267] <= 12'h015;
rommem[11268] <= 12'h0B6;
rommem[11269] <= 12'hFFF;
rommem[11270] <= 12'hFFF;
rommem[11271] <= 12'hFE0;
rommem[11272] <= 12'h091;
rommem[11273] <= 12'h010;
rommem[11274] <= 12'h026;
rommem[11275] <= 12'hFFC;
rommem[11276] <= 12'h0C6;
rommem[11277] <= 12'h00B;
rommem[11278] <= 12'h015;
rommem[11279] <= 12'h0F7;
rommem[11280] <= 12'hFFF;
rommem[11281] <= 12'hE30;
rommem[11282] <= 12'h102;
rommem[11283] <= 12'h0C6;
rommem[11284] <= 12'h01E;
rommem[11285] <= 12'h015;
rommem[11286] <= 12'h0F7;
rommem[11287] <= 12'hFFF;
rommem[11288] <= 12'hE30;
rommem[11289] <= 12'h103;
rommem[11290] <= 12'h0C6;
rommem[11291] <= 12'h0AC;
rommem[11292] <= 12'h015;
rommem[11293] <= 12'h0F7;
rommem[11294] <= 12'hFFF;
rommem[11295] <= 12'hE30;
rommem[11296] <= 12'h10B;
rommem[11297] <= 12'h035;
rommem[11298] <= 12'h088;
rommem[11299] <= 12'h034;
rommem[11300] <= 12'h039;
rommem[11301] <= 12'h086;
rommem[11302] <= 12'hFFC;
rommem[11303] <= 12'h01F;
rommem[11304] <= 12'h08B;
rommem[11305] <= 12'h01A;
rommem[11306] <= 12'h010;
rommem[11307] <= 12'h08D;
rommem[11308] <= 12'h090;
rommem[11309] <= 12'h0C1;
rommem[11310] <= 12'h008;
rommem[11311] <= 12'h022;
rommem[11312] <= 12'h00C;
rommem[11313] <= 12'h0D6;
rommem[11314] <= 12'h019;
rommem[11315] <= 12'h026;
rommem[11316] <= 12'h008;
rommem[11317] <= 12'h0C6;
rommem[11318] <= 12'h011;
rommem[11319] <= 12'h00F;
rommem[11320] <= 12'h01A;
rommem[11321] <= 12'h0D7;
rommem[11322] <= 12'h019;
rommem[11323] <= 12'h08D;
rommem[11324] <= 12'h05D;
rommem[11325] <= 12'h0D6;
rommem[11326] <= 12'h015;
rommem[11327] <= 12'h0D1;
rommem[11328] <= 12'h016;
rommem[11329] <= 12'h027;
rommem[11330] <= 12'h00D;
rommem[11331] <= 12'h030;
rommem[11332] <= 12'h80F;
rommem[11333] <= 12'hFFB;
rommem[11334] <= 12'h000;
rommem[11335] <= 12'h04F;
rommem[11336] <= 12'h0E6;
rommem[11337] <= 12'h80F;
rommem[11338] <= 12'hFFB;
rommem[11339] <= 12'h000;
rommem[11340] <= 12'h00C;
rommem[11341] <= 12'h015;
rommem[11342] <= 12'h020;
rommem[11343] <= 12'h003;
rommem[11344] <= 12'h0CC;
rommem[11345] <= 12'hFFF;
rommem[11346] <= 12'hFFF;
rommem[11347] <= 12'h035;
rommem[11348] <= 12'h0B9;
rommem[11349] <= 12'h034;
rommem[11350] <= 12'h019;
rommem[11351] <= 12'h086;
rommem[11352] <= 12'hFFC;
rommem[11353] <= 12'h01F;
rommem[11354] <= 12'h08B;
rommem[11355] <= 12'h01A;
rommem[11356] <= 12'h010;
rommem[11357] <= 12'h0D6;
rommem[11358] <= 12'h015;
rommem[11359] <= 12'h0D1;
rommem[11360] <= 12'h016;
rommem[11361] <= 12'h027;
rommem[11362] <= 12'h00B;
rommem[11363] <= 12'h030;
rommem[11364] <= 12'h80F;
rommem[11365] <= 12'hFFB;
rommem[11366] <= 12'h000;
rommem[11367] <= 12'h04F;
rommem[11368] <= 12'h0E6;
rommem[11369] <= 12'h80F;
rommem[11370] <= 12'hFFB;
rommem[11371] <= 12'h000;
rommem[11372] <= 12'h020;
rommem[11373] <= 12'h003;
rommem[11374] <= 12'h0CC;
rommem[11375] <= 12'hFFF;
rommem[11376] <= 12'hFFF;
rommem[11377] <= 12'h035;
rommem[11378] <= 12'h099;
rommem[11379] <= 12'h034;
rommem[11380] <= 12'h009;
rommem[11381] <= 12'h086;
rommem[11382] <= 12'hFFC;
rommem[11383] <= 12'h01F;
rommem[11384] <= 12'h08B;
rommem[11385] <= 12'h015;
rommem[11386] <= 12'h0B6;
rommem[11387] <= 12'hFFF;
rommem[11388] <= 12'hFFF;
rommem[11389] <= 12'hE30;
rommem[11390] <= 12'h100;
rommem[11391] <= 12'h01C;
rommem[11392] <= 12'h0EF;
rommem[11393] <= 12'h039;
rommem[11394] <= 12'h0CC;
rommem[11395] <= 12'hFFF;
rommem[11396] <= 12'hFFF;
rommem[11397] <= 12'h01C;
rommem[11398] <= 12'h0EF;
rommem[11399] <= 12'h039;
rommem[11400] <= 12'h034;
rommem[11401] <= 12'h003;
rommem[11402] <= 12'h015;
rommem[11403] <= 12'h0B6;
rommem[11404] <= 12'hFFF;
rommem[11405] <= 12'hFFF;
rommem[11406] <= 12'hFE0;
rommem[11407] <= 12'h0B1;
rommem[11408] <= 12'hFFC;
rommem[11409] <= 12'h010;
rommem[11410] <= 12'h026;
rommem[11411] <= 12'hFF6;
rommem[11412] <= 12'h01C;
rommem[11413] <= 12'h0EF;
rommem[11414] <= 12'h01A;
rommem[11415] <= 12'h010;
rommem[11416] <= 12'h015;
rommem[11417] <= 12'h0B6;
rommem[11418] <= 12'hFFF;
rommem[11419] <= 12'hE30;
rommem[11420] <= 12'h101;
rommem[11421] <= 12'h085;
rommem[11422] <= 12'h010;
rommem[11423] <= 12'h027;
rommem[11424] <= 12'hFE9;
rommem[11425] <= 12'h015;
rommem[11426] <= 12'h0F7;
rommem[11389] <= 12'hFE0;
rommem[11390] <= 12'h091;
rommem[11391] <= 12'h010;
rommem[11392] <= 12'h026;
rommem[11393] <= 12'h013;
rommem[11394] <= 12'h01A;
rommem[11395] <= 12'h010;
rommem[11396] <= 12'h015;
rommem[11397] <= 12'h0F6;
rommem[11398] <= 12'hFFF;
rommem[11399] <= 12'hE30;
rommem[11400] <= 12'h101;
rommem[11401] <= 12'h0C5;
rommem[11402] <= 12'h008;
rommem[11403] <= 12'h027;
rommem[11404] <= 12'h008;
rommem[11405] <= 12'h04F;
rommem[11406] <= 12'h015;
rommem[11407] <= 12'h0F6;
rommem[11408] <= 12'hFFF;
rommem[11409] <= 12'hE30;
rommem[11410] <= 12'h100;
rommem[11411] <= 12'h035;
rommem[11412] <= 12'h089;
rommem[11413] <= 12'h0CC;
rommem[11414] <= 12'hFFF;
rommem[11415] <= 12'hFFF;
rommem[11416] <= 12'h035;
rommem[11417] <= 12'h089;
rommem[11418] <= 12'h034;
rommem[11419] <= 12'h00B;
rommem[11420] <= 12'h086;
rommem[11421] <= 12'hFFC;
rommem[11422] <= 12'h01F;
rommem[11423] <= 12'h08B;
rommem[11424] <= 12'h015;
rommem[11425] <= 12'h0B6;
rommem[11426] <= 12'hFFF;
rommem[11427] <= 12'hFFF;
rommem[11428] <= 12'hE30;
rommem[11429] <= 12'h100;
rommem[11430] <= 12'h035;
rommem[11431] <= 12'h083;
rommem[11432] <= 12'h04F;
rommem[11433] <= 12'h0E6;
rommem[11434] <= 12'hA08;
rommem[11435] <= 12'h133;
rommem[11436] <= 12'h0E0;
rommem[11437] <= 12'hA08;
rommem[11438] <= 12'h131;
rommem[11439] <= 12'h02C;
rommem[11440] <= 12'h009;
rommem[11441] <= 12'h0CC;
rommem[11442] <= 12'h001;
rommem[11443] <= 12'h000;
rommem[11444] <= 12'h0A3;
rommem[11445] <= 12'hA08;
rommem[11446] <= 12'h131;
rommem[11447] <= 12'h0E3;
rommem[11448] <= 12'hA08;
rommem[11449] <= 12'h133;
rommem[11450] <= 12'h039;
rommem[11451] <= 12'h015;
rommem[11452] <= 12'h0F6;
rommem[11453] <= 12'hFFF;
rommem[11454] <= 12'hE30;
rommem[11455] <= 12'h101;
rommem[11456] <= 12'h0C5;
rommem[11457] <= 12'h008;
rommem[11458] <= 12'h027;
rommem[11459] <= 12'h049;
rommem[11460] <= 12'h015;
rommem[11461] <= 12'h0F6;
rommem[11462] <= 12'hFFF;
rommem[11463] <= 12'hE30;
rommem[11464] <= 12'h100;
rommem[11465] <= 12'h0C1;
rommem[11466] <= 12'h014;
rommem[11467] <= 12'h026;
rommem[11468] <= 12'h000;
rommem[11469] <= 12'h034;
rommem[11470] <= 12'h004;
rommem[11471] <= 12'h0B6;
rommem[11472] <= 12'hFFC;
rommem[11473] <= 12'h010;
rommem[11474] <= 12'h048;
rommem[11475] <= 12'h048;
rommem[11476] <= 12'h048;
rommem[11477] <= 12'h048;
rommem[11478] <= 12'h08A;
rommem[11479] <= 12'hC00;
rommem[11480] <= 12'h05F;
rommem[11481] <= 12'h01F;
rommem[11482] <= 12'h002;
rommem[11483] <= 12'h035;
rommem[11484] <= 12'h004;
rommem[11485] <= 12'h0A6;
rommem[11486] <= 12'hA08;
rommem[11487] <= 12'h133;
rommem[11488] <= 12'h04C;
rommem[11489] <= 12'h0A1;
rommem[11490] <= 12'hA08;
rommem[11491] <= 12'h131;
rommem[11492] <= 12'h027;
rommem[11493] <= 12'h027;
rommem[11494] <= 12'h0A7;
rommem[11495] <= 12'hA08;
rommem[11496] <= 12'h133;
rommem[11497] <= 12'h04A;
rommem[11498] <= 12'h01E;
rommem[11499] <= 12'h089;
rommem[11500] <= 12'h030;
rommem[11501] <= 12'hA0A;
rommem[11502] <= 12'h000;
rommem[11503] <= 12'hBFF;
rommem[11504] <= 12'h000;
rommem[11505] <= 12'h0A7;
rommem[11506] <= 12'hA0F;
rommem[11507] <= 12'h06D;
rommem[11508] <= 12'hA08;
rommem[11509] <= 12'h140;
rommem[11510] <= 12'h026;
rommem[11511] <= 12'hFC3;
rommem[11512] <= 12'h08D;
rommem[11513] <= 12'hFAE;
rommem[11514] <= 12'h0C1;
rommem[11515] <= 12'hFF0;
rommem[11516] <= 12'h025;
rommem[11517] <= 12'hFBD;
rommem[11518] <= 12'h0C6;
rommem[11519] <= 12'h013;
rommem[11520] <= 12'h06F;
rommem[11521] <= 12'hA08;
rommem[11522] <= 12'h139;
rommem[11523] <= 12'h0E7;
rommem[11524] <= 12'hA08;
rommem[11525] <= 12'h140;
rommem[11526] <= 12'h015;
rommem[11527] <= 12'h0F7;
rommem[11528] <= 12'hFFF;
rommem[11529] <= 12'hE30;
rommem[11530] <= 12'h100;
rommem[11531] <= 12'h020;
rommem[11532] <= 12'hFAE;
rommem[11533] <= 12'h039;
rommem[11534] <= 12'h053;
rommem[11535] <= 12'h065;
rommem[11536] <= 12'h072;
rommem[11537] <= 12'h069;
rommem[11538] <= 12'h061;
rommem[11539] <= 12'h06C;
rommem[11540] <= 12'h000;
rommem[11541] <= 12'h034;
rommem[11542] <= 12'h016;
rommem[11543] <= 12'h01F;
rommem[11544] <= 12'h001;
rommem[11545] <= 12'h0E6;
rommem[11546] <= 12'h804;
rommem[11547] <= 12'h027;
rommem[11548] <= 12'h006;
rommem[11549] <= 12'h030;
rommem[11550] <= 12'h001;
rommem[11551] <= 12'h08D;
rommem[11552] <= 12'hF67;
rommem[11553] <= 12'h020;
rommem[11554] <= 12'hFF6;
rommem[11555] <= 12'h035;
rommem[11556] <= 12'h096;
rommem[11557] <= 12'h034;
rommem[11558] <= 12'h006;
rommem[11559] <= 12'h0CC;
rommem[11560] <= 12'hFFE;
rommem[11561] <= 12'hD45;
rommem[11562] <= 12'h017;
rommem[11563] <= 12'hFFF;
rommem[11564] <= 12'h6AD;
rommem[11565] <= 12'h08D;
rommem[11566] <= 12'hEC0;
rommem[11567] <= 12'h0C6;
rommem[11568] <= 12'h011;
rommem[11569] <= 12'h08D;
rommem[11570] <= 12'hF55;
rommem[11571] <= 12'h08D;
rommem[11572] <= 12'hF53;
rommem[11573] <= 12'h08D;
rommem[11574] <= 12'hF51;
rommem[11575] <= 12'h0CC;
rommem[11576] <= 12'hFFE;
rommem[11577] <= 12'hD45;
rommem[11578] <= 12'h08D;
rommem[11579] <= 12'hFD9;
rommem[11580] <= 12'h017;
rommem[11581] <= 12'h000;
rommem[11582] <= 12'h16A;
rommem[11583] <= 12'h0C1;
rommem[11584] <= 12'h003;
rommem[11585] <= 12'h026;
rommem[11586] <= 12'hFEC;
rommem[11587] <= 12'h035;
rommem[11588] <= 12'h086;
rommem[11589] <= 12'h053;
rommem[11590] <= 12'h065;
rommem[11591] <= 12'h072;
rommem[11592] <= 12'h069;
rommem[11593] <= 12'h061;
rommem[11594] <= 12'h06C;
rommem[11595] <= 12'h020;
rommem[11596] <= 12'h070;
rommem[11597] <= 12'h06F;
rommem[11598] <= 12'h072;
rommem[11599] <= 12'h074;
rommem[11600] <= 12'h020;
rommem[11601] <= 12'h074;
rommem[11602] <= 12'h065;
rommem[11603] <= 12'h073;
rommem[11604] <= 12'h074;
rommem[11605] <= 12'h00D;
rommem[11606] <= 12'h00A;
rommem[11607] <= 12'h000;
rommem[11608] <= 12'h0CC;
rommem[11609] <= 12'hFFF;
rommem[11610] <= 12'hFFF;
rommem[11611] <= 12'h03F;
rommem[11612] <= 12'h001;
rommem[11613] <= 12'h0C1;
rommem[11614] <= 12'h00A;
rommem[11615] <= 12'h027;
rommem[11616] <= 12'h013;
rommem[11617] <= 12'h0C1;
rommem[11618] <= 12'h003;
rommem[11619] <= 12'h026;
rommem[11620] <= 12'h003;
rommem[11621] <= 12'h0F7;
rommem[11428] <= 12'hFE0;
rommem[11429] <= 12'h091;
rommem[11430] <= 12'h010;
rommem[11431] <= 12'h026;
rommem[11432] <= 12'hFF7;
rommem[11433] <= 12'h01C;
rommem[11434] <= 12'h0EF;
rommem[11435] <= 12'h01A;
rommem[11436] <= 12'h010;
rommem[11437] <= 12'h015;
rommem[11438] <= 12'h0B6;
rommem[11439] <= 12'hFFF;
rommem[11440] <= 12'hE30;
rommem[11441] <= 12'h101;
rommem[11442] <= 12'h085;
rommem[11443] <= 12'h010;
rommem[11444] <= 12'h027;
rommem[11445] <= 12'hFEA;
rommem[11446] <= 12'h015;
rommem[11447] <= 12'h0F7;
rommem[11448] <= 12'hFFF;
rommem[11449] <= 12'hE30;
rommem[11450] <= 12'h100;
rommem[11451] <= 12'h035;
rommem[11452] <= 12'h08B;
rommem[11453] <= 12'h04F;
rommem[11454] <= 12'h0D6;
rommem[11455] <= 12'h016;
rommem[11456] <= 12'h0D0;
rommem[11457] <= 12'h015;
rommem[11458] <= 12'h02C;
rommem[11459] <= 12'h007;
rommem[11460] <= 12'h0CC;
rommem[11461] <= 12'h001;
rommem[11462] <= 12'h000;
rommem[11463] <= 12'h093;
rommem[11464] <= 12'h015;
rommem[11465] <= 12'h0D3;
rommem[11466] <= 12'h016;
rommem[11467] <= 12'h039;
rommem[11468] <= 12'h034;
rommem[11469] <= 12'h008;
rommem[11470] <= 12'h086;
rommem[11471] <= 12'hFFC;
rommem[11472] <= 12'h01F;
rommem[11473] <= 12'h08B;
rommem[11474] <= 12'h015;
rommem[11475] <= 12'h0B6;
rommem[11476] <= 12'hFFF;
rommem[11477] <= 12'hE3F;
rommem[11478] <= 12'h0D3;
rommem[11479] <= 12'h027;
rommem[11480] <= 12'h042;
rommem[11481] <= 12'h015;
rommem[11482] <= 12'h0F6;
rommem[11483] <= 12'hFFF;
rommem[11484] <= 12'hE30;
rommem[11485] <= 12'h104;
rommem[11486] <= 12'h02A;
rommem[11487] <= 12'h03B;
rommem[11488] <= 12'h015;
rommem[11489] <= 12'h0F6;
rommem[11490] <= 12'hFFF;
rommem[11491] <= 12'hE30;
rommem[11492] <= 12'h101;
rommem[11493] <= 12'h0C5;
rommem[11494] <= 12'h008;
rommem[11495] <= 12'h027;
rommem[11496] <= 12'h030;
rommem[11497] <= 12'h015;
rommem[11498] <= 12'h0F6;
rommem[11499] <= 12'hFFF;
rommem[11500] <= 12'hE30;
rommem[11501] <= 12'h100;
rommem[11502] <= 12'h096;
rommem[11503] <= 12'h016;
rommem[11504] <= 12'h04C;
rommem[11505] <= 12'h091;
rommem[11506] <= 12'h015;
rommem[11507] <= 12'h027;
rommem[11508] <= 12'h026;
rommem[11509] <= 12'h097;
rommem[11510] <= 12'h016;
rommem[11511] <= 12'h04A;
rommem[11512] <= 12'h01E;
rommem[11513] <= 12'h089;
rommem[11514] <= 12'h030;
rommem[11515] <= 12'h80F;
rommem[11516] <= 12'hFFB;
rommem[11517] <= 12'h000;
rommem[11518] <= 12'h0A7;
rommem[11519] <= 12'h80F;
rommem[11520] <= 12'hFFB;
rommem[11521] <= 12'h000;
rommem[11522] <= 12'h00D;
rommem[11523] <= 12'h01A;
rommem[11524] <= 12'h026;
rommem[11525] <= 12'hFD3;
rommem[11526] <= 12'h08D;
rommem[11527] <= 12'hFB5;
rommem[11528] <= 12'h0C1;
rommem[11529] <= 12'hFE6;
rommem[11530] <= 12'h025;
rommem[11531] <= 12'hFCD;
rommem[11532] <= 12'h0C6;
rommem[11533] <= 12'h013;
rommem[11534] <= 12'h00F;
rommem[11535] <= 12'h019;
rommem[11536] <= 12'h0D7;
rommem[11537] <= 12'h01A;
rommem[11538] <= 12'h015;
rommem[11539] <= 12'h0F7;
rommem[11540] <= 12'hFFF;
rommem[11541] <= 12'hE30;
rommem[11542] <= 12'h100;
rommem[11543] <= 12'h020;
rommem[11544] <= 12'hFC0;
rommem[11545] <= 12'h035;
rommem[11546] <= 12'h088;
rommem[11547] <= 12'h035;
rommem[11548] <= 12'h088;
rommem[11549] <= 12'h053;
rommem[11550] <= 12'h065;
rommem[11551] <= 12'h072;
rommem[11552] <= 12'h069;
rommem[11553] <= 12'h061;
rommem[11554] <= 12'h06C;
rommem[11555] <= 12'h000;
rommem[11556] <= 12'h034;
rommem[11557] <= 12'h016;
rommem[11558] <= 12'h01F;
rommem[11559] <= 12'h001;
rommem[11560] <= 12'h0E6;
rommem[11561] <= 12'h804;
rommem[11562] <= 12'h027;
rommem[11563] <= 12'h006;
rommem[11564] <= 12'h030;
rommem[11565] <= 12'h001;
rommem[11566] <= 12'h08D;
rommem[11567] <= 12'hF6A;
rommem[11568] <= 12'h020;
rommem[11569] <= 12'hFF6;
rommem[11570] <= 12'h035;
rommem[11571] <= 12'h096;
rommem[11572] <= 12'h034;
rommem[11573] <= 12'h006;
rommem[11574] <= 12'h0CC;
rommem[11575] <= 12'hFFE;
rommem[11576] <= 12'hD54;
rommem[11577] <= 12'h017;
rommem[11578] <= 12'hFFF;
rommem[11579] <= 12'h6A1;
rommem[11580] <= 12'h08D;
rommem[11581] <= 12'hEB1;
rommem[11582] <= 12'h0C6;
rommem[11583] <= 12'h011;
rommem[11584] <= 12'h08D;
rommem[11585] <= 12'hF58;
rommem[11586] <= 12'h08D;
rommem[11587] <= 12'hF56;
rommem[11588] <= 12'h08D;
rommem[11589] <= 12'hF54;
rommem[11590] <= 12'h0CC;
rommem[11591] <= 12'hFFE;
rommem[11592] <= 12'hD54;
rommem[11593] <= 12'h08D;
rommem[11594] <= 12'hFD9;
rommem[11595] <= 12'h017;
rommem[11596] <= 12'h000;
rommem[11597] <= 12'h443;
rommem[11598] <= 12'h0C1;
rommem[11599] <= 12'h003;
rommem[11600] <= 12'h026;
rommem[11601] <= 12'hFEC;
rommem[11602] <= 12'h035;
rommem[11603] <= 12'h086;
rommem[11604] <= 12'h053;
rommem[11605] <= 12'h065;
rommem[11606] <= 12'h072;
rommem[11607] <= 12'h069;
rommem[11608] <= 12'h061;
rommem[11609] <= 12'h06C;
rommem[11610] <= 12'h020;
rommem[11611] <= 12'h070;
rommem[11612] <= 12'h06F;
rommem[11613] <= 12'h072;
rommem[11614] <= 12'h074;
rommem[11615] <= 12'h020;
rommem[11616] <= 12'h074;
rommem[11617] <= 12'h065;
rommem[11618] <= 12'h073;
rommem[11619] <= 12'h074;
rommem[11620] <= 12'h00D;
rommem[11621] <= 12'h00A;
rommem[11622] <= 12'h000;
rommem[11623] <= 12'h94A;
rommem[11624] <= 12'h0C1;
rommem[11625] <= 12'h01A;
rommem[11626] <= 12'h026;
rommem[11627] <= 12'h003;
rommem[11628] <= 12'h0F7;
rommem[11629] <= 12'h000;
rommem[11630] <= 12'h94A;
rommem[11631] <= 12'h07D;
rommem[11632] <= 12'h000;
rommem[11633] <= 12'h94A;
rommem[11634] <= 12'h027;
rommem[11635] <= 12'hFE4;
rommem[11636] <= 12'h039;
rommem[11637] <= 12'h03F;
rommem[11638] <= 12'h001;
rommem[11639] <= 12'h017;
rommem[11640] <= 12'h000;
rommem[11641] <= 12'h4F6;
rommem[11642] <= 12'h07D;
rommem[11643] <= 12'h000;
rommem[11644] <= 12'h94A;
rommem[11645] <= 12'h027;
rommem[11646] <= 12'h002;
rommem[11647] <= 12'h04F;
rommem[11648] <= 12'h039;
rommem[11649] <= 12'h058;
rommem[11650] <= 12'h058;
rommem[11651] <= 12'h058;
rommem[11652] <= 12'h058;
rommem[11653] <= 12'h034;
rommem[11654] <= 12'h004;
rommem[11655] <= 12'h03F;
rommem[11656] <= 12'h001;
rommem[11657] <= 12'h017;
rommem[11623] <= 12'h07D;
rommem[11624] <= 12'h000;
rommem[11625] <= 12'h94E;
rommem[11626] <= 12'h027;
rommem[11627] <= 12'h00D;
rommem[11628] <= 12'h0E6;
rommem[11629] <= 12'h90F;
rommem[11630] <= 12'h000;
rommem[11631] <= 12'h950;
rommem[11632] <= 12'h07C;
rommem[11633] <= 12'h000;
rommem[11634] <= 12'h951;
rommem[11635] <= 12'h026;
rommem[11636] <= 12'h003;
rommem[11637] <= 12'h07C;
rommem[11638] <= 12'h000;
rommem[11639] <= 12'h950;
rommem[11640] <= 12'h039;
rommem[11641] <= 12'h0CC;
rommem[11642] <= 12'hFFF;
rommem[11643] <= 12'hFFF;
rommem[11644] <= 12'h03F;
rommem[11645] <= 12'h001;
rommem[11646] <= 12'h039;
rommem[11647] <= 12'h08D;
rommem[11648] <= 12'hFE6;
rommem[11649] <= 12'h0C1;
rommem[11650] <= 12'h00A;
rommem[11651] <= 12'h027;
rommem[11652] <= 12'h013;
rommem[11653] <= 12'h0C1;
rommem[11654] <= 12'h003;
rommem[11655] <= 12'h026;
rommem[11656] <= 12'h003;
rommem[11657] <= 12'h0F7;
rommem[11658] <= 12'h000;
rommem[11659] <= 12'h4E4;
rommem[11660] <= 12'h07D;
rommem[11661] <= 12'h000;
rommem[11662] <= 12'h94A;
rommem[11663] <= 12'h026;
rommem[11664] <= 12'h011;
rommem[11665] <= 12'h0EA;
rommem[11666] <= 12'hE00;
rommem[11667] <= 12'h058;
rommem[11668] <= 12'h058;
rommem[11669] <= 12'h058;
rommem[11670] <= 12'h058;
rommem[11671] <= 12'h034;
rommem[11672] <= 12'h004;
rommem[11673] <= 12'h03F;
rommem[11674] <= 12'h001;
rommem[11675] <= 12'h017;
rommem[11659] <= 12'h94A;
rommem[11660] <= 12'h0C1;
rommem[11661] <= 12'h01A;
rommem[11662] <= 12'h026;
rommem[11663] <= 12'h003;
rommem[11664] <= 12'h0F7;
rommem[11665] <= 12'h000;
rommem[11666] <= 12'h94A;
rommem[11667] <= 12'h07D;
rommem[11668] <= 12'h000;
rommem[11669] <= 12'h94A;
rommem[11670] <= 12'h027;
rommem[11671] <= 12'hFE7;
rommem[11672] <= 12'h039;
rommem[11673] <= 12'h034;
rommem[11674] <= 12'h004;
rommem[11675] <= 12'h0FB;
rommem[11676] <= 12'h000;
rommem[11677] <= 12'h4D2;
rommem[11678] <= 12'h0EA;
rommem[11679] <= 12'hE00;
rommem[11680] <= 12'h04F;
rommem[11681] <= 12'h039;
rommem[11682] <= 12'h032;
rommem[11683] <= 12'h601;
rommem[11684] <= 12'h04F;
rommem[11685] <= 12'h039;
rommem[11686] <= 12'h07F;
rommem[11687] <= 12'h000;
rommem[11688] <= 12'h940;
rommem[11689] <= 12'h07F;
rommem[11690] <= 12'h000;
rommem[11691] <= 12'h941;
rommem[11692] <= 12'h07F;
rommem[11693] <= 12'h000;
rommem[11694] <= 12'h942;
rommem[11695] <= 12'h07F;
rommem[11696] <= 12'h000;
rommem[11697] <= 12'h943;
rommem[11698] <= 12'h039;
rommem[11699] <= 12'h08D;
rommem[11700] <= 12'hFF1;
rommem[11677] <= 12'h94B;
rommem[11678] <= 12'h0F7;
rommem[11679] <= 12'h000;
rommem[11680] <= 12'h94B;
rommem[11681] <= 12'h035;
rommem[11682] <= 12'h084;
rommem[11683] <= 12'h08D;
rommem[11684] <= 12'hFC2;
rommem[11685] <= 12'h017;
rommem[11686] <= 12'h000;
rommem[11687] <= 12'h7F7;
rommem[11688] <= 12'h07D;
rommem[11689] <= 12'h000;
rommem[11690] <= 12'h94A;
rommem[11691] <= 12'h027;
rommem[11692] <= 12'h002;
rommem[11693] <= 12'h04F;
rommem[11694] <= 12'h039;
rommem[11695] <= 12'h058;
rommem[11696] <= 12'h058;
rommem[11697] <= 12'h058;
rommem[11698] <= 12'h058;
rommem[11699] <= 12'h034;
rommem[11700] <= 12'h004;
rommem[11701] <= 12'h08D;
rommem[11702] <= 12'hFBE;
rommem[11703] <= 12'h0F7;
rommem[11702] <= 12'hFB0;
rommem[11703] <= 12'h017;
rommem[11704] <= 12'h000;
rommem[11705] <= 12'h942;
rommem[11705] <= 12'h7E5;
rommem[11706] <= 12'h07D;
rommem[11707] <= 12'h000;
rommem[11708] <= 12'h94A;
rommem[11709] <= 12'h026;
rommem[11710] <= 12'h005;
rommem[11711] <= 12'h08D;
rommem[11712] <= 12'hFB4;
rommem[11713] <= 12'h0F7;
rommem[11714] <= 12'h000;
rommem[11715] <= 12'h943;
rommem[11716] <= 12'h039;
rommem[11717] <= 12'h08D;
rommem[11718] <= 12'hFDF;
rommem[11710] <= 12'h011;
rommem[11711] <= 12'h0EA;
rommem[11712] <= 12'hE00;
rommem[11713] <= 12'h058;
rommem[11714] <= 12'h058;
rommem[11715] <= 12'h058;
rommem[11716] <= 12'h058;
rommem[11717] <= 12'h034;
rommem[11718] <= 12'h004;
rommem[11719] <= 12'h08D;
rommem[11720] <= 12'hFAC;
rommem[11721] <= 12'h0F7;
rommem[11720] <= 12'hF9E;
rommem[11721] <= 12'h017;
rommem[11722] <= 12'h000;
rommem[11723] <= 12'h941;
rommem[11724] <= 12'h07D;
rommem[11725] <= 12'h000;
rommem[11726] <= 12'h94A;
rommem[11727] <= 12'h026;
rommem[11728] <= 12'h00F;
rommem[11729] <= 12'h08D;
rommem[11730] <= 12'hFA2;
rommem[11731] <= 12'h0F7;
rommem[11732] <= 12'h000;
rommem[11733] <= 12'h942;
rommem[11734] <= 12'h07D;
rommem[11735] <= 12'h000;
rommem[11736] <= 12'h94A;
rommem[11737] <= 12'h026;
rommem[11738] <= 12'h005;
rommem[11739] <= 12'h08D;
rommem[11740] <= 12'hF98;
rommem[11741] <= 12'h0F7;
rommem[11723] <= 12'h7D3;
rommem[11724] <= 12'h0EA;
rommem[11725] <= 12'hE00;
rommem[11726] <= 12'h04F;
rommem[11727] <= 12'h039;
rommem[11728] <= 12'h032;
rommem[11729] <= 12'h601;
rommem[11730] <= 12'h04F;
rommem[11731] <= 12'h039;
rommem[11732] <= 12'h07F;
rommem[11733] <= 12'h000;
rommem[11734] <= 12'h940;
rommem[11735] <= 12'h07F;
rommem[11736] <= 12'h000;
rommem[11737] <= 12'h941;
rommem[11738] <= 12'h07F;
rommem[11739] <= 12'h000;
rommem[11740] <= 12'h942;
rommem[11741] <= 12'h07F;
rommem[11742] <= 12'h000;
rommem[11743] <= 12'h943;
rommem[11744] <= 12'h039;
rommem[11745] <= 12'h05F;
rommem[11746] <= 12'h034;
rommem[11747] <= 12'h004;
rommem[11748] <= 12'h08D;
rommem[11749] <= 12'hF8F;
rommem[11750] <= 12'h07D;
rommem[11751] <= 12'h000;
rommem[11752] <= 12'h94A;
rommem[11753] <= 12'h026;
rommem[11754] <= 12'h01C;
rommem[11755] <= 12'h015;
rommem[11756] <= 12'h0E7;
rommem[11757] <= 12'h90F;
rommem[11758] <= 12'h000;
rommem[11759] <= 12'h941;
rommem[11760] <= 12'h07C;
rommem[11761] <= 12'h000;
rommem[11762] <= 12'h943;
rommem[11763] <= 12'h026;
rommem[11764] <= 12'h008;
rommem[11765] <= 12'h07C;
rommem[11766] <= 12'h000;
rommem[11767] <= 12'h942;
rommem[11768] <= 12'h026;
rommem[11769] <= 12'h003;
rommem[11770] <= 12'h07C;
rommem[11771] <= 12'h000;
rommem[11772] <= 12'h941;
rommem[11773] <= 12'h035;
rommem[11774] <= 12'h004;
rommem[11775] <= 12'h05C;
rommem[11776] <= 12'h0F1;
rommem[11745] <= 12'h08D;
rommem[11746] <= 12'hFF1;
rommem[11747] <= 12'h08D;
rommem[11748] <= 12'hFBE;
rommem[11749] <= 12'h08D;
rommem[11750] <= 12'hFB2;
rommem[11751] <= 12'h0F7;
rommem[11752] <= 12'h000;
rommem[11753] <= 12'h942;
rommem[11754] <= 12'h07D;
rommem[11755] <= 12'h000;
rommem[11756] <= 12'h94A;
rommem[11757] <= 12'h026;
rommem[11758] <= 12'h007;
rommem[11759] <= 12'h08D;
rommem[11760] <= 12'hFB2;
rommem[11761] <= 12'h08D;
rommem[11762] <= 12'hFA6;
rommem[11763] <= 12'h0F7;
rommem[11764] <= 12'h000;
rommem[11765] <= 12'h943;
rommem[11766] <= 12'h039;
rommem[11767] <= 12'h08D;
rommem[11768] <= 12'hFDB;
rommem[11769] <= 12'h08D;
rommem[11770] <= 12'hFA8;
rommem[11771] <= 12'h08D;
rommem[11772] <= 12'hF9C;
rommem[11773] <= 12'h0F7;
rommem[11774] <= 12'h000;
rommem[11775] <= 12'h941;
rommem[11776] <= 12'h07D;
rommem[11777] <= 12'h000;
rommem[11778] <= 12'h949;
rommem[11779] <= 12'h025;
rommem[11780] <= 12'hFDD;
rommem[11781] <= 12'h020;
rommem[11782] <= 12'hF6E;
rommem[11783] <= 12'h032;
rommem[11784] <= 12'h601;
rommem[11785] <= 12'h020;
rommem[11786] <= 12'hF6A;
rommem[11787] <= 12'h08D;
rommem[11788] <= 12'hFA6;
rommem[11789] <= 12'h08D;
rommem[11790] <= 12'hFD2;
rommem[11791] <= 12'h020;
rommem[11792] <= 12'h072;
rommem[11778] <= 12'h94A;
rommem[11779] <= 12'h026;
rommem[11780] <= 12'h013;
rommem[11781] <= 12'h08D;
rommem[11782] <= 12'hF9C;
rommem[11783] <= 12'h08D;
rommem[11784] <= 12'hF90;
rommem[11785] <= 12'h0F7;
rommem[11786] <= 12'h000;
rommem[11787] <= 12'h942;
rommem[11788] <= 12'h07D;
rommem[11789] <= 12'h000;
rommem[11790] <= 12'h94A;
rommem[11791] <= 12'h026;
rommem[11792] <= 12'h007;
rommem[11793] <= 12'h08D;
rommem[11794] <= 12'hFB2;
rommem[11794] <= 12'hF90;
rommem[11795] <= 12'h08D;
rommem[11796] <= 12'hFCC;
rommem[11797] <= 12'h020;
rommem[11798] <= 12'h06C;
rommem[11799] <= 12'h08D;
rommem[11800] <= 12'hF9A;
rommem[11801] <= 12'h0FC;
rommem[11802] <= 12'h000;
rommem[11803] <= 12'h942;
rommem[11804] <= 12'h0FD;
rommem[11805] <= 12'h000;
rommem[11806] <= 12'h946;
rommem[11807] <= 12'h0FC;
rommem[11808] <= 12'h000;
rommem[11809] <= 12'h940;
rommem[11810] <= 12'h0FD;
rommem[11811] <= 12'h000;
rommem[11812] <= 12'h944;
rommem[11813] <= 12'h020;
rommem[11814] <= 12'h069;
rommem[11815] <= 12'h08D;
rommem[11816] <= 12'hF9C;
rommem[11817] <= 12'h0FC;
rommem[11818] <= 12'h000;
rommem[11819] <= 12'h942;
rommem[11820] <= 12'h0FD;
rommem[11821] <= 12'h000;
rommem[11822] <= 12'h946;
rommem[11823] <= 12'h0FC;
rommem[11796] <= 12'hF84;
rommem[11797] <= 12'h0F7;
rommem[11798] <= 12'h000;
rommem[11799] <= 12'h943;
rommem[11800] <= 12'h039;
rommem[11801] <= 12'h05F;
rommem[11802] <= 12'h034;
rommem[11803] <= 12'h004;
rommem[11804] <= 12'h08D;
rommem[11805] <= 12'hF85;
rommem[11806] <= 12'h08D;
rommem[11807] <= 12'hF79;
rommem[11808] <= 12'h07D;
rommem[11809] <= 12'h000;
rommem[11810] <= 12'h94A;
rommem[11811] <= 12'h026;
rommem[11812] <= 12'h01E;
rommem[11813] <= 12'h015;
rommem[11814] <= 12'h0E7;
rommem[11815] <= 12'h90F;
rommem[11816] <= 12'h000;
rommem[11817] <= 12'h941;
rommem[11818] <= 12'h07C;
rommem[11819] <= 12'h000;
rommem[11820] <= 12'h943;
rommem[11821] <= 12'h026;
rommem[11822] <= 12'h008;
rommem[11823] <= 12'h07C;
rommem[11824] <= 12'h000;
rommem[11825] <= 12'h940;
rommem[11826] <= 12'h0FD;
rommem[11827] <= 12'h000;
rommem[11828] <= 12'h944;
rommem[11829] <= 12'h020;
rommem[11830] <= 12'h059;
rommem[11831] <= 12'h07F;
rommem[11832] <= 12'h000;
rommem[11833] <= 12'h94A;
rommem[11834] <= 12'h0CC;
rommem[11835] <= 12'hFFE;
rommem[11836] <= 12'hE93;
rommem[11837] <= 12'h03F;
rommem[11838] <= 12'h004;
rommem[11839] <= 12'h03F;
rommem[11840] <= 12'h001;
rommem[11841] <= 12'h0C1;
rommem[11842] <= 12'h01A;
rommem[11843] <= 12'h027;
rommem[11844] <= 12'h04B;
rommem[11845] <= 12'h0C1;
rommem[11846] <= 12'h053;
rommem[11847] <= 12'h026;
rommem[11848] <= 12'h03A;
rommem[11849] <= 12'h03F;
rommem[11850] <= 12'h001;
rommem[11851] <= 12'h0C1;
rommem[11852] <= 12'h030;
rommem[11853] <= 12'h025;
rommem[11854] <= 12'h034;
rommem[11855] <= 12'h0C1;
rommem[11856] <= 12'h039;
rommem[11857] <= 12'h022;
rommem[11858] <= 12'h030;
rommem[11859] <= 12'h0F7;
rommem[11860] <= 12'h000;
rommem[11861] <= 12'h948;
rommem[11862] <= 12'h08D;
rommem[11863] <= 12'hF1D;
rommem[11864] <= 12'h0F7;
rommem[11865] <= 12'h000;
rommem[11866] <= 12'h949;
rommem[11867] <= 12'h07D;
rommem[11868] <= 12'h000;
rommem[11869] <= 12'h94A;
rommem[11870] <= 12'h026;
rommem[11871] <= 12'h030;
rommem[11872] <= 12'h0F6;
rommem[11825] <= 12'h942;
rommem[11826] <= 12'h026;
rommem[11827] <= 12'h003;
rommem[11828] <= 12'h07C;
rommem[11829] <= 12'h000;
rommem[11830] <= 12'h941;
rommem[11831] <= 12'h035;
rommem[11832] <= 12'h004;
rommem[11833] <= 12'h05C;
rommem[11834] <= 12'h0F1;
rommem[11835] <= 12'h000;
rommem[11836] <= 12'h949;
rommem[11837] <= 12'h025;
rommem[11838] <= 12'hFDB;
rommem[11839] <= 12'h08D;
rommem[11840] <= 12'hF62;
rommem[11841] <= 12'h020;
rommem[11842] <= 12'hF56;
rommem[11843] <= 12'h032;
rommem[11844] <= 12'h601;
rommem[11845] <= 12'h08D;
rommem[11846] <= 12'hF5C;
rommem[11847] <= 12'h020;
rommem[11848] <= 12'hF50;
rommem[11849] <= 12'h08D;
rommem[11850] <= 12'hF96;
rommem[11851] <= 12'h08D;
rommem[11852] <= 12'hFCC;
rommem[11853] <= 12'h07D;
rommem[11854] <= 12'h000;
rommem[11855] <= 12'h94B;
rommem[11856] <= 12'h027;
rommem[11857] <= 12'h008;
rommem[11858] <= 12'h07C;
rommem[11859] <= 12'h000;
rommem[11860] <= 12'h94C;
rommem[11861] <= 12'h0CC;
rommem[11862] <= 12'hFFE;
rommem[11863] <= 12'hF19;
rommem[11864] <= 12'h03F;
rommem[11865] <= 12'h004;
rommem[11866] <= 12'h020;
rommem[11867] <= 12'h099;
rommem[11868] <= 12'h08D;
rommem[11869] <= 12'hF99;
rommem[11870] <= 12'h08D;
rommem[11871] <= 12'hFB9;
rommem[11872] <= 12'h07D;
rommem[11873] <= 12'h000;
rommem[11874] <= 12'h948;
rommem[11875] <= 12'h0C1;
rommem[11876] <= 12'h030;
rommem[11877] <= 12'h027;
rommem[11878] <= 12'h01C;
rommem[11879] <= 12'h0C1;
rommem[11880] <= 12'h031;
rommem[11881] <= 12'h027;
rommem[11882] <= 12'hFA0;
rommem[11883] <= 12'h0C1;
rommem[11884] <= 12'h032;
rommem[11885] <= 12'h027;
rommem[11886] <= 12'hFA2;
rommem[11887] <= 12'h0C1;
rommem[11888] <= 12'h033;
rommem[11889] <= 12'h027;
rommem[11890] <= 12'h010;
rommem[11891] <= 12'h0C1;
rommem[11892] <= 12'h035;
rommem[11893] <= 12'h027;
rommem[11894] <= 12'h00C;
rommem[11895] <= 12'h0C1;
rommem[11896] <= 12'h037;
rommem[11897] <= 12'h027;
rommem[11898] <= 12'h015;
rommem[11899] <= 12'h0C1;
rommem[11900] <= 12'h038;
rommem[11901] <= 12'h027;
rommem[11902] <= 12'hFA8;
rommem[11903] <= 12'h0C1;
rommem[11904] <= 12'h039;
rommem[11905] <= 12'h027;
rommem[11906] <= 12'hF94;
rommem[11907] <= 12'h0C6;
rommem[11908] <= 12'h02E;
rommem[11909] <= 12'h03F;
rommem[11910] <= 12'h002;
rommem[11911] <= 12'h08D;
rommem[11912] <= 12'hECF;
rommem[11913] <= 12'h07D;
rommem[11914] <= 12'h000;
rommem[11915] <= 12'h94A;
rommem[11916] <= 12'h026;
rommem[11917] <= 12'h002;
rommem[11918] <= 12'h020;
rommem[11919] <= 12'hFAF;
rommem[11920] <= 12'h016;
rommem[11921] <= 12'h000;
rommem[11922] <= 12'h1A6;
rommem[11923] <= 12'h053;
rommem[11924] <= 12'h031;
rommem[11925] <= 12'h039;
rommem[11926] <= 12'h020;
rommem[11927] <= 12'h04C;
rommem[11928] <= 12'h06F;
rommem[11929] <= 12'h061;
rommem[11930] <= 12'h064;
rommem[11931] <= 12'h065;
rommem[11932] <= 12'h072;
rommem[11933] <= 12'h020;
rommem[11934] <= 12'h041;
rommem[11935] <= 12'h063;
rommem[11936] <= 12'h074;
rommem[11937] <= 12'h069;
rommem[11938] <= 12'h076;
rommem[11939] <= 12'h065;
rommem[11940] <= 12'h00D;
rommem[11941] <= 12'h00A;
rommem[11942] <= 12'h000;
rommem[11943] <= 12'h020;
rommem[11944] <= 12'hBE7;
rommem[11945] <= 12'h034;
rommem[11946] <= 12'h004;
rommem[11947] <= 12'h015;
rommem[11948] <= 12'h0F6;
rommem[11949] <= 12'hFFF;
rommem[11950] <= 12'hFFF;
rommem[11951] <= 12'hFE0;
rommem[11952] <= 12'h0F1;
rommem[11953] <= 12'hFFC;
rommem[11954] <= 12'h010;
rommem[11955] <= 12'h026;
rommem[11956] <= 12'hFF6;
rommem[11957] <= 12'h017;
rommem[11958] <= 12'hFFF;
rommem[11959] <= 12'hDAC;
rommem[11960] <= 12'h04D;
rommem[11961] <= 12'h02B;
rommem[11962] <= 12'h003;
rommem[11963] <= 12'h032;
rommem[11964] <= 12'h601;
rommem[11965] <= 12'h039;
rommem[11966] <= 12'h035;
rommem[11967] <= 12'h004;
rommem[11968] <= 12'h05D;
rommem[11969] <= 12'h02B;
rommem[11970] <= 12'hFE6;
rommem[11971] <= 12'h0CC;
rommem[11972] <= 12'hFFF;
rommem[11973] <= 12'hFFF;
rommem[11974] <= 12'h039;
rommem[11975] <= 12'h08D;
rommem[11976] <= 12'hFE0;
rommem[11977] <= 12'h020;
rommem[11978] <= 12'h009;
rommem[11979] <= 12'h08D;
rommem[11980] <= 12'hFDC;
rommem[11981] <= 12'h015;
rommem[11982] <= 12'h07D;
rommem[11983] <= 12'hFFF;
rommem[11984] <= 12'hFFC;
rommem[11985] <= 12'hA00;
rommem[11986] <= 12'h027;
rommem[11987] <= 12'h00C;
rommem[11988] <= 12'h081;
rommem[11989] <= 12'h00D;
rommem[11990] <= 12'h026;
rommem[11991] <= 12'h005;
rommem[11992] <= 12'h017;
rommem[11993] <= 12'hFFE;
rommem[11994] <= 12'h1F7;
rommem[11995] <= 12'h020;
rommem[11996] <= 12'h003;
rommem[11997] <= 12'h017;
rommem[11998] <= 12'hFFF;
rommem[11999] <= 12'h439;
rommem[12000] <= 12'h039;
rommem[12001] <= 12'h06E;
rommem[12002] <= 12'h90F;
rommem[12003] <= 12'h000;
rommem[12004] <= 12'h800;
rommem[12005] <= 12'h015;
rommem[12006] <= 12'h0F7;
rommem[12007] <= 12'hFFF;
rommem[12008] <= 12'hFFC;
rommem[12009] <= 12'hA00;
rommem[12010] <= 12'h039;
rommem[12011] <= 12'h015;
rommem[12012] <= 12'h0BF;
rommem[12013] <= 12'hFFF;
rommem[12014] <= 12'hE10;
rommem[12015] <= 12'h3C0;
rommem[12016] <= 12'h015;
rommem[12017] <= 12'h0FD;
rommem[12018] <= 12'hFFF;
rommem[12019] <= 12'hE10;
rommem[12020] <= 12'h3C2;
rommem[12021] <= 12'h039;
rommem[12022] <= 12'h000;
rommem[12023] <= 12'h000;
rommem[12024] <= 12'h000;
rommem[12025] <= 12'h000;
rommem[12026] <= 12'h000;
rommem[12027] <= 12'h000;
rommem[11874] <= 12'h94B;
rommem[11875] <= 12'h027;
rommem[11876] <= 12'h008;
rommem[11877] <= 12'h07C;
rommem[11878] <= 12'h000;
rommem[11879] <= 12'h94C;
rommem[11880] <= 12'h0CC;
rommem[11881] <= 12'hFFE;
rommem[11882] <= 12'hF19;
rommem[11883] <= 12'h03F;
rommem[11884] <= 12'h004;
rommem[11885] <= 12'h020;
rommem[11886] <= 12'h086;
rommem[11887] <= 12'h08D;
rommem[11888] <= 12'hF70;
rommem[11889] <= 12'h0FC;
rommem[11890] <= 12'h000;
rommem[11891] <= 12'h942;
rommem[11892] <= 12'h0FD;
rommem[11893] <= 12'h000;
rommem[11894] <= 12'h946;
rommem[11895] <= 12'h0FC;
rommem[11896] <= 12'h000;
rommem[11897] <= 12'h940;
rommem[11898] <= 12'h0FD;
rommem[11899] <= 12'h000;
rommem[11900] <= 12'h944;
rommem[11901] <= 12'h020;
rommem[11902] <= 12'h083;
rommem[11903] <= 12'h08D;
rommem[11904] <= 12'hF76;
rommem[11905] <= 12'h0FC;
rommem[11906] <= 12'h000;
rommem[11907] <= 12'h942;
rommem[11908] <= 12'h0FD;
rommem[11909] <= 12'h000;
rommem[11910] <= 12'h946;
rommem[11911] <= 12'h0FC;
rommem[11912] <= 12'h000;
rommem[11913] <= 12'h940;
rommem[11914] <= 12'h0FD;
rommem[11915] <= 12'h000;
rommem[11916] <= 12'h944;
rommem[11917] <= 12'h020;
rommem[11918] <= 12'h073;
rommem[11919] <= 12'h07F;
rommem[11920] <= 12'h000;
rommem[11921] <= 12'h94E;
rommem[11922] <= 12'h017;
rommem[11923] <= 12'h000;
rommem[11924] <= 12'h6FC;
rommem[11925] <= 12'h05D;
rommem[11926] <= 12'h027;
rommem[11927] <= 12'h009;
rommem[11928] <= 12'h07C;
rommem[11929] <= 12'h000;
rommem[11930] <= 12'h94E;
rommem[11931] <= 12'h0FC;
rommem[11932] <= 12'h000;
rommem[11933] <= 12'h912;
rommem[11934] <= 12'h0FD;
rommem[11935] <= 12'h000;
rommem[11936] <= 12'h950;
rommem[11937] <= 12'h07F;
rommem[11938] <= 12'h000;
rommem[11939] <= 12'h94A;
rommem[11940] <= 12'h0CC;
rommem[11941] <= 12'hFFE;
rommem[11942] <= 12'hF05;
rommem[11943] <= 12'h03F;
rommem[11944] <= 12'h004;
rommem[11945] <= 12'h07F;
rommem[11946] <= 12'h000;
rommem[11947] <= 12'h94C;
rommem[11948] <= 12'h08D;
rommem[11949] <= 12'hEB9;
rommem[11950] <= 12'h0C1;
rommem[11951] <= 12'h01A;
rommem[11952] <= 12'h027;
rommem[11953] <= 12'h050;
rommem[11954] <= 12'h07F;
rommem[11955] <= 12'h000;
rommem[11956] <= 12'h94B;
rommem[11957] <= 12'h0C1;
rommem[11958] <= 12'h043;
rommem[11959] <= 12'h026;
rommem[11960] <= 12'h03C;
rommem[11961] <= 12'h08D;
rommem[11962] <= 12'hEAC;
rommem[11963] <= 12'h0C1;
rommem[11964] <= 12'h030;
rommem[11965] <= 12'h025;
rommem[11966] <= 12'h036;
rommem[11967] <= 12'h0C1;
rommem[11968] <= 12'h039;
rommem[11969] <= 12'h022;
rommem[11970] <= 12'h032;
rommem[11971] <= 12'h0F7;
rommem[11972] <= 12'h000;
rommem[11973] <= 12'h948;
rommem[11974] <= 12'h08D;
rommem[11975] <= 12'hEDB;
rommem[11976] <= 12'h08D;
rommem[11977] <= 12'hECF;
rommem[11978] <= 12'h0F7;
rommem[11979] <= 12'h000;
rommem[11980] <= 12'h949;
rommem[11981] <= 12'h07D;
rommem[11982] <= 12'h000;
rommem[11983] <= 12'h94A;
rommem[11984] <= 12'h026;
rommem[11985] <= 12'h030;
rommem[11986] <= 12'h0F6;
rommem[11987] <= 12'h000;
rommem[11988] <= 12'h948;
rommem[11989] <= 12'h0C1;
rommem[11990] <= 12'h030;
rommem[11991] <= 12'h027;
rommem[11992] <= 12'h01C;
rommem[11993] <= 12'h0C1;
rommem[11994] <= 12'h031;
rommem[11995] <= 12'h027;
rommem[11996] <= 12'hF6C;
rommem[11997] <= 12'h0C1;
rommem[11998] <= 12'h032;
rommem[11999] <= 12'h027;
rommem[12000] <= 12'hF7B;
rommem[12001] <= 12'h0C1;
rommem[12002] <= 12'h033;
rommem[12003] <= 12'h027;
rommem[12004] <= 12'h010;
rommem[12005] <= 12'h0C1;
rommem[12006] <= 12'h035;
rommem[12007] <= 12'h027;
rommem[12008] <= 12'h00C;
rommem[12009] <= 12'h0C1;
rommem[12010] <= 12'h037;
rommem[12011] <= 12'h027;
rommem[12012] <= 12'h015;
rommem[12013] <= 12'h0C1;
rommem[12014] <= 12'h038;
rommem[12015] <= 12'h027;
rommem[12016] <= 12'hF8E;
rommem[12017] <= 12'h0C1;
rommem[12018] <= 12'h039;
rommem[12019] <= 12'h027;
rommem[12020] <= 12'hF7A;
rommem[12021] <= 12'h0C6;
rommem[12022] <= 12'h02E;
rommem[12023] <= 12'h03F;
rommem[12024] <= 12'h002;
rommem[12025] <= 12'h08D;
rommem[12026] <= 12'hE84;
rommem[12027] <= 12'h07D;
rommem[12028] <= 12'h000;
rommem[12029] <= 12'h000;
rommem[12030] <= 12'h000;
rommem[12031] <= 12'h000;
rommem[12032] <= 12'h000;
rommem[12033] <= 12'h000;
rommem[12034] <= 12'h000;
rommem[12029] <= 12'h94A;
rommem[12030] <= 12'h026;
rommem[12031] <= 12'h002;
rommem[12032] <= 12'h020;
rommem[12033] <= 12'hFAA;
rommem[12034] <= 12'h016;
rommem[12035] <= 12'h000;
rommem[12036] <= 12'h000;
rommem[12037] <= 12'h000;
rommem[12038] <= 12'h000;
rommem[12039] <= 12'h000;
rommem[12040] <= 12'h000;
rommem[12041] <= 12'h000;
rommem[12042] <= 12'h000;
rommem[12043] <= 12'h000;
rommem[12044] <= 12'h000;
rommem[12045] <= 12'h000;
rommem[12046] <= 12'h000;
rommem[12047] <= 12'h000;
rommem[12048] <= 12'h000;
rommem[12049] <= 12'h000;
rommem[12050] <= 12'h000;
rommem[12051] <= 12'h000;
rommem[12052] <= 12'h000;
rommem[12053] <= 12'h000;
rommem[12054] <= 12'h000;
rommem[12055] <= 12'h000;
rommem[12036] <= 12'h457;
rommem[12037] <= 12'h053;
rommem[12038] <= 12'h031;
rommem[12039] <= 12'h039;
rommem[12040] <= 12'h020;
rommem[12041] <= 12'h04C;
rommem[12042] <= 12'h06F;
rommem[12043] <= 12'h061;
rommem[12044] <= 12'h064;
rommem[12045] <= 12'h065;
rommem[12046] <= 12'h072;
rommem[12047] <= 12'h020;
rommem[12048] <= 12'h041;
rommem[12049] <= 12'h063;
rommem[12050] <= 12'h074;
rommem[12051] <= 12'h069;
rommem[12052] <= 12'h076;
rommem[12053] <= 12'h065;
rommem[12054] <= 12'h00D;
rommem[12055] <= 12'h00A;
rommem[12056] <= 12'h000;
rommem[12057] <= 12'h000;
rommem[12058] <= 12'h000;
rommem[12059] <= 12'h000;
rommem[12060] <= 12'h000;
rommem[12061] <= 12'h000;
rommem[12062] <= 12'h000;
rommem[12063] <= 12'h000;
rommem[12064] <= 12'h000;
rommem[12065] <= 12'h000;
rommem[12066] <= 12'hFFE;
rommem[12067] <= 12'hF3F;
rommem[12068] <= 12'h000;
rommem[12069] <= 12'h000;
rommem[12070] <= 12'hFFE;
rommem[12071] <= 12'hF28;
rommem[12072] <= 12'h015;
rommem[12073] <= 12'h0F6;
rommem[12074] <= 12'hFFF;
rommem[12075] <= 12'hFFF;
rommem[12076] <= 12'hFE0;
rommem[12077] <= 12'h08E;
rommem[12078] <= 12'hFFC;
rommem[12079] <= 12'h000;
rommem[12080] <= 12'h03A;
rommem[12081] <= 12'h0A7;
rommem[12082] <= 12'h804;
rommem[12083] <= 12'h07D;
rommem[12084] <= 12'hFFC;
rommem[12085] <= 12'h010;
rommem[12086] <= 12'h126;
rommem[12057] <= 12'h053;
rommem[12058] <= 12'h031;
rommem[12059] <= 12'h039;
rommem[12060] <= 12'h020;
rommem[12061] <= 12'h043;
rommem[12062] <= 12'h068;
rommem[12063] <= 12'h065;
rommem[12064] <= 12'h063;
rommem[12065] <= 12'h06B;
rommem[12066] <= 12'h073;
rommem[12067] <= 12'h075;
rommem[12068] <= 12'h06D;
rommem[12069] <= 12'h020;
rommem[12070] <= 12'h045;
rommem[12071] <= 12'h072;
rommem[12072] <= 12'h072;
rommem[12073] <= 12'h00D;
rommem[12074] <= 12'h00A;
rommem[12075] <= 12'h000;
rommem[12076] <= 12'h017;
rommem[12077] <= 12'h000;
rommem[12078] <= 12'h5A3;
rommem[12079] <= 12'h0BE;
rommem[12080] <= 12'h000;
rommem[12081] <= 12'h922;
rommem[12082] <= 12'h01F;
rommem[12083] <= 12'h013;
rommem[12084] <= 12'h0C6;
rommem[12085] <= 12'h001;
rommem[12086] <= 12'h0F7;
rommem[12087] <= 12'h000;
rommem[12088] <= 12'h7D1;
rommem[12089] <= 12'h0F7;
rommem[12090] <= 12'hFFC;
rommem[12091] <= 12'h010;
rommem[12092] <= 12'h016;
rommem[12093] <= 12'h000;
rommem[12094] <= 12'h7CB;
rommem[12088] <= 12'h9FB;
rommem[12089] <= 12'h0CC;
rommem[12090] <= 12'hFFF;
rommem[12091] <= 12'hFFF;
rommem[12092] <= 12'h03F;
rommem[12093] <= 12'h001;
rommem[12094] <= 12'h0C1;
rommem[12095] <= 12'h015;
rommem[12096] <= 12'h0F6;
rommem[12097] <= 12'hFFF;
rommem[12098] <= 12'hFFF;
rommem[12099] <= 12'hFE0;
rommem[12100] <= 12'h08E;
rommem[12101] <= 12'hFFC;
rommem[12102] <= 12'h000;
rommem[12103] <= 12'h03A;
rommem[12104] <= 12'h06F;
rommem[12105] <= 12'h804;
rommem[12106] <= 12'h017;
rommem[12107] <= 12'hFFF;
rommem[12108] <= 12'h2BC;
rommem[12109] <= 12'h0F1;
rommem[12110] <= 12'hFFC;
rommem[12111] <= 12'h010;
rommem[12112] <= 12'h126;
rommem[12113] <= 12'h000;
rommem[12114] <= 12'h7B7;
rommem[12115] <= 12'h086;
rommem[12116] <= 12'h00F;
rommem[12117] <= 12'h05C;
rommem[12118] <= 12'h0C4;
rommem[12119] <= 12'h00F;
rommem[12120] <= 12'h03A;
rommem[12121] <= 12'h06D;
rommem[12122] <= 12'h804;
rommem[12123] <= 12'h026;
rommem[12124] <= 12'h009;
rommem[12125] <= 12'h04A;
rommem[12126] <= 12'h026;
rommem[12127] <= 12'hFF5;
rommem[12128] <= 12'h0C6;
rommem[12129] <= 12'h001;
rommem[12130] <= 12'h086;
rommem[12131] <= 12'h018;
rommem[12132] <= 12'h0A7;
rommem[12133] <= 12'h804;
rommem[12134] <= 12'h0F7;
rommem[12135] <= 12'hFFC;
rommem[12136] <= 12'h010;
rommem[12137] <= 12'h017;
rommem[12138] <= 12'hFFF;
rommem[12139] <= 12'h266;
rommem[12140] <= 12'h016;
rommem[12141] <= 12'h000;
rommem[12142] <= 12'h79B;
rommem[12143] <= 12'h18E;
rommem[12144] <= 12'h000;
rommem[12145] <= 12'h000;
rommem[12146] <= 12'h015;
rommem[12147] <= 12'h1BF;
rommem[12148] <= 12'hFFF;
rommem[12149] <= 12'hE30;
rommem[12150] <= 12'h604;
rommem[12151] <= 12'h015;
rommem[12152] <= 12'h07F;
rommem[12153] <= 12'hFFF;
rommem[12154] <= 12'hE30;
rommem[12155] <= 12'h608;
rommem[12156] <= 12'h015;
rommem[12157] <= 12'h07F;
rommem[12158] <= 12'hFFF;
rommem[12159] <= 12'hE30;
rommem[12160] <= 12'h609;
rommem[12161] <= 12'h015;
rommem[12162] <= 12'h0FD;
rommem[12163] <= 12'hFFF;
rommem[12164] <= 12'hE30;
rommem[12165] <= 12'h60A;
rommem[12166] <= 12'h015;
rommem[12167] <= 12'h07F;
rommem[12168] <= 12'hFFF;
rommem[12169] <= 12'hE30;
rommem[12170] <= 12'h60C;
rommem[12171] <= 12'h015;
rommem[12172] <= 12'h07F;
rommem[12173] <= 12'hFFF;
rommem[12174] <= 12'hE30;
rommem[12175] <= 12'h60D;
rommem[12176] <= 12'h015;
rommem[12177] <= 12'h0BF;
rommem[12178] <= 12'hFFF;
rommem[12179] <= 12'hE30;
rommem[12180] <= 12'h60E;
rommem[12181] <= 12'h031;
rommem[12182] <= 12'h201;
rommem[12183] <= 12'h18C;
rommem[12184] <= 12'h000;
rommem[12185] <= 12'h400;
rommem[12186] <= 12'h025;
rommem[12187] <= 12'hFD6;
rommem[12188] <= 12'h039;
rommem[12189] <= 12'h015;
rommem[12190] <= 12'h0FD;
rommem[12191] <= 12'hFFF;
rommem[12192] <= 12'hE30;
rommem[12193] <= 12'h604;
rommem[12194] <= 12'h015;
rommem[12195] <= 12'h0BE;
rommem[12196] <= 12'hFFF;
rommem[12197] <= 12'hE30;
rommem[12198] <= 12'h600;
rommem[12199] <= 12'h015;
rommem[12200] <= 12'h0FC;
rommem[12201] <= 12'hFFF;
rommem[12202] <= 12'hE30;
rommem[12203] <= 12'h602;
rommem[12204] <= 12'h015;
rommem[12205] <= 12'h0F7;
rommem[12206] <= 12'hFFF;
rommem[12207] <= 12'hE30;
rommem[12208] <= 12'h603;
rommem[12209] <= 12'h039;
rommem[12210] <= 12'h03C;
rommem[12211] <= 12'h83E;
rommem[12212] <= 12'h062;
rommem[12213] <= 12'h873;
rommem[12214] <= 12'h062;
rommem[12215] <= 12'h863;
rommem[12216] <= 12'h044;
rommem[12217] <= 12'h852;
rommem[12218] <= 12'h844;
rommem[12219] <= 12'h83A;
rommem[12220] <= 12'h046;
rommem[12221] <= 12'h049;
rommem[12222] <= 12'h847;
rommem[12223] <= 12'h046;
rommem[12224] <= 12'h049;
rommem[12225] <= 12'h84C;
rommem[12226] <= 12'h046;
rommem[12227] <= 12'h84C;
rommem[12228] <= 12'h84A;
rommem[12229] <= 12'h052;
rommem[12230] <= 12'h041;
rommem[12231] <= 12'h04D;
rommem[12232] <= 12'h054;
rommem[12233] <= 12'h045;
rommem[12234] <= 12'h053;
rommem[12235] <= 12'h854;
rommem[12236] <= 12'h053;
rommem[12237] <= 12'h050;
rommem[12238] <= 12'h844;
rommem[12239] <= 12'h054;
rommem[12240] <= 12'h049;
rommem[12241] <= 12'h852;
rommem[12242] <= 12'h855;
rommem[12243] <= 12'h065;
rommem[12244] <= 12'h078;
rommem[12245] <= 12'h069;
rommem[12246] <= 12'h874;
rommem[12247] <= 12'h83F;
rommem[12248] <= 12'h043;
rommem[12249] <= 12'h04C;
rommem[12250] <= 12'h853;
rommem[12251] <= 12'h053;
rommem[12252] <= 12'h031;
rommem[12253] <= 12'h839;
rommem[12254] <= 12'h04A;
rommem[12255] <= 12'h044;
rommem[12256] <= 12'h834;
rommem[12257] <= 12'h000;
rommem[12258] <= 12'h000;
rommem[12259] <= 12'hFFF;
rommem[12260] <= 12'h0F8;
rommem[12261] <= 12'hFFF;
rommem[12262] <= 12'h13A;
rommem[12263] <= 12'hFFF;
rommem[12264] <= 12'h145;
rommem[12265] <= 12'hFFF;
rommem[12266] <= 12'h54A;
rommem[12267] <= 12'hFFF;
rommem[12268] <= 12'h484;
rommem[12269] <= 12'hFFF;
rommem[12270] <= 12'h4E0;
rommem[12271] <= 12'hFE0;
rommem[12272] <= 12'h000;
rommem[12273] <= 12'hFFF;
rommem[12274] <= 12'h520;
rommem[12275] <= 12'hFFF;
rommem[12276] <= 12'h60B;
rommem[12277] <= 12'hFFF;
rommem[12278] <= 12'h595;
rommem[12279] <= 12'hFFD;
rommem[12280] <= 12'h400;
rommem[12281] <= 12'hFF8;
rommem[12282] <= 12'h000;
rommem[12283] <= 12'hFFE;
rommem[12284] <= 12'h4F4;
rommem[12285] <= 12'hFF8;
rommem[12286] <= 12'h003;
rommem[12287] <= 12'hFFF;
rommem[12288] <= 12'h6F3;
rommem[12289] <= 12'hFFF;
rommem[12290] <= 12'h11E;
rommem[12291] <= 12'hFFF;
rommem[12292] <= 12'h126;
rommem[12293] <= 12'hFFE;
rommem[12294] <= 12'hE37;
rommem[12295] <= 12'hFFD;
rommem[12296] <= 12'h400;
rommem[12297] <= 12'h017;
rommem[12298] <= 12'hFFE;
rommem[12299] <= 12'h0C6;
rommem[12300] <= 12'h0C6;
rommem[12301] <= 12'h024;
rommem[12302] <= 12'h017;
rommem[12303] <= 12'hFFF;
rommem[12304] <= 12'hED0;
rommem[12305] <= 12'h016;
rommem[12306] <= 12'hFFF;
rommem[12307] <= 12'hECD;
rommem[12308] <= 12'h046;
rommem[12309] <= 12'h065;
rommem[12310] <= 12'h06D;
rommem[12311] <= 12'h074;
rommem[12312] <= 12'h069;
rommem[12313] <= 12'h06B;
rommem[12314] <= 12'h069;
rommem[12315] <= 12'h020;
rommem[12316] <= 12'h046;
rommem[12317] <= 12'h030;
rommem[12318] <= 12'h039;
rommem[12319] <= 12'h020;
rommem[12320] <= 12'h04D;
rommem[12321] <= 12'h075;
rommem[12322] <= 12'h06C;
rommem[12323] <= 12'h074;
rommem[12324] <= 12'h069;
rommem[12325] <= 12'h02D;
rommem[12326] <= 12'h063;
rommem[12327] <= 12'h06F;
rommem[12328] <= 12'h072;
rommem[12329] <= 12'h065;
rommem[12330] <= 12'h020;
rommem[12331] <= 12'h04F;
rommem[12332] <= 12'h053;
rommem[12333] <= 12'h020;
rommem[12334] <= 12'h053;
rommem[12335] <= 12'h074;
rommem[12336] <= 12'h061;
rommem[12337] <= 12'h072;
rommem[12338] <= 12'h074;
rommem[12339] <= 12'h069;
rommem[12340] <= 12'h06E;
rommem[12341] <= 12'h067;
rommem[12342] <= 12'h00D;
rommem[12343] <= 12'h00A;
rommem[12344] <= 12'h000;
rommem[12345] <= 12'h0FC;
rommem[12346] <= 12'h000;
rommem[12347] <= 12'h92C;
rommem[12348] <= 12'h183;
rommem[12349] <= 12'h12D;
rommem[12350] <= 12'h687;
rommem[12351] <= 12'h027;
rommem[12352] <= 12'h04D;
rommem[12353] <= 12'h07F;
rommem[12354] <= 12'h000;
rommem[12355] <= 12'h810;
rommem[12356] <= 12'h07F;
rommem[12357] <= 12'h000;
rommem[12358] <= 12'h811;
rommem[12359] <= 12'h0CC;
rommem[12360] <= 12'h000;
rommem[12361] <= 12'h07B;
rommem[12362] <= 12'h08E;
rommem[12096] <= 12'h027;
rommem[12097] <= 12'h004;
rommem[12098] <= 12'h0C1;
rommem[12099] <= 12'h043;
rommem[12100] <= 12'h026;
rommem[12101] <= 12'hFF3;
rommem[12102] <= 12'h0F7;
rommem[12103] <= 12'h000;
rommem[12104] <= 12'h9F5;
rommem[12105] <= 12'h0C6;
rommem[12106] <= 12'h001;
rommem[12107] <= 12'h03F;
rommem[12108] <= 12'h1C9;
rommem[12109] <= 12'h0F6;
rommem[12110] <= 12'h000;
rommem[12111] <= 12'h9FB;
rommem[12112] <= 12'h03F;
rommem[12113] <= 12'h002;
rommem[12114] <= 12'h053;
rommem[12115] <= 12'h03F;
rommem[12116] <= 12'h002;
rommem[12117] <= 12'h04F;
rommem[12118] <= 12'h01F;
rommem[12119] <= 12'h013;
rommem[12120] <= 12'h0E6;
rommem[12121] <= 12'hC00;
rommem[12122] <= 12'h03F;
rommem[12123] <= 12'h002;
rommem[12124] <= 12'h04C;
rommem[12125] <= 12'h081;
rommem[12126] <= 12'h080;
rommem[12127] <= 12'h025;
rommem[12128] <= 12'hFF7;
rommem[12129] <= 12'h0F6;
rommem[12130] <= 12'h000;
rommem[12131] <= 12'h9F5;
rommem[12132] <= 12'h0C1;
rommem[12133] <= 12'h043;
rommem[12134] <= 12'h026;
rommem[12135] <= 12'h01E;
rommem[12136] <= 12'h08D;
rommem[12137] <= 12'h17F;
rommem[12138] <= 12'h0FC;
rommem[12139] <= 12'h000;
rommem[12140] <= 12'h9FE;
rommem[12141] <= 12'h044;
rommem[12142] <= 12'h056;
rommem[12143] <= 12'h044;
rommem[12144] <= 12'h056;
rommem[12145] <= 12'h044;
rommem[12146] <= 12'h056;
rommem[12147] <= 12'h044;
rommem[12148] <= 12'h056;
rommem[12149] <= 12'h044;
rommem[12150] <= 12'h056;
rommem[12151] <= 12'h044;
rommem[12152] <= 12'h056;
rommem[12153] <= 12'h044;
rommem[12154] <= 12'h056;
rommem[12155] <= 12'h044;
rommem[12156] <= 12'h056;
rommem[12157] <= 12'h03F;
rommem[12158] <= 12'h002;
rommem[12159] <= 12'h0FC;
rommem[12160] <= 12'h000;
rommem[12161] <= 12'h9FE;
rommem[12162] <= 12'h03F;
rommem[12163] <= 12'h002;
rommem[12164] <= 12'h020;
rommem[12165] <= 12'h007;
rommem[12166] <= 12'h08D;
rommem[12167] <= 12'h14F;
rommem[12168] <= 12'h0F6;
rommem[12169] <= 12'h000;
rommem[12170] <= 12'h9F7;
rommem[12171] <= 12'h03F;
rommem[12172] <= 12'h002;
rommem[12173] <= 12'h03F;
rommem[12174] <= 12'h0CC;
rommem[12175] <= 12'hFFF;
rommem[12176] <= 12'hFFF;
rommem[12177] <= 12'h001;
rommem[12178] <= 12'h0C1;
rommem[12179] <= 12'h006;
rommem[12180] <= 12'h026;
rommem[12181] <= 12'hFB3;
rommem[12182] <= 12'h07C;
rommem[12183] <= 12'h000;
rommem[12184] <= 12'h9FA;
rommem[12185] <= 12'h030;
rommem[12186] <= 12'h080;
rommem[12187] <= 12'h0BC;
rommem[12188] <= 12'h000;
rommem[12189] <= 12'h926;
rommem[12190] <= 12'h025;
rommem[12191] <= 12'hFA9;
rommem[12192] <= 12'h0C6;
rommem[12193] <= 12'h004;
rommem[12194] <= 12'h03F;
rommem[12195] <= 12'h002;
rommem[12196] <= 12'h03F;
rommem[12197] <= 12'h002;
rommem[12198] <= 12'h03F;
rommem[12199] <= 12'h002;
rommem[12200] <= 12'h039;
rommem[12201] <= 12'h07D;
rommem[12202] <= 12'hFFC;
rommem[12203] <= 12'h020;
rommem[12204] <= 12'h02B;
rommem[12205] <= 12'h009;
rommem[12206] <= 12'h04F;
rommem[12207] <= 12'h05F;
rommem[12208] <= 12'h03F;
rommem[12209] <= 12'h001;
rommem[12210] <= 12'h02B;
rommem[12211] <= 12'hFF5;
rommem[12212] <= 12'h08D;
rommem[12213] <= 12'h1BA;
rommem[12214] <= 12'h039;
rommem[12215] <= 12'h0C6;
rommem[12216] <= 12'hFFF;
rommem[12217] <= 12'h039;
rommem[12218] <= 12'h017;
rommem[12219] <= 12'hFFF;
rommem[12220] <= 12'h1FB;
rommem[12221] <= 12'h017;
rommem[12222] <= 12'hFFF;
rommem[12223] <= 12'h1F8;
rommem[12224] <= 12'h017;
rommem[12225] <= 12'hFFF;
rommem[12226] <= 12'h1F5;
rommem[12227] <= 12'h017;
rommem[12228] <= 12'h000;
rommem[12229] <= 12'h5CB;
rommem[12230] <= 12'h05D;
rommem[12231] <= 12'h127;
rommem[12232] <= 12'h000;
rommem[12233] <= 12'h392;
rommem[12234] <= 12'h0BE;
rommem[12235] <= 12'h000;
rommem[12236] <= 12'h912;
rommem[12237] <= 12'h07F;
rommem[12238] <= 12'h000;
rommem[12239] <= 12'h9FA;
rommem[12240] <= 12'h086;
rommem[12241] <= 12'h043;
rommem[12242] <= 12'h0B7;
rommem[12243] <= 12'h000;
rommem[12244] <= 12'h9F5;
rommem[12245] <= 12'h086;
rommem[12246] <= 12'h002;
rommem[12247] <= 12'h0F6;
rommem[12248] <= 12'h000;
rommem[12249] <= 12'h9F5;
rommem[12250] <= 12'h03F;
rommem[12251] <= 12'h00D;
rommem[12252] <= 12'h07F;
rommem[12253] <= 12'hFFC;
rommem[12254] <= 12'h020;
rommem[12255] <= 12'h08D;
rommem[12256] <= 12'hFC8;
rommem[12257] <= 12'h05D;
rommem[12258] <= 12'h02B;
rommem[12259] <= 12'h0A1;
rommem[12260] <= 12'h0C1;
rommem[12261] <= 12'h001;
rommem[12262] <= 12'h027;
rommem[12263] <= 12'h012;
rommem[12264] <= 12'h0C1;
rommem[12265] <= 12'h004;
rommem[12266] <= 12'h027;
rommem[12267] <= 12'h092;
rommem[12268] <= 12'h0C1;
rommem[12269] <= 12'h018;
rommem[12270] <= 12'h027;
rommem[12271] <= 12'hFE5;
rommem[12272] <= 12'h0C1;
rommem[12273] <= 12'h017;
rommem[12274] <= 12'h027;
rommem[12275] <= 12'h08A;
rommem[12276] <= 12'h0C6;
rommem[12277] <= 12'h015;
rommem[12278] <= 12'h03F;
rommem[12279] <= 12'h00D;
rommem[12280] <= 12'h020;
rommem[12281] <= 12'hFE2;
rommem[12282] <= 12'h08D;
rommem[12283] <= 12'hFAD;
rommem[12284] <= 12'h02B;
rommem[12285] <= 12'h078;
rommem[12286] <= 12'h0F7;
rommem[12287] <= 12'h000;
rommem[12288] <= 12'h9FB;
rommem[12289] <= 12'h034;
rommem[12290] <= 12'h004;
rommem[12291] <= 12'h08D;
rommem[12292] <= 12'hFA4;
rommem[12293] <= 12'h02B;
rommem[12294] <= 12'h06D;
rommem[12295] <= 12'h0EB;
rommem[12296] <= 12'hE04;
rommem[12297] <= 12'h0C4;
rommem[12298] <= 12'h0FF;
rommem[12299] <= 12'h0C0;
rommem[12300] <= 12'h0FF;
rommem[12301] <= 12'h0F7;
rommem[12302] <= 12'h000;
rommem[12303] <= 12'h9F6;
rommem[12304] <= 12'h18E;
rommem[12305] <= 12'h000;
rommem[12306] <= 12'h000;
rommem[12307] <= 12'h01F;
rommem[12308] <= 12'h013;
rommem[12309] <= 12'h08D;
rommem[12310] <= 12'hF92;
rommem[12311] <= 12'h02B;
rommem[12312] <= 12'h05D;
rommem[12313] <= 12'h0E7;
rommem[12314] <= 12'hC00;
rommem[12315] <= 12'h031;
rommem[12316] <= 12'h201;
rommem[12317] <= 12'h18C;
rommem[12318] <= 12'h000;
rommem[12319] <= 12'h080;
rommem[12320] <= 12'h025;
rommem[12321] <= 12'hFF3;
rommem[12322] <= 12'h08D;
rommem[12323] <= 12'hF85;
rommem[12324] <= 12'h02B;
rommem[12325] <= 12'h050;
rommem[12326] <= 12'h0F7;
rommem[12327] <= 12'h000;
rommem[12328] <= 12'h9FC;
rommem[12329] <= 12'h0F6;
rommem[12330] <= 12'h000;
rommem[12331] <= 12'h9F5;
rommem[12332] <= 12'h0C1;
rommem[12333] <= 12'h043;
rommem[12334] <= 12'h026;
rommem[12335] <= 12'h022;
rommem[12336] <= 12'h08D;
rommem[12337] <= 12'hF77;
rommem[12338] <= 12'h02B;
rommem[12339] <= 12'h042;
rommem[12340] <= 12'h0B6;
rommem[12341] <= 12'h000;
rommem[12342] <= 12'h9FC;
rommem[12343] <= 12'h058;
rommem[12344] <= 12'h058;
rommem[12345] <= 12'h058;
rommem[12346] <= 12'h058;
rommem[12347] <= 12'h044;
rommem[12348] <= 12'h056;
rommem[12349] <= 12'h044;
rommem[12350] <= 12'h056;
rommem[12351] <= 12'h044;
rommem[12352] <= 12'h056;
rommem[12353] <= 12'h044;
rommem[12354] <= 12'h056;
rommem[12355] <= 12'h084;
rommem[12356] <= 12'h00F;
rommem[12357] <= 12'h0FD;
rommem[12358] <= 12'h000;
rommem[12359] <= 12'h9F8;
rommem[12360] <= 12'h08D;
rommem[12361] <= 12'h09F;
rommem[12362] <= 12'h0FC;
rommem[12363] <= 12'h000;
rommem[12364] <= 12'h28E;
rommem[12365] <= 12'h017;
rommem[12366] <= 12'hFFF;
rommem[12367] <= 12'hF1F;
rommem[12368] <= 12'h0CC;
rommem[12369] <= 12'hFFF;
rommem[12370] <= 12'h014;
rommem[12371] <= 12'h017;
rommem[12372] <= 12'hFFF;
rommem[12373] <= 12'h384;
rommem[12374] <= 12'h0CC;
rommem[12375] <= 12'hFFF;
rommem[12376] <= 12'h2CF;
rommem[12377] <= 12'h017;
rommem[12378] <= 12'hFFF;
rommem[12379] <= 12'h37E;
rommem[12380] <= 12'h0CC;
rommem[12381] <= 12'hFFF;
rommem[12382] <= 12'h009;
rommem[12383] <= 12'h0FD;
rommem[12384] <= 12'h000;
rommem[12385] <= 12'h808;
rommem[12386] <= 12'h0CC;
rommem[12387] <= 12'hFFF;
rommem[12388] <= 12'h2B6;
rommem[12389] <= 12'h0FD;
rommem[12364] <= 12'h9FE;
rommem[12365] <= 12'h1B3;
rommem[12366] <= 12'h000;
rommem[12367] <= 12'h9F8;
rommem[12368] <= 12'h020;
rommem[12369] <= 12'h008;
rommem[12370] <= 12'h08D;
rommem[12371] <= 12'h083;
rommem[12372] <= 12'h0F6;
rommem[12373] <= 12'h000;
rommem[12374] <= 12'h9F7;
rommem[12375] <= 12'h0F1;
rommem[12376] <= 12'h000;
rommem[12377] <= 12'h9FC;
rommem[12378] <= 12'h026;
rommem[12379] <= 12'hF98;
rommem[12380] <= 12'h07D;
rommem[12381] <= 12'h000;
rommem[12382] <= 12'h9F6;
rommem[12383] <= 12'h026;
rommem[12384] <= 12'hF93;
rommem[12385] <= 12'h0C6;
rommem[12386] <= 12'h006;
rommem[12387] <= 12'h03F;
rommem[12388] <= 12'h00D;
rommem[12389] <= 12'h0F6;
rommem[12390] <= 12'h000;
rommem[12391] <= 12'h80C;
rommem[12392] <= 12'h0CC;
rommem[12393] <= 12'h006;
rommem[12394] <= 12'h3FF;
rommem[12395] <= 12'h0FD;
rommem[12396] <= 12'h000;
rommem[12397] <= 12'h908;
rommem[12398] <= 12'h07F;
rommem[12399] <= 12'h000;
rommem[12400] <= 12'h90E;
rommem[12401] <= 12'h01F;
rommem[12402] <= 12'h0A8;
rommem[12403] <= 12'h0B7;
rommem[12404] <= 12'h000;
rommem[12405] <= 12'h90F;
rommem[12406] <= 12'h07F;
rommem[12407] <= 12'h000;
rommem[12408] <= 12'h90A;
rommem[12409] <= 12'h0CC;
rommem[12410] <= 12'hFFF;
rommem[12411] <= 12'h039;
rommem[12412] <= 12'h0FD;
rommem[12413] <= 12'h000;
rommem[12414] <= 12'h90B;
rommem[12415] <= 12'h07F;
rommem[12416] <= 12'h000;
rommem[12417] <= 12'h902;
rommem[12418] <= 12'h07F;
rommem[12391] <= 12'h9FB;
rommem[12392] <= 12'h0F1;
rommem[12393] <= 12'h000;
rommem[12394] <= 12'h9FA;
rommem[12395] <= 12'h027;
rommem[12396] <= 12'hF6F;
rommem[12397] <= 12'h0F7;
rommem[12398] <= 12'h000;
rommem[12399] <= 12'h9FA;
rommem[12400] <= 12'h030;
rommem[12401] <= 12'h080;
rommem[12402] <= 12'h020;
rommem[12403] <= 12'hF68;
rommem[12404] <= 12'h032;
rommem[12405] <= 12'h601;
rommem[12406] <= 12'h0CC;
rommem[12407] <= 12'hFFF;
rommem[12408] <= 12'h09E;
rommem[12409] <= 12'h03F;
rommem[12410] <= 12'h004;
rommem[12411] <= 12'h016;
rommem[12412] <= 12'h000;
rommem[12413] <= 12'h2DE;
rommem[12414] <= 12'h0C6;
rommem[12415] <= 12'h006;
rommem[12416] <= 12'h03F;
rommem[12417] <= 12'h00D;
rommem[12418] <= 12'h016;
rommem[12419] <= 12'h000;
rommem[12420] <= 12'h904;
rommem[12421] <= 12'h07F;
rommem[12422] <= 12'h000;
rommem[12423] <= 12'h906;
rommem[12424] <= 12'h0CC;
rommem[12425] <= 12'h12D;
rommem[12426] <= 12'h687;
rommem[12427] <= 12'h0FD;
rommem[12428] <= 12'h000;
rommem[12429] <= 12'h92C;
rommem[12430] <= 12'h032;
rommem[12431] <= 12'h80F;
rommem[12432] <= 12'h006;
rommem[12433] <= 12'hFFF;
rommem[12434] <= 12'h05F;
rommem[12435] <= 12'h017;
rommem[12436] <= 12'hFFF;
rommem[12437] <= 12'hE4F;
rommem[12420] <= 12'h2D7;
rommem[12421] <= 12'h04A;
rommem[12422] <= 12'h02A;
rommem[12423] <= 12'hF4F;
rommem[12424] <= 12'h0B6;
rommem[12425] <= 12'h000;
rommem[12426] <= 12'h9F5;
rommem[12427] <= 12'h081;
rommem[12428] <= 12'h015;
rommem[12429] <= 12'h027;
rommem[12430] <= 12'h007;
rommem[12431] <= 12'h086;
rommem[12432] <= 12'h015;
rommem[12433] <= 12'h0B7;
rommem[12434] <= 12'h000;
rommem[12435] <= 12'h9F5;
rommem[12436] <= 12'h020;
rommem[12437] <= 12'hF3F;
rommem[12438] <= 12'h0CC;
rommem[12439] <= 12'hFFE;
rommem[12440] <= 12'hC64;
rommem[12441] <= 12'h0FD;
rommem[12442] <= 12'h000;
rommem[12443] <= 12'h804;
rommem[12444] <= 12'h0CC;
rommem[12445] <= 12'hFFE;
rommem[12446] <= 12'h319;
rommem[12447] <= 12'h0FD;
rommem[12448] <= 12'h000;
rommem[12449] <= 12'h800;
rommem[12450] <= 12'h0CC;
rommem[12451] <= 12'hFFF;
rommem[12452] <= 12'h009;
rommem[12453] <= 12'h0FD;
rommem[12454] <= 12'h000;
rommem[12455] <= 12'h808;
rommem[12456] <= 12'h0AD;
rommem[12457] <= 12'h90F;
rommem[12458] <= 12'h000;
rommem[12459] <= 12'h808;
rommem[12460] <= 12'h0CC;
rommem[12461] <= 12'hFFF;
rommem[12462] <= 12'hFFF;
rommem[12463] <= 12'h017;
rommem[12464] <= 12'hFFF;
rommem[12465] <= 12'hDF7;
rommem[12466] <= 12'h0C1;
rommem[12467] <= 12'h00D;
rommem[12468] <= 12'h027;
rommem[12469] <= 12'h005;
rommem[12470] <= 12'h017;
rommem[12471] <= 12'hFFF;
rommem[12472] <= 12'hE28;
rommem[12439] <= 12'hFFF;
rommem[12440] <= 12'h0B2;
rommem[12441] <= 12'h03F;
rommem[12442] <= 12'h004;
rommem[12443] <= 12'h016;
rommem[12444] <= 12'h000;
rommem[12445] <= 12'h2BE;
rommem[12446] <= 12'h058;
rommem[12447] <= 12'h06D;
rommem[12448] <= 12'h06F;
rommem[12449] <= 12'h064;
rommem[12450] <= 12'h065;
rommem[12451] <= 12'h06D;
rommem[12452] <= 12'h03A;
rommem[12453] <= 12'h020;
rommem[12454] <= 12'h074;
rommem[12455] <= 12'h069;
rommem[12456] <= 12'h06D;
rommem[12457] <= 12'h065;
rommem[12458] <= 12'h064;
rommem[12459] <= 12'h020;
rommem[12460] <= 12'h06F;
rommem[12461] <= 12'h075;
rommem[12462] <= 12'h074;
rommem[12463] <= 12'h00D;
rommem[12464] <= 12'h00A;
rommem[12465] <= 12'h000;
rommem[12466] <= 12'h058;
rommem[12467] <= 12'h04D;
rommem[12468] <= 12'h06F;
rommem[12469] <= 12'h064;
rommem[12470] <= 12'h065;
rommem[12471] <= 12'h06D;
rommem[12472] <= 12'h03A;
rommem[12473] <= 12'h020;
rommem[12474] <= 12'hFF1;
rommem[12475] <= 12'h0CC;
rommem[12476] <= 12'h005;
rommem[12477] <= 12'h050;
rommem[12478] <= 12'h015;
rommem[12479] <= 12'h0FD;
rommem[12480] <= 12'hFFF;
rommem[12481] <= 12'hE60;
rommem[12482] <= 12'h001;
rommem[12483] <= 12'h00F;
rommem[12484] <= 12'h111;
rommem[12485] <= 12'h017;
rommem[12486] <= 12'hFFF;
rommem[12487] <= 12'h22A;
rommem[12488] <= 12'h01F;
rommem[12489] <= 12'h002;
rommem[12490] <= 12'h08D;
rommem[12491] <= 12'h067;
rommem[12492] <= 12'h0C1;
rommem[12493] <= 12'h024;
rommem[12494] <= 12'h027;
rommem[12495] <= 12'hFFA;
rommem[12496] <= 12'h031;
rommem[12497] <= 12'h3FF;
rommem[12498] <= 12'h01F;
rommem[12499] <= 12'h023;
rommem[12500] <= 12'h05F;
rommem[12501] <= 12'h08E;
rommem[12502] <= 12'hFFE;
rommem[12503] <= 12'hFB2;
rommem[12504] <= 12'h0A6;
rommem[12505] <= 12'hA00;
rommem[12506] <= 12'h06D;
rommem[12507] <= 12'h804;
rommem[12508] <= 12'h02B;
rommem[12509] <= 12'h00F;
rommem[12510] <= 12'h0A1;
rommem[12511] <= 12'h800;
rommem[12512] <= 12'h027;
rommem[12513] <= 12'hFF6;
rommem[12514] <= 12'h06D;
rommem[12515] <= 12'h800;
rommem[12516] <= 12'h027;
rommem[12517] <= 12'hF53;
rommem[12518] <= 12'h02A;
rommem[12519] <= 12'hFFA;
rommem[12520] <= 12'h05C;
rommem[12521] <= 12'h01F;
rommem[12522] <= 12'h032;
rommem[12523] <= 12'h020;
rommem[12524] <= 12'hFEB;
rommem[12525] <= 12'h0A8;
rommem[12526] <= 12'h804;
rommem[12527] <= 12'h048;
rommem[12528] <= 12'h026;
rommem[12529] <= 12'hFF0;
rommem[12530] <= 12'h058;
rommem[12531] <= 12'h08E;
rommem[12532] <= 12'hFFE;
rommem[12533] <= 12'hFE3;
rommem[12534] <= 12'h06E;
rommem[12535] <= 12'h905;
rommem[12536] <= 12'h08D;
rommem[12537] <= 12'h034;
rommem[12538] <= 12'h0C1;
rommem[12539] <= 12'h073;
rommem[12540] <= 12'h026;
rommem[12541] <= 12'h00E;
rommem[12542] <= 12'h0CC;
rommem[12543] <= 12'hFFE;
rommem[12544] <= 12'hC64;
rommem[12545] <= 12'h0FD;
rommem[12546] <= 12'h000;
rommem[12547] <= 12'h804;
rommem[12548] <= 12'h0CC;
rommem[12549] <= 12'hFFE;
rommem[12550] <= 12'hC88;
rommem[12551] <= 12'h0FD;
rommem[12552] <= 12'h000;
rommem[12553] <= 12'h800;
rommem[12554] <= 12'h020;
rommem[12555] <= 12'hF2D;
rommem[12556] <= 12'h0C1;
rommem[12557] <= 12'h063;
rommem[12558] <= 12'h026;
rommem[12559] <= 12'hF29;
rommem[12560] <= 12'h0CC;
rommem[12561] <= 12'hFFE;
rommem[12562] <= 12'hA92;
rommem[12563] <= 12'h0FD;
rommem[12564] <= 12'h000;
rommem[12565] <= 12'h804;
rommem[12566] <= 12'h0CC;
rommem[12567] <= 12'hFFE;
rommem[12568] <= 12'h319;
rommem[12569] <= 12'h0FD;
rommem[12570] <= 12'h000;
rommem[12571] <= 12'h800;
rommem[12572] <= 12'h020;
rommem[12573] <= 12'hF1B;
rommem[12574] <= 12'h0CC;
rommem[12575] <= 12'hFFF;
rommem[12576] <= 12'h2CF;
rommem[12577] <= 12'h017;
rommem[12578] <= 12'hFFF;
rommem[12579] <= 12'h2B6;
rommem[12580] <= 12'h020;
rommem[12581] <= 12'hF13;
rommem[12582] <= 12'h017;
rommem[12583] <= 12'hFFF;
rommem[12584] <= 12'h110;
rommem[12585] <= 12'h017;
rommem[12586] <= 12'hFFF;
rommem[12587] <= 12'h184;
rommem[12588] <= 12'h020;
rommem[12589] <= 12'hF0B;
rommem[12590] <= 12'h0E6;
rommem[12591] <= 12'hA04;
rommem[12592] <= 12'h031;
rommem[12593] <= 12'h201;
rommem[12594] <= 12'h039;
rommem[12595] <= 12'h08D;
rommem[12596] <= 12'hFF9;
rommem[12597] <= 12'h0C1;
rommem[12598] <= 12'h020;
rommem[12599] <= 12'h027;
rommem[12600] <= 12'hFFA;
rommem[12601] <= 12'h039;
rommem[12602] <= 12'h017;
rommem[12603] <= 12'h000;
rommem[12604] <= 12'h611;
rommem[12605] <= 12'h0C6;
rommem[12606] <= 12'hFFF;
rommem[12607] <= 12'h0F7;
rommem[12608] <= 12'h000;
rommem[12609] <= 12'h810;
rommem[12610] <= 12'h016;
rommem[12611] <= 12'hFFF;
rommem[12612] <= 12'hEF4;
rommem[12613] <= 12'h017;
rommem[12614] <= 12'h000;
rommem[12615] <= 12'h632;
rommem[12616] <= 12'h016;
rommem[12617] <= 12'hFFF;
rommem[12618] <= 12'hEEE;
rommem[12619] <= 12'h08D;
rommem[12620] <= 12'hFE1;
rommem[12621] <= 12'h0C1;
rommem[12474] <= 12'h074;
rommem[12475] <= 12'h072;
rommem[12476] <= 12'h061;
rommem[12477] <= 12'h06E;
rommem[12478] <= 12'h073;
rommem[12479] <= 12'h06D;
rommem[12480] <= 12'h069;
rommem[12481] <= 12'h074;
rommem[12482] <= 12'h074;
rommem[12483] <= 12'h065;
rommem[12484] <= 12'h072;
rommem[12485] <= 12'h020;
rommem[12486] <= 12'h06E;
rommem[12487] <= 12'h06F;
rommem[12488] <= 12'h074;
rommem[12489] <= 12'h020;
rommem[12490] <= 12'h072;
rommem[12491] <= 12'h065;
rommem[12492] <= 12'h073;
rommem[12493] <= 12'h070;
rommem[12494] <= 12'h06F;
rommem[12495] <= 12'h06E;
rommem[12496] <= 12'h064;
rommem[12497] <= 12'h069;
rommem[12498] <= 12'h06E;
rommem[12499] <= 12'h067;
rommem[12500] <= 12'h00D;
rommem[12501] <= 12'h00A;
rommem[12502] <= 12'h000;
rommem[12503] <= 12'h034;
rommem[12504] <= 12'h016;
rommem[12505] <= 12'h04F;
rommem[12506] <= 12'h05F;
rommem[12507] <= 12'h0EB;
rommem[12508] <= 12'h800;
rommem[12509] <= 12'h04C;
rommem[12510] <= 12'h081;
rommem[12511] <= 12'h080;
rommem[12512] <= 12'h025;
rommem[12513] <= 12'hFF9;
rommem[12514] <= 12'h0C4;
rommem[12515] <= 12'h0FF;
rommem[12516] <= 12'h0F7;
rommem[12517] <= 12'h000;
rommem[12518] <= 12'h9F7;
rommem[12519] <= 12'h035;
rommem[12520] <= 12'h096;
rommem[12521] <= 12'h034;
rommem[12522] <= 12'h076;
rommem[12523] <= 12'h07F;
rommem[12524] <= 12'h000;
rommem[12525] <= 12'h9FE;
rommem[12526] <= 12'h07F;
rommem[12527] <= 12'h000;
rommem[12528] <= 12'h9FF;
rommem[12529] <= 12'h0CE;
rommem[12530] <= 12'h000;
rommem[12531] <= 12'h000;
rommem[12532] <= 12'h0E6;
rommem[12533] <= 12'h800;
rommem[12534] <= 12'h07F;
rommem[12535] <= 12'h000;
rommem[12536] <= 12'h9FC;
rommem[12537] <= 12'h0F7;
rommem[12538] <= 12'h000;
rommem[12539] <= 12'h9FD;
rommem[12540] <= 12'h078;
rommem[12541] <= 12'h000;
rommem[12542] <= 12'h9FD;
rommem[12543] <= 12'h079;
rommem[12544] <= 12'h000;
rommem[12545] <= 12'h9FC;
rommem[12546] <= 12'h078;
rommem[12547] <= 12'h000;
rommem[12548] <= 12'h9FD;
rommem[12549] <= 12'h079;
rommem[12550] <= 12'h000;
rommem[12551] <= 12'h9FC;
rommem[12552] <= 12'h078;
rommem[12553] <= 12'h000;
rommem[12554] <= 12'h9FD;
rommem[12555] <= 12'h079;
rommem[12556] <= 12'h000;
rommem[12557] <= 12'h9FC;
rommem[12558] <= 12'h078;
rommem[12559] <= 12'h000;
rommem[12560] <= 12'h9FD;
rommem[12561] <= 12'h079;
rommem[12562] <= 12'h000;
rommem[12563] <= 12'h9FC;
rommem[12564] <= 12'h078;
rommem[12565] <= 12'h000;
rommem[12566] <= 12'h9FD;
rommem[12567] <= 12'h079;
rommem[12568] <= 12'h000;
rommem[12569] <= 12'h9FC;
rommem[12570] <= 12'h078;
rommem[12571] <= 12'h000;
rommem[12572] <= 12'h9FD;
rommem[12573] <= 12'h079;
rommem[12574] <= 12'h000;
rommem[12575] <= 12'h9FC;
rommem[12576] <= 12'h078;
rommem[12577] <= 12'h000;
rommem[12578] <= 12'h9FD;
rommem[12579] <= 12'h079;
rommem[12580] <= 12'h000;
rommem[12581] <= 12'h9FC;
rommem[12582] <= 12'h078;
rommem[12583] <= 12'h000;
rommem[12584] <= 12'h9FD;
rommem[12585] <= 12'h079;
rommem[12586] <= 12'h000;
rommem[12587] <= 12'h9FC;
rommem[12588] <= 12'h0FC;
rommem[12589] <= 12'h000;
rommem[12590] <= 12'h9FE;
rommem[12591] <= 12'h0B8;
rommem[12592] <= 12'h000;
rommem[12593] <= 12'h9FC;
rommem[12594] <= 12'h0F8;
rommem[12595] <= 12'h000;
rommem[12596] <= 12'h9FD;
rommem[12597] <= 12'h0FD;
rommem[12598] <= 12'h000;
rommem[12599] <= 12'h9FE;
rommem[12600] <= 12'h18E;
rommem[12601] <= 12'h000;
rommem[12602] <= 12'h000;
rommem[12603] <= 12'h0F6;
rommem[12604] <= 12'h000;
rommem[12605] <= 12'h9FE;
rommem[12606] <= 12'h0C5;
rommem[12607] <= 12'h008;
rommem[12608] <= 12'h027;
rommem[12609] <= 12'h00E;
rommem[12610] <= 12'h0FC;
rommem[12611] <= 12'h000;
rommem[12612] <= 12'h9FE;
rommem[12613] <= 12'h058;
rommem[12614] <= 12'h049;
rommem[12615] <= 12'h0C8;
rommem[12616] <= 12'h021;
rommem[12617] <= 12'h088;
rommem[12618] <= 12'h001;
rommem[12619] <= 12'h0FD;
rommem[12620] <= 12'h000;
rommem[12621] <= 12'h9FE;
rommem[12622] <= 12'h020;
rommem[12623] <= 12'h027;
rommem[12624] <= 12'hFFA;
rommem[12625] <= 12'h031;
rommem[12626] <= 12'h3FF;
rommem[12627] <= 12'h039;
rommem[12628] <= 12'h034;
rommem[12629] <= 12'h006;
rommem[12630] <= 12'h0FC;
rommem[12631] <= 12'h000;
rommem[12632] <= 12'h910;
rommem[12633] <= 12'h0FD;
rommem[12634] <= 12'h000;
rommem[12635] <= 12'h918;
rommem[12636] <= 12'h0FC;
rommem[12637] <= 12'h000;
rommem[12638] <= 12'h912;
rommem[12639] <= 12'h0FD;
rommem[12640] <= 12'h000;
rommem[12641] <= 12'h91A;
rommem[12642] <= 12'h08D;
rommem[12643] <= 12'h05B;
rommem[12644] <= 12'h08D;
rommem[12645] <= 12'h059;
rommem[12646] <= 12'h0FC;
rommem[12647] <= 12'h000;
rommem[12648] <= 12'h912;
rommem[12649] <= 12'h0F3;
rommem[12623] <= 12'h008;
rommem[12624] <= 12'h0FC;
rommem[12625] <= 12'h000;
rommem[12626] <= 12'h9FE;
rommem[12627] <= 12'h058;
rommem[12628] <= 12'h049;
rommem[12629] <= 12'h0FD;
rommem[12630] <= 12'h000;
rommem[12631] <= 12'h9FE;
rommem[12632] <= 12'h031;
rommem[12633] <= 12'h201;
rommem[12634] <= 12'h18C;
rommem[12635] <= 12'h000;
rommem[12636] <= 12'h008;
rommem[12637] <= 12'h025;
rommem[12638] <= 12'hFDC;
rommem[12639] <= 12'h033;
rommem[12640] <= 12'h401;
rommem[12641] <= 12'h283;
rommem[12642] <= 12'h000;
rommem[12643] <= 12'h080;
rommem[12644] <= 12'h0FC;
rommem[12645] <= 12'h000;
rommem[12646] <= 12'h9FE;
rommem[12647] <= 12'h084;
rommem[12648] <= 12'h00F;
rommem[12649] <= 12'h0FD;
rommem[12650] <= 12'h000;
rommem[12651] <= 12'h91A;
rommem[12652] <= 12'h0F6;
rommem[12653] <= 12'h000;
rommem[12654] <= 12'h911;
rommem[12655] <= 12'h0F9;
rommem[12656] <= 12'h000;
rommem[12657] <= 12'h919;
rommem[12658] <= 12'h0F7;
rommem[12651] <= 12'h9FE;
rommem[12652] <= 12'h025;
rommem[12653] <= 12'hF86;
rommem[12654] <= 12'h035;
rommem[12655] <= 12'h0F6;
rommem[12656] <= 12'h034;
rommem[12657] <= 12'h006;
rommem[12658] <= 12'h0FC;
rommem[12659] <= 12'h000;
rommem[12660] <= 12'h911;
rommem[12661] <= 12'h0B6;
rommem[12662] <= 12'h000;
rommem[12663] <= 12'h910;
rommem[12664] <= 12'h0B9;
rommem[12665] <= 12'h000;
rommem[12666] <= 12'h918;
rommem[12667] <= 12'h0B7;
rommem[12668] <= 12'h000;
rommem[12669] <= 12'h910;
rommem[12670] <= 12'h08D;
rommem[12671] <= 12'h03F;
rommem[12672] <= 12'h035;
rommem[12673] <= 12'h086;
rommem[12674] <= 12'h08D;
rommem[12675] <= 12'hFC7;
rommem[12676] <= 12'h08D;
rommem[12677] <= 12'h0DC;
rommem[12678] <= 12'h0FC;
rommem[12679] <= 12'h000;
rommem[12680] <= 12'h910;
rommem[12660] <= 12'h800;
rommem[12661] <= 12'h034;
rommem[12662] <= 12'h006;
rommem[12663] <= 12'h0CC;
rommem[12664] <= 12'hFFE;
rommem[12665] <= 12'h31F;
rommem[12666] <= 12'h0FD;
rommem[12667] <= 12'h000;
rommem[12668] <= 12'h800;
rommem[12669] <= 12'h0EC;
rommem[12670] <= 12'h602;
rommem[12671] <= 12'h017;
rommem[12672] <= 12'hFFF;
rommem[12673] <= 12'h2B8;
rommem[12674] <= 12'h0C6;
rommem[12675] <= 12'h020;
rommem[12676] <= 12'h017;
rommem[12677] <= 12'hFFF;
rommem[12678] <= 12'h198;
rommem[12679] <= 12'h035;
rommem[12680] <= 12'h006;
rommem[12681] <= 12'h0FD;
rommem[12682] <= 12'h000;
rommem[12683] <= 12'h920;
rommem[12684] <= 12'h0FC;
rommem[12685] <= 12'h000;
rommem[12686] <= 12'h912;
rommem[12687] <= 12'h0FD;
rommem[12688] <= 12'h000;
rommem[12689] <= 12'h922;
rommem[12690] <= 12'h08D;
rommem[12691] <= 12'hFB7;
rommem[12692] <= 12'h08D;
rommem[12693] <= 12'h0CC;
rommem[12694] <= 12'h0FC;
rommem[12695] <= 12'h000;
rommem[12696] <= 12'h910;
rommem[12697] <= 12'h0FD;
rommem[12698] <= 12'h000;
rommem[12699] <= 12'h924;
rommem[12700] <= 12'h0FC;
rommem[12701] <= 12'h000;
rommem[12702] <= 12'h912;
rommem[12703] <= 12'h0FD;
rommem[12704] <= 12'h000;
rommem[12705] <= 12'h926;
rommem[12706] <= 12'h039;
rommem[12707] <= 12'h08D;
rommem[12708] <= 12'hFDD;
rommem[12709] <= 12'h0FC;
rommem[12710] <= 12'h000;
rommem[12711] <= 12'h926;
rommem[12712] <= 12'h0B3;
rommem[12713] <= 12'h000;
rommem[12714] <= 12'h922;
rommem[12715] <= 12'h0FC;
rommem[12716] <= 12'h000;
rommem[12717] <= 12'h924;
rommem[12718] <= 12'h0F2;
rommem[12719] <= 12'h000;
rommem[12720] <= 12'h921;
rommem[12721] <= 12'h0B2;
rommem[12722] <= 12'h000;
rommem[12723] <= 12'h920;
rommem[12724] <= 12'h124;
rommem[12725] <= 12'h000;
rommem[12726] <= 12'h007;
rommem[12727] <= 12'h0AD;
rommem[12728] <= 12'h90F;
rommem[12729] <= 12'h000;
rommem[12730] <= 12'h80C;
rommem[12731] <= 12'h016;
rommem[12732] <= 12'hFFF;
rommem[12733] <= 12'hE7B;
rommem[12734] <= 12'h039;
rommem[12735] <= 12'h078;
rommem[12736] <= 12'h000;
rommem[12737] <= 12'h913;
rommem[12738] <= 12'h079;
rommem[12739] <= 12'h000;
rommem[12740] <= 12'h912;
rommem[12741] <= 12'h079;
rommem[12742] <= 12'h000;
rommem[12743] <= 12'h911;
rommem[12744] <= 12'h079;
rommem[12745] <= 12'h000;
rommem[12746] <= 12'h910;
rommem[12747] <= 12'h039;
rommem[12748] <= 12'h04F;
rommem[12749] <= 12'h05F;
rommem[12750] <= 12'h0FD;
rommem[12751] <= 12'h000;
rommem[12752] <= 12'h910;
rommem[12753] <= 12'h0FD;
rommem[12754] <= 12'h000;
rommem[12755] <= 12'h912;
rommem[12756] <= 12'h034;
rommem[12757] <= 12'h010;
rommem[12758] <= 12'h08E;
rommem[12759] <= 12'h000;
rommem[12760] <= 12'h000;
rommem[12761] <= 12'h08D;
rommem[12762] <= 12'hF53;
rommem[12763] <= 12'h08D;
rommem[12764] <= 12'h093;
rommem[12765] <= 12'h0C1;
rommem[12766] <= 12'hFFF;
rommem[12767] <= 12'h027;
rommem[12768] <= 12'h017;
rommem[12769] <= 12'h08D;
rommem[12770] <= 12'hFDC;
rommem[12771] <= 12'h08D;
rommem[12772] <= 12'hFDA;
rommem[12773] <= 12'h08D;
rommem[12774] <= 12'hFD8;
rommem[12775] <= 12'h08D;
rommem[12776] <= 12'hFD6;
rommem[12777] <= 12'h0C4;
rommem[12778] <= 12'h00F;
rommem[12779] <= 12'h0FA;
rommem[12683] <= 12'h800;
rommem[12684] <= 12'h035;
rommem[12685] <= 12'h006;
rommem[12686] <= 12'h039;
rommem[12687] <= 12'h020;
rommem[12688] <= 12'h8FF;
rommem[12689] <= 12'h034;
rommem[12690] <= 12'h004;
rommem[12691] <= 12'h015;
rommem[12692] <= 12'h0F6;
rommem[12693] <= 12'hFFF;
rommem[12694] <= 12'hFFF;
rommem[12695] <= 12'hFE0;
rommem[12696] <= 12'h0F1;
rommem[12697] <= 12'hFFC;
rommem[12698] <= 12'h010;
rommem[12699] <= 12'h026;
rommem[12700] <= 12'hFF6;
rommem[12701] <= 12'h017;
rommem[12702] <= 12'hFFF;
rommem[12703] <= 12'hAD3;
rommem[12704] <= 12'h04D;
rommem[12705] <= 12'h02B;
rommem[12706] <= 12'h003;
rommem[12707] <= 12'h032;
rommem[12708] <= 12'h601;
rommem[12709] <= 12'h039;
rommem[12710] <= 12'h035;
rommem[12711] <= 12'h004;
rommem[12712] <= 12'h05D;
rommem[12713] <= 12'h02B;
rommem[12714] <= 12'hFE6;
rommem[12715] <= 12'h0CC;
rommem[12716] <= 12'hFFF;
rommem[12717] <= 12'hFFF;
rommem[12718] <= 12'h039;
rommem[12719] <= 12'h08D;
rommem[12720] <= 12'hFE0;
rommem[12721] <= 12'h020;
rommem[12722] <= 12'h009;
rommem[12723] <= 12'h08D;
rommem[12724] <= 12'hFDC;
rommem[12725] <= 12'h015;
rommem[12726] <= 12'h07D;
rommem[12727] <= 12'hFFF;
rommem[12728] <= 12'hFFC;
rommem[12729] <= 12'hA00;
rommem[12730] <= 12'h027;
rommem[12731] <= 12'h00C;
rommem[12732] <= 12'h081;
rommem[12733] <= 12'h00D;
rommem[12734] <= 12'h026;
rommem[12735] <= 12'h005;
rommem[12736] <= 12'h017;
rommem[12737] <= 12'hFFD;
rommem[12738] <= 12'hF0F;
rommem[12739] <= 12'h020;
rommem[12740] <= 12'h003;
rommem[12741] <= 12'h017;
rommem[12742] <= 12'hFFF;
rommem[12743] <= 12'h154;
rommem[12744] <= 12'h039;
rommem[12745] <= 12'h06E;
rommem[12746] <= 12'h90F;
rommem[12747] <= 12'h000;
rommem[12748] <= 12'h800;
rommem[12749] <= 12'h015;
rommem[12750] <= 12'h0F7;
rommem[12751] <= 12'hFFF;
rommem[12752] <= 12'hFFC;
rommem[12753] <= 12'hA00;
rommem[12754] <= 12'h039;
rommem[12755] <= 12'h015;
rommem[12756] <= 12'h0BF;
rommem[12757] <= 12'hFFF;
rommem[12758] <= 12'hE10;
rommem[12759] <= 12'h3C0;
rommem[12760] <= 12'h015;
rommem[12761] <= 12'h0FD;
rommem[12762] <= 12'hFFF;
rommem[12763] <= 12'hE10;
rommem[12764] <= 12'h3C2;
rommem[12765] <= 12'h039;
rommem[12766] <= 12'h000;
rommem[12767] <= 12'h000;
rommem[12768] <= 12'h000;
rommem[12769] <= 12'h000;
rommem[12770] <= 12'h000;
rommem[12771] <= 12'h000;
rommem[12772] <= 12'h000;
rommem[12773] <= 12'h000;
rommem[12774] <= 12'h000;
rommem[12775] <= 12'h000;
rommem[12776] <= 12'h000;
rommem[12777] <= 12'h000;
rommem[12778] <= 12'h000;
rommem[12779] <= 12'h000;
rommem[12780] <= 12'h000;
rommem[12781] <= 12'h913;
rommem[12782] <= 12'h0F7;
rommem[12781] <= 12'h000;
rommem[12782] <= 12'h000;
rommem[12783] <= 12'h000;
rommem[12784] <= 12'h913;
rommem[12785] <= 12'h030;
rommem[12786] <= 12'h001;
rommem[12787] <= 12'h08C;
rommem[12784] <= 12'h000;
rommem[12785] <= 12'h000;
rommem[12786] <= 12'h000;
rommem[12787] <= 12'h000;
rommem[12788] <= 12'h000;
rommem[12789] <= 12'h00C;
rommem[12790] <= 12'h025;
rommem[12791] <= 12'hFE1;
rommem[12792] <= 12'h01F;
rommem[12793] <= 12'h010;
rommem[12794] <= 12'h035;
rommem[12795] <= 12'h090;
rommem[12796] <= 12'h04F;
rommem[12797] <= 12'h05F;
rommem[12798] <= 12'h0FD;
rommem[12789] <= 12'h000;
rommem[12790] <= 12'h000;
rommem[12791] <= 12'h000;
rommem[12792] <= 12'h000;
rommem[12793] <= 12'h000;
rommem[12794] <= 12'h000;
rommem[12795] <= 12'h000;
rommem[12796] <= 12'h000;
rommem[12797] <= 12'h000;
rommem[12798] <= 12'h000;
rommem[12799] <= 12'h000;
rommem[12800] <= 12'h910;
rommem[12801] <= 12'h0FD;
rommem[12800] <= 12'h000;
rommem[12801] <= 12'h000;
rommem[12802] <= 12'h000;
rommem[12803] <= 12'h912;
rommem[12804] <= 12'h034;
rommem[12805] <= 12'h010;
rommem[12806] <= 12'h08E;
rommem[12803] <= 12'h000;
rommem[12804] <= 12'h000;
rommem[12805] <= 12'h000;
rommem[12806] <= 12'h000;
rommem[12807] <= 12'h000;
rommem[12808] <= 12'h000;
rommem[12809] <= 12'h08D;
rommem[12810] <= 12'hF23;
rommem[12811] <= 12'h08D;
rommem[12812] <= 12'h099;
rommem[12813] <= 12'h05D;
rommem[12814] <= 12'h02B;
rommem[12815] <= 12'h00F;
rommem[12816] <= 12'h08D;
rommem[12817] <= 12'hFAD;
rommem[12818] <= 12'h0FA;
rommem[12819] <= 12'h000;
rommem[12820] <= 12'h913;
rommem[12821] <= 12'h0F7;
rommem[12822] <= 12'h000;
rommem[12823] <= 12'h913;
rommem[12824] <= 12'h030;
rommem[12825] <= 12'h001;
rommem[12826] <= 12'h08C;
rommem[12827] <= 12'h000;
rommem[12828] <= 12'h030;
rommem[12829] <= 12'h025;
rommem[12830] <= 12'hFEA;
rommem[12831] <= 12'h01F;
rommem[12832] <= 12'h010;
rommem[12833] <= 12'h035;
rommem[12834] <= 12'h090;
rommem[12835] <= 12'h04F;
rommem[12836] <= 12'h05F;
rommem[12837] <= 12'h0FD;
rommem[12838] <= 12'h000;
rommem[12839] <= 12'h910;
rommem[12840] <= 12'h0FD;
rommem[12841] <= 12'h000;
rommem[12842] <= 12'h912;
rommem[12843] <= 12'h034;
rommem[12844] <= 12'h010;
rommem[12845] <= 12'h08E;
rommem[12809] <= 12'h000;
rommem[12810] <= 12'hFFF;
rommem[12811] <= 12'h227;
rommem[12812] <= 12'h000;
rommem[12813] <= 12'h000;
rommem[12814] <= 12'hFFF;
rommem[12815] <= 12'h210;
rommem[12816] <= 12'h015;
rommem[12817] <= 12'h0F6;
rommem[12818] <= 12'hFFF;
rommem[12819] <= 12'hFFF;
rommem[12820] <= 12'hFE0;
rommem[12821] <= 12'h08E;
rommem[12822] <= 12'hFFC;
rommem[12823] <= 12'h000;
rommem[12824] <= 12'h03A;
rommem[12825] <= 12'h0A7;
rommem[12826] <= 12'h804;
rommem[12827] <= 12'h07D;
rommem[12828] <= 12'hFFC;
rommem[12829] <= 12'h010;
rommem[12830] <= 12'h126;
rommem[12831] <= 12'h000;
rommem[12832] <= 12'h8DC;
rommem[12833] <= 12'h0F7;
rommem[12834] <= 12'hFFC;
rommem[12835] <= 12'h010;
rommem[12836] <= 12'h016;
rommem[12837] <= 12'h000;
rommem[12838] <= 12'h8D6;
rommem[12839] <= 12'h015;
rommem[12840] <= 12'h0F6;
rommem[12841] <= 12'hFFF;
rommem[12842] <= 12'hFFF;
rommem[12843] <= 12'hFE0;
rommem[12844] <= 12'h08E;
rommem[12845] <= 12'hFFC;
rommem[12846] <= 12'h000;
rommem[12847] <= 12'h000;
rommem[12848] <= 12'h08D;
rommem[12849] <= 12'hEFC;
rommem[12850] <= 12'h08D;
rommem[12851] <= 12'h064;
rommem[12852] <= 12'h05D;
rommem[12853] <= 12'h02B;
rommem[12854] <= 12'h027;
rommem[12855] <= 12'h08D;
rommem[12856] <= 12'hF1B;
rommem[12857] <= 12'h0FB;
rommem[12858] <= 12'h000;
rommem[12859] <= 12'h913;
rommem[12860] <= 12'h0F7;
rommem[12861] <= 12'h000;
rommem[12862] <= 12'h913;
rommem[12863] <= 12'h0F6;
rommem[12864] <= 12'h000;
rommem[12865] <= 12'h912;
rommem[12866] <= 12'h0C9;
rommem[12867] <= 12'h000;
rommem[12868] <= 12'h0F7;
rommem[12869] <= 12'h000;
rommem[12870] <= 12'h912;
rommem[12871] <= 12'h0F6;
rommem[12872] <= 12'h000;
rommem[12873] <= 12'h911;
rommem[12874] <= 12'h0C9;
rommem[12875] <= 12'h000;
rommem[12876] <= 12'h0F7;
rommem[12877] <= 12'h000;
rommem[12878] <= 12'h911;
rommem[12879] <= 12'h0F6;
rommem[12880] <= 12'h000;
rommem[12881] <= 12'h910;
rommem[12882] <= 12'h0C9;
rommem[12883] <= 12'h000;
rommem[12884] <= 12'h0F7;
rommem[12847] <= 12'h03A;
rommem[12848] <= 12'h06F;
rommem[12849] <= 12'h804;
rommem[12850] <= 12'h017;
rommem[12851] <= 12'hFFE;
rommem[12852] <= 12'hFD7;
rommem[12853] <= 12'h0F1;
rommem[12854] <= 12'hFFC;
rommem[12855] <= 12'h010;
rommem[12856] <= 12'h126;
rommem[12857] <= 12'h000;
rommem[12858] <= 12'h8C2;
rommem[12859] <= 12'h086;
rommem[12860] <= 12'h00F;
rommem[12861] <= 12'h05C;
rommem[12862] <= 12'h0C4;
rommem[12863] <= 12'h00F;
rommem[12864] <= 12'h03A;
rommem[12865] <= 12'h06D;
rommem[12866] <= 12'h804;
rommem[12867] <= 12'h026;
rommem[12868] <= 12'h009;
rommem[12869] <= 12'h04A;
rommem[12870] <= 12'h026;
rommem[12871] <= 12'hFF5;
rommem[12872] <= 12'h0C6;
rommem[12873] <= 12'h001;
rommem[12874] <= 12'h086;
rommem[12875] <= 12'h018;
rommem[12876] <= 12'h0A7;
rommem[12877] <= 12'h804;
rommem[12878] <= 12'h0F7;
rommem[12879] <= 12'hFFC;
rommem[12880] <= 12'h010;
rommem[12881] <= 12'h017;
rommem[12882] <= 12'hFFE;
rommem[12883] <= 12'hF81;
rommem[12884] <= 12'h016;
rommem[12885] <= 12'h000;
rommem[12886] <= 12'h910;
rommem[12887] <= 12'h030;
rommem[12888] <= 12'h001;
rommem[12889] <= 12'h08C;
rommem[12890] <= 12'h000;
rommem[12891] <= 12'h00F;
rommem[12892] <= 12'h025;
rommem[12893] <= 12'hFD2;
rommem[12894] <= 12'h01F;
rommem[12895] <= 12'h010;
rommem[12896] <= 12'h035;
rommem[12897] <= 12'h090;
rommem[12898] <= 12'h08D;
rommem[12899] <= 12'hECA;
rommem[12900] <= 12'h0C1;
rommem[12901] <= 12'h02B;
rommem[12902] <= 12'h027;
rommem[12903] <= 12'hFBB;
rommem[12904] <= 12'h0C1;
rommem[12905] <= 12'h025;
rommem[12906] <= 12'h027;
rommem[12907] <= 12'hF90;
rommem[12908] <= 12'h031;
rommem[12909] <= 12'h3FF;
rommem[12910] <= 12'h020;
rommem[12911] <= 12'hF5C;
rommem[12912] <= 12'h0C1;
rommem[12913] <= 12'h030;
rommem[12914] <= 12'h025;
rommem[12915] <= 12'h021;
rommem[12916] <= 12'h0C1;
rommem[12917] <= 12'h039;
rommem[12918] <= 12'h022;
rommem[12919] <= 12'h003;
rommem[12920] <= 12'h0C0;
rommem[12921] <= 12'h030;
rommem[12922] <= 12'h039;
rommem[12923] <= 12'h0C1;
rommem[12924] <= 12'h041;
rommem[12925] <= 12'h025;
rommem[12926] <= 12'h016;
rommem[12927] <= 12'h0C1;
rommem[12928] <= 12'h046;
rommem[12929] <= 12'h022;
rommem[12930] <= 12'h005;
rommem[12931] <= 12'h0C0;
rommem[12932] <= 12'h041;
rommem[12933] <= 12'h0CB;
rommem[12934] <= 12'h00A;
rommem[12935] <= 12'h039;
rommem[12936] <= 12'h0C1;
rommem[12937] <= 12'h061;
rommem[12938] <= 12'h025;
rommem[12939] <= 12'h009;
rommem[12940] <= 12'h0C1;
rommem[12941] <= 12'h07A;
rommem[12942] <= 12'h022;
rommem[12943] <= 12'h005;
rommem[12944] <= 12'h0C0;
rommem[12945] <= 12'h061;
rommem[12946] <= 12'h0CB;
rommem[12947] <= 12'h00A;
rommem[12948] <= 12'h039;
rommem[12949] <= 12'h0C6;
rommem[12886] <= 12'h8A6;
rommem[12887] <= 12'h18E;
rommem[12888] <= 12'h000;
rommem[12889] <= 12'h000;
rommem[12890] <= 12'h015;
rommem[12891] <= 12'h1BF;
rommem[12892] <= 12'hFFF;
rommem[12893] <= 12'hE30;
rommem[12894] <= 12'h604;
rommem[12895] <= 12'h015;
rommem[12896] <= 12'h07F;
rommem[12897] <= 12'hFFF;
rommem[12898] <= 12'hE30;
rommem[12899] <= 12'h608;
rommem[12900] <= 12'h015;
rommem[12901] <= 12'h07F;
rommem[12902] <= 12'hFFF;
rommem[12903] <= 12'hE30;
rommem[12904] <= 12'h609;
rommem[12905] <= 12'h015;
rommem[12906] <= 12'h0FD;
rommem[12907] <= 12'hFFF;
rommem[12908] <= 12'hE30;
rommem[12909] <= 12'h60A;
rommem[12910] <= 12'h015;
rommem[12911] <= 12'h07F;
rommem[12912] <= 12'hFFF;
rommem[12913] <= 12'hE30;
rommem[12914] <= 12'h60C;
rommem[12915] <= 12'h015;
rommem[12916] <= 12'h07F;
rommem[12917] <= 12'hFFF;
rommem[12918] <= 12'hE30;
rommem[12919] <= 12'h60D;
rommem[12920] <= 12'h015;
rommem[12921] <= 12'h0BF;
rommem[12922] <= 12'hFFF;
rommem[12923] <= 12'hE30;
rommem[12924] <= 12'h60E;
rommem[12925] <= 12'h031;
rommem[12926] <= 12'h201;
rommem[12927] <= 12'h18C;
rommem[12928] <= 12'h000;
rommem[12929] <= 12'h400;
rommem[12930] <= 12'h025;
rommem[12931] <= 12'hFD6;
rommem[12932] <= 12'h039;
rommem[12933] <= 12'h015;
rommem[12934] <= 12'h0FD;
rommem[12935] <= 12'hFFF;
rommem[12936] <= 12'hE30;
rommem[12937] <= 12'h604;
rommem[12938] <= 12'h015;
rommem[12939] <= 12'h0BE;
rommem[12940] <= 12'hFFF;
rommem[12941] <= 12'hE30;
rommem[12942] <= 12'h600;
rommem[12943] <= 12'h015;
rommem[12944] <= 12'h0FC;
rommem[12945] <= 12'hFFF;
rommem[12946] <= 12'hE30;
rommem[12947] <= 12'h602;
rommem[12948] <= 12'h015;
rommem[12949] <= 12'h0F7;
rommem[12950] <= 12'hFFF;
rommem[12951] <= 12'h039;
rommem[12952] <= 12'h0C1;
rommem[12953] <= 12'h030;
rommem[12954] <= 12'h025;
rommem[12955] <= 12'h007;
rommem[12956] <= 12'h0C1;
rommem[12957] <= 12'h039;
rommem[12958] <= 12'h022;
rommem[12959] <= 12'h003;
rommem[12960] <= 12'h0C0;
rommem[12961] <= 12'h030;
rommem[12962] <= 12'h039;
rommem[12963] <= 12'h0C6;
rommem[12964] <= 12'hFFF;
rommem[12965] <= 12'h039;
rommem[12966] <= 12'h0C1;
rommem[12967] <= 12'h030;
rommem[12968] <= 12'h026;
rommem[12969] <= 12'h002;
rommem[12970] <= 12'h05F;
rommem[12971] <= 12'h039;
rommem[12972] <= 12'h0C1;
rommem[12973] <= 12'h031;
rommem[12974] <= 12'h026;
rommem[12975] <= 12'h003;
rommem[12976] <= 12'h0C6;
rommem[12977] <= 12'h001;
rommem[12978] <= 12'h039;
rommem[12979] <= 12'h0C6;
rommem[12980] <= 12'hFFF;
rommem[12981] <= 12'h039;
rommem[12982] <= 12'h0CC;
rommem[12983] <= 12'hFFF;
rommem[12984] <= 12'h2C7;
rommem[12985] <= 12'h017;
rommem[12986] <= 12'hFFF;
rommem[12987] <= 12'h11E;
rommem[12988] <= 12'h07E;
rommem[12989] <= 12'hFFF;
rommem[12990] <= 12'h039;
rommem[12991] <= 12'h0DD;
rommem[12992] <= 12'h024;
rommem[12993] <= 12'h09F;
rommem[12994] <= 12'h026;
rommem[12995] <= 12'h0BD;
rommem[12996] <= 12'hFFE;
rommem[12997] <= 12'h3DA;
rommem[12998] <= 12'h039;
rommem[12999] <= 12'h02A;
rommem[13000] <= 12'h02A;
rommem[13001] <= 12'h045;
rommem[13002] <= 12'h072;
rommem[13003] <= 12'h072;
rommem[13004] <= 12'h00D;
rommem[13005] <= 12'h00A;
rommem[13006] <= 12'h000;
rommem[13007] <= 12'h03F;
rommem[13008] <= 12'h020;
rommem[13009] <= 12'h03D;
rommem[13010] <= 12'h020;
rommem[13011] <= 12'h044;
rommem[13012] <= 12'h069;
rommem[13013] <= 12'h073;
rommem[13014] <= 12'h070;
rommem[13015] <= 12'h06C;
rommem[13016] <= 12'h061;
rommem[13017] <= 12'h079;
rommem[13018] <= 12'h020;
rommem[13019] <= 12'h068;
rommem[13020] <= 12'h065;
rommem[13021] <= 12'h06C;
rommem[13022] <= 12'h070;
rommem[13023] <= 12'h00D;
rommem[13024] <= 12'h00A;
rommem[13025] <= 12'h043;
rommem[13026] <= 12'h04C;
rommem[13027] <= 12'h053;
rommem[13028] <= 12'h020;
rommem[13029] <= 12'h03D;
rommem[13030] <= 12'h020;
rommem[13031] <= 12'h063;
rommem[13032] <= 12'h06C;
rommem[13033] <= 12'h065;
rommem[13034] <= 12'h061;
rommem[13035] <= 12'h072;
rommem[13036] <= 12'h020;
rommem[13037] <= 12'h073;
rommem[13038] <= 12'h063;
rommem[13039] <= 12'h072;
rommem[13040] <= 12'h065;
rommem[13041] <= 12'h065;
rommem[13042] <= 12'h06E;
rommem[13043] <= 12'h00D;
rommem[13044] <= 12'h00A;
rommem[13045] <= 12'h062;
rommem[13046] <= 12'h073;
rommem[13047] <= 12'h020;
rommem[13048] <= 12'h03D;
rommem[13049] <= 12'h020;
rommem[13050] <= 12'h073;
rommem[13051] <= 12'h065;
rommem[13052] <= 12'h074;
rommem[13053] <= 12'h020;
rommem[13054] <= 12'h062;
rommem[13055] <= 12'h072;
rommem[13056] <= 12'h065;
rommem[13057] <= 12'h061;
rommem[13058] <= 12'h06B;
rommem[13059] <= 12'h070;
rommem[13060] <= 12'h06F;
rommem[13061] <= 12'h069;
rommem[13062] <= 12'h06E;
rommem[13063] <= 12'h074;
rommem[13064] <= 12'h00D;
rommem[13065] <= 12'h00A;
rommem[13066] <= 12'h062;
rommem[13067] <= 12'h063;
rommem[13068] <= 12'h020;
rommem[13069] <= 12'h03D;
rommem[13070] <= 12'h020;
rommem[13071] <= 12'h063;
rommem[13072] <= 12'h06C;
rommem[13073] <= 12'h065;
rommem[13074] <= 12'h061;
rommem[13075] <= 12'h072;
rommem[13076] <= 12'h020;
rommem[13077] <= 12'h062;
rommem[13078] <= 12'h072;
rommem[13079] <= 12'h065;
rommem[13080] <= 12'h061;
rommem[13081] <= 12'h06B;
rommem[13082] <= 12'h070;
rommem[13083] <= 12'h06F;
rommem[13084] <= 12'h069;
rommem[13085] <= 12'h06E;
rommem[13086] <= 12'h074;
rommem[13087] <= 12'h00D;
rommem[13088] <= 12'h00A;
rommem[13089] <= 12'h03A;
rommem[13090] <= 12'h020;
rommem[13091] <= 12'h03D;
rommem[13092] <= 12'h020;
rommem[13093] <= 12'h045;
rommem[13094] <= 12'h064;
rommem[13095] <= 12'h069;
rommem[13096] <= 12'h074;
rommem[13097] <= 12'h020;
rommem[13098] <= 12'h06D;
rommem[13099] <= 12'h065;
rommem[13100] <= 12'h06D;
rommem[13101] <= 12'h06F;
rommem[13102] <= 12'h072;
rommem[13103] <= 12'h079;
rommem[13104] <= 12'h020;
rommem[13105] <= 12'h062;
rommem[13106] <= 12'h079;
rommem[13107] <= 12'h074;
rommem[13108] <= 12'h065;
rommem[13109] <= 12'h073;
rommem[13110] <= 12'h00D;
rommem[13111] <= 12'h00A;
rommem[13112] <= 12'h044;
rommem[13113] <= 12'h052;
rommem[13114] <= 12'h020;
rommem[13115] <= 12'h03D;
rommem[13116] <= 12'h020;
rommem[13117] <= 12'h044;
rommem[13118] <= 12'h075;
rommem[13119] <= 12'h06D;
rommem[13120] <= 12'h070;
rommem[13121] <= 12'h020;
rommem[13122] <= 12'h072;
rommem[13123] <= 12'h065;
rommem[13124] <= 12'h067;
rommem[13125] <= 12'h069;
rommem[13126] <= 12'h073;
rommem[13127] <= 12'h074;
rommem[13128] <= 12'h065;
rommem[13129] <= 12'h072;
rommem[13130] <= 12'h073;
rommem[13131] <= 12'h00D;
rommem[13132] <= 12'h00A;
rommem[13133] <= 12'h044;
rommem[13134] <= 12'h020;
rommem[13135] <= 12'h03D;
rommem[12951] <= 12'hE30;
rommem[12952] <= 12'h603;
rommem[12953] <= 12'h039;
rommem[12954] <= 12'h03C;
rommem[12955] <= 12'h83E;
rommem[12956] <= 12'h042;
rommem[12957] <= 12'h82B;
rommem[12958] <= 12'h042;
rommem[12959] <= 12'h82D;
rommem[12960] <= 12'h044;
rommem[12961] <= 12'h852;
rommem[12962] <= 12'h844;
rommem[12963] <= 12'h83A;
rommem[12964] <= 12'h046;
rommem[12965] <= 12'h049;
rommem[12966] <= 12'h847;
rommem[12967] <= 12'h046;
rommem[12968] <= 12'h049;
rommem[12969] <= 12'h84C;
rommem[12970] <= 12'h046;
rommem[12971] <= 12'h84C;
rommem[12972] <= 12'h84A;
rommem[12973] <= 12'h052;
rommem[12974] <= 12'h041;
rommem[12975] <= 12'h04D;
rommem[12976] <= 12'h054;
rommem[12977] <= 12'h045;
rommem[12978] <= 12'h053;
rommem[12979] <= 12'h854;
rommem[12980] <= 12'h053;
rommem[12981] <= 12'h050;
rommem[12982] <= 12'h844;
rommem[12983] <= 12'h054;
rommem[12984] <= 12'h049;
rommem[12985] <= 12'h852;
rommem[12986] <= 12'h855;
rommem[12987] <= 12'h065;
rommem[12988] <= 12'h078;
rommem[12989] <= 12'h069;
rommem[12990] <= 12'h874;
rommem[12991] <= 12'h83F;
rommem[12992] <= 12'h043;
rommem[12993] <= 12'h04C;
rommem[12994] <= 12'h853;
rommem[12995] <= 12'h053;
rommem[12996] <= 12'h031;
rommem[12997] <= 12'h839;
rommem[12998] <= 12'h04A;
rommem[12999] <= 12'h044;
rommem[13000] <= 12'h834;
rommem[13001] <= 12'h058;
rommem[13002] <= 12'h04D;
rommem[13003] <= 12'h852;
rommem[13004] <= 12'h058;
rommem[13005] <= 12'h04D;
rommem[13006] <= 12'h853;
rommem[13007] <= 12'h052;
rommem[13008] <= 12'h841;
rommem[13009] <= 12'h052;
rommem[13010] <= 12'h842;
rommem[13011] <= 12'h052;
rommem[13012] <= 12'h044;
rommem[13013] <= 12'h050;
rommem[13014] <= 12'h852;
rommem[13015] <= 12'h052;
rommem[13016] <= 12'h844;
rommem[13017] <= 12'h052;
rommem[13018] <= 12'h858;
rommem[13019] <= 12'h052;
rommem[13020] <= 12'h859;
rommem[13021] <= 12'h052;
rommem[13022] <= 12'h855;
rommem[13023] <= 12'h052;
rommem[13024] <= 12'h853;
rommem[13025] <= 12'h052;
rommem[13026] <= 12'h043;
rommem[13027] <= 12'h043;
rommem[13028] <= 12'h852;
rommem[13029] <= 12'h052;
rommem[13030] <= 12'h050;
rommem[13031] <= 12'h843;
rommem[13032] <= 12'h04C;
rommem[13033] <= 12'h842;
rommem[13034] <= 12'h000;
rommem[13035] <= 12'h000;
rommem[13036] <= 12'hFFF;
rommem[13037] <= 12'h427;
rommem[13038] <= 12'hFFF;
rommem[13039] <= 12'h469;
rommem[13040] <= 12'hFFF;
rommem[13041] <= 12'h474;
rommem[13042] <= 12'hFFF;
rommem[13043] <= 12'h899;
rommem[13044] <= 12'hFFF;
rommem[13045] <= 12'h7D0;
rommem[13046] <= 12'hFFF;
rommem[13047] <= 12'h82C;
rommem[13048] <= 12'hFE0;
rommem[13049] <= 12'h000;
rommem[13050] <= 12'hFFF;
rommem[13051] <= 12'h86F;
rommem[13052] <= 12'hFFF;
rommem[13053] <= 12'h9F5;
rommem[13054] <= 12'hFFF;
rommem[13055] <= 12'h980;
rommem[13056] <= 12'hFFD;
rommem[13057] <= 12'h400;
rommem[13058] <= 12'hFF8;
rommem[13059] <= 12'h000;
rommem[13060] <= 12'hFFE;
rommem[13061] <= 12'h524;
rommem[13062] <= 12'hFF8;
rommem[13063] <= 12'h003;
rommem[13064] <= 12'hFFF;
rommem[13065] <= 12'hAE6;
rommem[13066] <= 12'hFFF;
rommem[13067] <= 12'h44D;
rommem[13068] <= 12'hFFF;
rommem[13069] <= 12'h455;
rommem[13070] <= 12'hFFE;
rommem[13071] <= 12'hE8F;
rommem[13072] <= 12'hFFD;
rommem[13073] <= 12'h400;
rommem[13074] <= 12'hFFE;
rommem[13075] <= 12'hFBA;
rommem[13076] <= 12'hFFE;
rommem[13077] <= 12'hF2C;
rommem[13078] <= 12'hFFF;
rommem[13079] <= 12'h8E4;
rommem[13080] <= 12'hFFF;
rommem[13081] <= 12'h8F3;
rommem[13082] <= 12'hFFF;
rommem[13083] <= 12'h94D;
rommem[13084] <= 12'hFFF;
rommem[13085] <= 12'h902;
rommem[13086] <= 12'hFFF;
rommem[13087] <= 12'h911;
rommem[13088] <= 12'hFFF;
rommem[13089] <= 12'h920;
rommem[13090] <= 12'hFFF;
rommem[13091] <= 12'h92F;
rommem[13092] <= 12'hFFF;
rommem[13093] <= 12'h93E;
rommem[13094] <= 12'hFFF;
rommem[13095] <= 12'h95C;
rommem[13096] <= 12'hFFF;
rommem[13097] <= 12'h96B;
rommem[13098] <= 12'hFFF;
rommem[13099] <= 12'hBD2;
rommem[13100] <= 12'h017;
rommem[13101] <= 12'hFFD;
rommem[13102] <= 12'hDA3;
rommem[13103] <= 12'h0C6;
rommem[13104] <= 12'h024;
rommem[13105] <= 12'h017;
rommem[13106] <= 12'hFFF;
rommem[13107] <= 12'hE95;
rommem[13108] <= 12'h016;
rommem[13109] <= 12'hFFF;
rommem[13110] <= 12'hE92;
rommem[13111] <= 12'h046;
rommem[13112] <= 12'h065;
rommem[13113] <= 12'h06D;
rommem[13114] <= 12'h074;
rommem[13115] <= 12'h069;
rommem[13116] <= 12'h06B;
rommem[13117] <= 12'h069;
rommem[13118] <= 12'h020;
rommem[13119] <= 12'h046;
rommem[13120] <= 12'h030;
rommem[13121] <= 12'h039;
rommem[13122] <= 12'h020;
rommem[13123] <= 12'h04D;
rommem[13124] <= 12'h075;
rommem[13125] <= 12'h06C;
rommem[13126] <= 12'h074;
rommem[13127] <= 12'h069;
rommem[13128] <= 12'h02D;
rommem[13129] <= 12'h063;
rommem[13130] <= 12'h06F;
rommem[13131] <= 12'h072;
rommem[13132] <= 12'h065;
rommem[13133] <= 12'h020;
rommem[13134] <= 12'h04F;
rommem[13135] <= 12'h053;
rommem[13136] <= 12'h020;
rommem[13137] <= 12'h044;
rommem[13138] <= 12'h075;
rommem[13139] <= 12'h06D;
rommem[13140] <= 12'h070;
rommem[13141] <= 12'h020;
rommem[13142] <= 12'h06D;
rommem[13143] <= 12'h065;
rommem[13144] <= 12'h06D;
rommem[13145] <= 12'h06F;
rommem[13146] <= 12'h072;
rommem[13147] <= 12'h079;
rommem[13148] <= 12'h00D;
rommem[13149] <= 12'h00A;
rommem[13150] <= 12'h046;
rommem[13151] <= 12'h020;
rommem[13152] <= 12'h03D;
rommem[13153] <= 12'h020;
rommem[13154] <= 12'h046;
rommem[13155] <= 12'h069;
rommem[13156] <= 12'h06C;
rommem[13157] <= 12'h06C;
rommem[13158] <= 12'h020;
rommem[13159] <= 12'h06D;
rommem[13160] <= 12'h065;
rommem[13161] <= 12'h06D;
rommem[13162] <= 12'h06F;
rommem[13163] <= 12'h072;
rommem[13164] <= 12'h079;
rommem[13165] <= 12'h00D;
rommem[13166] <= 12'h00A;
rommem[13167] <= 12'h046;
rommem[13168] <= 12'h04C;
rommem[13169] <= 12'h020;
rommem[13170] <= 12'h03D;
rommem[13171] <= 12'h020;
rommem[13172] <= 12'h044;
rommem[13173] <= 12'h075;
rommem[13174] <= 12'h06D;
rommem[13175] <= 12'h070;
rommem[13176] <= 12'h020;
rommem[13177] <= 12'h049;
rommem[13178] <= 12'h02F;
rommem[13179] <= 12'h04F;
rommem[13180] <= 12'h020;
rommem[13181] <= 12'h046;
rommem[13182] <= 12'h06F;
rommem[13183] <= 12'h063;
rommem[13184] <= 12'h075;
rommem[13185] <= 12'h073;
rommem[13186] <= 12'h020;
rommem[13187] <= 12'h04C;
rommem[13188] <= 12'h069;
rommem[13189] <= 12'h073;
rommem[13190] <= 12'h074;
rommem[13191] <= 12'h00D;
rommem[13192] <= 12'h00A;
rommem[13193] <= 12'h04A;
rommem[13194] <= 12'h020;
rommem[13195] <= 12'h03D;
rommem[13196] <= 12'h020;
rommem[13197] <= 12'h04A;
rommem[13198] <= 12'h075;
rommem[13199] <= 12'h06D;
rommem[13200] <= 12'h070;
rommem[13201] <= 12'h020;
rommem[13202] <= 12'h074;
rommem[13203] <= 12'h06F;
rommem[13204] <= 12'h020;
rommem[13205] <= 12'h063;
rommem[13206] <= 12'h06F;
rommem[13207] <= 12'h064;
rommem[13208] <= 12'h065;
rommem[13209] <= 12'h00D;
rommem[13210] <= 12'h00A;
rommem[13211] <= 12'h04A;
rommem[13212] <= 12'h044;
rommem[13213] <= 12'h034;
rommem[13214] <= 12'h020;
rommem[13215] <= 12'h03D;
rommem[13216] <= 12'h020;
rommem[13217] <= 12'h04A;
rommem[13218] <= 12'h075;
rommem[13219] <= 12'h06D;
rommem[13220] <= 12'h070;
rommem[13221] <= 12'h020;
rommem[13222] <= 12'h074;
rommem[13223] <= 12'h06F;
rommem[13224] <= 12'h020;
rommem[13225] <= 12'h024;
rommem[13226] <= 12'h046;
rommem[13227] <= 12'h046;
rommem[13228] <= 12'h044;
rommem[13229] <= 12'h034;
rommem[13230] <= 12'h030;
rommem[13231] <= 12'h030;
rommem[13232] <= 12'h00D;
rommem[13233] <= 12'h00A;
rommem[13234] <= 12'h052;
rommem[13235] <= 12'h041;
rommem[13236] <= 12'h04D;
rommem[13237] <= 12'h054;
rommem[13238] <= 12'h045;
rommem[13239] <= 12'h053;
rommem[13240] <= 12'h054;
rommem[13241] <= 12'h020;
rommem[13242] <= 12'h03D;
rommem[13243] <= 12'h020;
rommem[13244] <= 12'h074;
rommem[13245] <= 12'h065;
rommem[13246] <= 12'h073;
rommem[13247] <= 12'h074;
rommem[13248] <= 12'h020;
rommem[13249] <= 12'h052;
rommem[13250] <= 12'h041;
rommem[13251] <= 12'h04D;
rommem[13252] <= 12'h00D;
rommem[13253] <= 12'h00A;
rommem[13254] <= 12'h073;
rommem[13255] <= 12'h020;
rommem[13256] <= 12'h03D;
rommem[13257] <= 12'h020;
rommem[13258] <= 12'h073;
rommem[13259] <= 12'h065;
rommem[13260] <= 12'h072;
rommem[13261] <= 12'h069;
rommem[13262] <= 12'h061;
rommem[13263] <= 12'h06C;
rommem[13264] <= 12'h020;
rommem[13265] <= 12'h06F;
rommem[13266] <= 12'h075;
rommem[13267] <= 12'h074;
rommem[13268] <= 12'h070;
rommem[13269] <= 12'h075;
rommem[13270] <= 12'h074;
rommem[13271] <= 12'h020;
rommem[13272] <= 12'h074;
rommem[13273] <= 12'h065;
rommem[13274] <= 12'h073;
rommem[13275] <= 12'h074;
rommem[13276] <= 12'h00D;
rommem[13277] <= 12'h00A;
rommem[13278] <= 12'h053;
rommem[13279] <= 12'h031;
rommem[13280] <= 12'h039;
rommem[13281] <= 12'h020;
rommem[13282] <= 12'h03D;
rommem[13283] <= 12'h020;
rommem[13284] <= 12'h072;
rommem[13285] <= 12'h075;
rommem[13286] <= 12'h06E;
rommem[13287] <= 12'h020;
rommem[13288] <= 12'h053;
rommem[13289] <= 12'h031;
rommem[13290] <= 12'h039;
rommem[13291] <= 12'h020;
rommem[13292] <= 12'h06C;
rommem[13293] <= 12'h06F;
rommem[13294] <= 12'h061;
rommem[13295] <= 12'h064;
rommem[13296] <= 12'h065;
rommem[13297] <= 12'h072;
rommem[13298] <= 12'h00D;
rommem[13299] <= 12'h00A;
rommem[13300] <= 12'h053;
rommem[13301] <= 12'h050;
rommem[13302] <= 12'h020;
rommem[13303] <= 12'h03D;
rommem[13304] <= 12'h020;
rommem[13305] <= 12'h073;
rommem[13306] <= 12'h070;
rommem[13307] <= 12'h072;
rommem[13308] <= 12'h069;
rommem[13309] <= 12'h074;
rommem[13310] <= 12'h065;
rommem[13311] <= 12'h020;
rommem[13312] <= 12'h064;
rommem[13313] <= 12'h065;
rommem[13314] <= 12'h06D;
rommem[13315] <= 12'h06F;
rommem[13316] <= 12'h00D;
rommem[13317] <= 12'h00A;
rommem[13318] <= 12'h054;
rommem[13319] <= 12'h049;
rommem[13320] <= 12'h020;
rommem[13321] <= 12'h03D;
rommem[13322] <= 12'h020;
rommem[13323] <= 12'h064;
rommem[13324] <= 12'h069;
rommem[13325] <= 12'h073;
rommem[13326] <= 12'h070;
rommem[13327] <= 12'h06C;
rommem[13328] <= 12'h061;
rommem[13329] <= 12'h079;
rommem[13330] <= 12'h020;
rommem[13331] <= 12'h064;
rommem[13332] <= 12'h061;
rommem[13333] <= 12'h074;
rommem[13334] <= 12'h065;
rommem[13335] <= 12'h02F;
rommem[13336] <= 12'h074;
rommem[13337] <= 12'h069;
rommem[13338] <= 12'h06D;
rommem[13339] <= 12'h065;
rommem[13340] <= 12'h00D;
rommem[13341] <= 12'h00A;
rommem[13342] <= 12'h055;
rommem[13343] <= 12'h020;
rommem[13344] <= 12'h03D;
rommem[13345] <= 12'h020;
rommem[13346] <= 12'h075;
rommem[13347] <= 12'h06E;
rommem[13348] <= 12'h061;
rommem[13349] <= 12'h073;
rommem[13350] <= 12'h073;
rommem[13351] <= 12'h065;
rommem[13352] <= 12'h06D;
rommem[13353] <= 12'h062;
rommem[13354] <= 12'h06C;
rommem[13355] <= 12'h065;
rommem[13356] <= 12'h00D;
rommem[13357] <= 12'h00A;
rommem[13358] <= 12'h078;
rommem[13359] <= 12'h020;
rommem[13360] <= 12'h03D;
rommem[13361] <= 12'h020;
rommem[13362] <= 12'h065;
rommem[13363] <= 12'h078;
rommem[13364] <= 12'h069;
rommem[13365] <= 12'h074;
rommem[13366] <= 12'h020;
rommem[13367] <= 12'h06D;
rommem[13368] <= 12'h06F;
rommem[13369] <= 12'h06E;
rommem[13370] <= 12'h069;
rommem[13371] <= 12'h074;
rommem[13372] <= 12'h06F;
rommem[13373] <= 12'h072;
rommem[13374] <= 12'h00D;
rommem[13375] <= 12'h00A;
rommem[13376] <= 12'h000;
rommem[13377] <= 12'h00D;
rommem[13378] <= 12'h00A;
rommem[13379] <= 12'h020;
rommem[13380] <= 12'h020;
rommem[13381] <= 12'h044;
rommem[13382] <= 12'h02F;
rommem[13383] <= 12'h041;
rommem[13384] <= 12'h042;
rommem[13385] <= 12'h020;
rommem[13386] <= 12'h020;
rommem[13137] <= 12'h053;
rommem[13138] <= 12'h074;
rommem[13139] <= 12'h061;
rommem[13140] <= 12'h072;
rommem[13141] <= 12'h074;
rommem[13142] <= 12'h069;
rommem[13143] <= 12'h06E;
rommem[13144] <= 12'h067;
rommem[13145] <= 12'h00D;
rommem[13146] <= 12'h00A;
rommem[13147] <= 12'h000;
rommem[13148] <= 12'h01C;
rommem[13149] <= 12'h0EF;
rommem[13150] <= 12'h086;
rommem[13151] <= 12'h01F;
rommem[13152] <= 12'h015;
rommem[13153] <= 12'h0B7;
rommem[13154] <= 12'hFFF;
rommem[13155] <= 12'hE3F;
rommem[13156] <= 12'h010;
rommem[13157] <= 12'h0FC;
rommem[13158] <= 12'h000;
rommem[13159] <= 12'h92C;
rommem[13160] <= 12'h183;
rommem[13161] <= 12'h12D;
rommem[13162] <= 12'h687;
rommem[13163] <= 12'h027;
rommem[13164] <= 12'h04D;
rommem[13165] <= 12'h07F;
rommem[13166] <= 12'h000;
rommem[13167] <= 12'h810;
rommem[13168] <= 12'h07F;
rommem[13169] <= 12'h000;
rommem[13170] <= 12'h811;
rommem[13171] <= 12'h0CC;
rommem[13172] <= 12'h000;
rommem[13173] <= 12'h07B;
rommem[13174] <= 12'h08E;
rommem[13175] <= 12'h000;
rommem[13176] <= 12'h28E;
rommem[13177] <= 12'h017;
rommem[13178] <= 12'hFFF;
rommem[13179] <= 12'hEDB;
rommem[13180] <= 12'h0CC;
rommem[13181] <= 12'hFFF;
rommem[13182] <= 12'h337;
rommem[13183] <= 12'h017;
rommem[13184] <= 12'hFFF;
rommem[13185] <= 12'h05B;
rommem[13186] <= 12'h0CC;
rommem[13187] <= 12'hFFF;
rommem[13188] <= 12'h5FE;
rommem[13189] <= 12'h017;
rommem[13190] <= 12'hFFF;
rommem[13191] <= 12'h055;
rommem[13192] <= 12'h0CC;
rommem[13193] <= 12'hFFF;
rommem[13194] <= 12'h32C;
rommem[13195] <= 12'h0FD;
rommem[13196] <= 12'h000;
rommem[13197] <= 12'h808;
rommem[13198] <= 12'h0CC;
rommem[13199] <= 12'hFFF;
rommem[13200] <= 12'h5E5;
rommem[13201] <= 12'h0FD;
rommem[13202] <= 12'h000;
rommem[13203] <= 12'h80C;
rommem[13204] <= 12'h0CC;
rommem[13205] <= 12'h006;
rommem[13206] <= 12'h3FF;
rommem[13207] <= 12'h0FD;
rommem[13208] <= 12'h000;
rommem[13209] <= 12'h908;
rommem[13210] <= 12'h07F;
rommem[13211] <= 12'h000;
rommem[13212] <= 12'h90E;
rommem[13213] <= 12'h01F;
rommem[13214] <= 12'h0A8;
rommem[13215] <= 12'h0B7;
rommem[13216] <= 12'h000;
rommem[13217] <= 12'h90F;
rommem[13218] <= 12'h07F;
rommem[13219] <= 12'h000;
rommem[13220] <= 12'h90A;
rommem[13221] <= 12'h0CC;
rommem[13222] <= 12'hFFF;
rommem[13223] <= 12'h35C;
rommem[13224] <= 12'h0FD;
rommem[13225] <= 12'h000;
rommem[13226] <= 12'h90B;
rommem[13227] <= 12'h07F;
rommem[13228] <= 12'h000;
rommem[13229] <= 12'h902;
rommem[13230] <= 12'h07F;
rommem[13231] <= 12'h000;
rommem[13232] <= 12'h904;
rommem[13233] <= 12'h07F;
rommem[13234] <= 12'h000;
rommem[13235] <= 12'h906;
rommem[13236] <= 12'h0CC;
rommem[13237] <= 12'h12D;
rommem[13238] <= 12'h687;
rommem[13239] <= 12'h0FD;
rommem[13240] <= 12'h000;
rommem[13241] <= 12'h92C;
rommem[13242] <= 12'h032;
rommem[13243] <= 12'h80F;
rommem[13244] <= 12'h006;
rommem[13245] <= 12'hFFF;
rommem[13246] <= 12'h05F;
rommem[13247] <= 12'h017;
rommem[13248] <= 12'hFFF;
rommem[13249] <= 12'hE0B;
rommem[13250] <= 12'h0CC;
rommem[13251] <= 12'hFFE;
rommem[13252] <= 12'hC73;
rommem[13253] <= 12'h0FD;
rommem[13254] <= 12'h000;
rommem[13255] <= 12'h804;
rommem[13256] <= 12'h0CC;
rommem[13257] <= 12'hFFE;
rommem[13258] <= 12'h31C;
rommem[13259] <= 12'h0FD;
rommem[13260] <= 12'h000;
rommem[13261] <= 12'h800;
rommem[13262] <= 12'h0CC;
rommem[13263] <= 12'hFFF;
rommem[13264] <= 12'h32C;
rommem[13265] <= 12'h0FD;
rommem[13266] <= 12'h000;
rommem[13267] <= 12'h808;
rommem[13268] <= 12'h0AD;
rommem[13269] <= 12'h90F;
rommem[13270] <= 12'h000;
rommem[13271] <= 12'h808;
rommem[13272] <= 12'h0CC;
rommem[13273] <= 12'hFFF;
rommem[13274] <= 12'hFFF;
rommem[13275] <= 12'h017;
rommem[13276] <= 12'hFFF;
rommem[13277] <= 12'hDB3;
rommem[13278] <= 12'h04D;
rommem[13279] <= 12'h02B;
rommem[13280] <= 12'hFF7;
rommem[13281] <= 12'h0C1;
rommem[13282] <= 12'h00D;
rommem[13283] <= 12'h027;
rommem[13284] <= 12'h005;
rommem[13285] <= 12'h017;
rommem[13286] <= 12'hFFF;
rommem[13287] <= 12'hDE1;
rommem[13288] <= 12'h020;
rommem[13289] <= 12'hFEE;
rommem[13290] <= 12'h0CC;
rommem[13291] <= 12'h005;
rommem[13292] <= 12'h050;
rommem[13293] <= 12'h015;
rommem[13294] <= 12'h0FD;
rommem[13295] <= 12'hFFF;
rommem[13296] <= 12'hE60;
rommem[13297] <= 12'h001;
rommem[13298] <= 12'h00F;
rommem[13299] <= 12'h111;
rommem[13300] <= 12'h017;
rommem[13301] <= 12'hFFE;
rommem[13302] <= 12'hEFE;
rommem[13303] <= 12'h01F;
rommem[13304] <= 12'h002;
rommem[13305] <= 12'h08D;
rommem[13306] <= 12'h067;
rommem[13307] <= 12'h0C1;
rommem[13308] <= 12'h024;
rommem[13309] <= 12'h027;
rommem[13310] <= 12'hFFA;
rommem[13311] <= 12'h031;
rommem[13312] <= 12'h3FF;
rommem[13313] <= 12'h01F;
rommem[13314] <= 12'h023;
rommem[13315] <= 12'h05F;
rommem[13316] <= 12'h08E;
rommem[13317] <= 12'hFFF;
rommem[13318] <= 12'h29A;
rommem[13319] <= 12'h0A6;
rommem[13320] <= 12'hA00;
rommem[13321] <= 12'h06D;
rommem[13322] <= 12'h804;
rommem[13323] <= 12'h02B;
rommem[13324] <= 12'h00F;
rommem[13325] <= 12'h0A1;
rommem[13326] <= 12'h800;
rommem[13327] <= 12'h027;
rommem[13328] <= 12'hFF6;
rommem[13329] <= 12'h06D;
rommem[13330] <= 12'h800;
rommem[13331] <= 12'h027;
rommem[13332] <= 12'hF47;
rommem[13333] <= 12'h02A;
rommem[13334] <= 12'hFFA;
rommem[13335] <= 12'h05C;
rommem[13336] <= 12'h01F;
rommem[13337] <= 12'h032;
rommem[13338] <= 12'h020;
rommem[13339] <= 12'hFEB;
rommem[13340] <= 12'h0A8;
rommem[13341] <= 12'h804;
rommem[13342] <= 12'h048;
rommem[13343] <= 12'h026;
rommem[13344] <= 12'hFF0;
rommem[13345] <= 12'h058;
rommem[13346] <= 12'h08E;
rommem[13347] <= 12'hFFF;
rommem[13348] <= 12'h2EC;
rommem[13349] <= 12'h06E;
rommem[13350] <= 12'h905;
rommem[13351] <= 12'h08D;
rommem[13352] <= 12'h034;
rommem[13353] <= 12'h0C1;
rommem[13354] <= 12'h073;
rommem[13355] <= 12'h026;
rommem[13356] <= 12'h00E;
rommem[13357] <= 12'h0CC;
rommem[13358] <= 12'hFFE;
rommem[13359] <= 12'hC73;
rommem[13360] <= 12'h0FD;
rommem[13361] <= 12'h000;
rommem[13362] <= 12'h804;
rommem[13363] <= 12'h0CC;
rommem[13364] <= 12'hFFE;
rommem[13365] <= 12'hC9A;
rommem[13366] <= 12'h0FD;
rommem[13367] <= 12'h000;
rommem[13368] <= 12'h800;
rommem[13369] <= 12'h020;
rommem[13370] <= 12'hF21;
rommem[13371] <= 12'h0C1;
rommem[13372] <= 12'h063;
rommem[13373] <= 12'h026;
rommem[13374] <= 12'hF1D;
rommem[13375] <= 12'h0CC;
rommem[13376] <= 12'hFFE;
rommem[13377] <= 12'hA92;
rommem[13378] <= 12'h0FD;
rommem[13379] <= 12'h000;
rommem[13380] <= 12'h804;
rommem[13381] <= 12'h0CC;
rommem[13382] <= 12'hFFE;
rommem[13383] <= 12'h31C;
rommem[13384] <= 12'h0FD;
rommem[13385] <= 12'h000;
rommem[13386] <= 12'h800;
rommem[13387] <= 12'h020;
rommem[13388] <= 12'h020;
rommem[13389] <= 12'h020;
rommem[13390] <= 12'h058;
rommem[13391] <= 12'h020;
rommem[13392] <= 12'h020;
rommem[13393] <= 12'h020;
rommem[13394] <= 12'h020;
rommem[13388] <= 12'hF0F;
rommem[13389] <= 12'h0CC;
rommem[13390] <= 12'hFFF;
rommem[13391] <= 12'h5FE;
rommem[13392] <= 12'h017;
rommem[13393] <= 12'hFFE;
rommem[13394] <= 12'hF8A;
rommem[13395] <= 12'h020;
rommem[13396] <= 12'h020;
rommem[13397] <= 12'h059;
rommem[13398] <= 12'h020;
rommem[13399] <= 12'h020;
rommem[13400] <= 12'h020;
rommem[13401] <= 12'h020;
rommem[13402] <= 12'h020;
rommem[13396] <= 12'hF07;
rommem[13397] <= 12'h017;
rommem[13398] <= 12'hFFE;
rommem[13399] <= 12'hDE4;
rommem[13400] <= 12'h017;
rommem[13401] <= 12'hFFE;
rommem[13402] <= 12'hE58;
rommem[13403] <= 12'h020;
rommem[13404] <= 12'h055;
rommem[13405] <= 12'h020;
rommem[13406] <= 12'h020;
rommem[13407] <= 12'h020;
rommem[13408] <= 12'h020;
rommem[13409] <= 12'h020;
rommem[13410] <= 12'h020;
rommem[13411] <= 12'h053;
rommem[13412] <= 12'h020;
rommem[13404] <= 12'hEFF;
rommem[13405] <= 12'h0E6;
rommem[13406] <= 12'hA04;
rommem[13407] <= 12'h031;
rommem[13408] <= 12'h201;
rommem[13409] <= 12'h039;
rommem[13410] <= 12'h08D;
rommem[13411] <= 12'hFF9;
rommem[13412] <= 12'h0C1;
rommem[13413] <= 12'h020;
rommem[13414] <= 12'h020;
rommem[13415] <= 12'h020;
rommem[13416] <= 12'h020;
rommem[13417] <= 12'h020;
rommem[13418] <= 12'h020;
rommem[13419] <= 12'h050;
rommem[13420] <= 12'h043;
rommem[13421] <= 12'h020;
rommem[13422] <= 12'h020;
rommem[13423] <= 12'h020;
rommem[13424] <= 12'h020;
rommem[13425] <= 12'h044;
rommem[13426] <= 12'h050;
rommem[13427] <= 12'h020;
rommem[13428] <= 12'h020;
rommem[13429] <= 12'h043;
rommem[13430] <= 12'h043;
rommem[13431] <= 12'h052;
rommem[13432] <= 12'h00D;
rommem[13433] <= 12'h00A;
rommem[13434] <= 12'h000;
rommem[13435] <= 12'h0BD;
rommem[13436] <= 12'hFFD;
rommem[13437] <= 12'h2D2;
rommem[13438] <= 12'h039;
rommem[13439] <= 12'h0C6;
rommem[13440] <= 12'h020;
rommem[13441] <= 12'h016;
rommem[13442] <= 12'hFFF;
rommem[13443] <= 12'hA5D;
rommem[13444] <= 12'h08D;
rommem[13445] <= 12'hD1D;
rommem[13446] <= 12'h18E;
rommem[13447] <= 12'h000;
rommem[13448] <= 12'h000;
rommem[13449] <= 12'h1BE;
rommem[13450] <= 12'h000;
rommem[13451] <= 12'h922;
rommem[13452] <= 12'h017;
rommem[13453] <= 12'hFFD;
rommem[13454] <= 12'hC43;
rommem[13455] <= 12'h0C6;
rommem[13456] <= 12'h03A;
rommem[13457] <= 12'h017;
rommem[13458] <= 12'hFFF;
rommem[13459] <= 12'hA4D;
rommem[13460] <= 12'h01F;
rommem[13461] <= 12'h020;
rommem[13462] <= 12'h017;
rommem[13463] <= 12'hFFE;
rommem[13464] <= 12'hF95;
rommem[13465] <= 12'h0C6;
rommem[13466] <= 12'h020;
rommem[13467] <= 12'h017;
rommem[13468] <= 12'hFFF;
rommem[13469] <= 12'hA43;
rommem[13470] <= 12'h08E;
rommem[13414] <= 12'h027;
rommem[13415] <= 12'hFFA;
rommem[13416] <= 12'h039;
rommem[13417] <= 12'h017;
rommem[13418] <= 12'h000;
rommem[13419] <= 12'h6D5;
rommem[13420] <= 12'h0C6;
rommem[13421] <= 12'hFFF;
rommem[13422] <= 12'h0F7;
rommem[13423] <= 12'h000;
rommem[13424] <= 12'h810;
rommem[13425] <= 12'h016;
rommem[13426] <= 12'hFFF;
rommem[13427] <= 12'hEE8;
rommem[13428] <= 12'h017;
rommem[13429] <= 12'h000;
rommem[13430] <= 12'h700;
rommem[13431] <= 12'h016;
rommem[13432] <= 12'hFFF;
rommem[13433] <= 12'hEE2;
rommem[13434] <= 12'h08D;
rommem[13435] <= 12'hFE1;
rommem[13436] <= 12'h0C1;
rommem[13437] <= 12'h020;
rommem[13438] <= 12'h027;
rommem[13439] <= 12'hFFA;
rommem[13440] <= 12'h031;
rommem[13441] <= 12'h3FF;
rommem[13442] <= 12'h039;
rommem[13443] <= 12'h034;
rommem[13444] <= 12'h006;
rommem[13445] <= 12'h0FC;
rommem[13446] <= 12'h000;
rommem[13447] <= 12'h910;
rommem[13448] <= 12'h0FD;
rommem[13449] <= 12'h000;
rommem[13450] <= 12'h918;
rommem[13451] <= 12'h0FC;
rommem[13452] <= 12'h000;
rommem[13453] <= 12'h912;
rommem[13454] <= 12'h0FD;
rommem[13455] <= 12'h000;
rommem[13456] <= 12'h91A;
rommem[13457] <= 12'h08D;
rommem[13458] <= 12'h05B;
rommem[13459] <= 12'h08D;
rommem[13460] <= 12'h059;
rommem[13461] <= 12'h0FC;
rommem[13462] <= 12'h000;
rommem[13463] <= 12'h912;
rommem[13464] <= 12'h0F3;
rommem[13465] <= 12'h000;
rommem[13466] <= 12'h91A;
rommem[13467] <= 12'h0F6;
rommem[13468] <= 12'h000;
rommem[13469] <= 12'h911;
rommem[13470] <= 12'h0F9;
rommem[13471] <= 12'h000;
rommem[13472] <= 12'h008;
rommem[13473] <= 12'h0E6;
rommem[13474] <= 12'hA04;
rommem[13475] <= 12'h031;
rommem[13476] <= 12'h201;
rommem[13477] <= 12'h017;
rommem[13478] <= 12'hFFE;
rommem[13479] <= 12'hF8F;
rommem[13480] <= 12'h0C6;
rommem[13481] <= 12'h020;
rommem[13482] <= 12'h017;
rommem[13483] <= 12'hFFF;
rommem[13484] <= 12'hA34;
rommem[13485] <= 12'h05F;
rommem[13486] <= 12'h04F;
rommem[13487] <= 12'h017;
rommem[13488] <= 12'hFFF;
rommem[13489] <= 12'h9F7;
rommem[13490] <= 12'h0C1;
rommem[13491] <= 12'h003;
rommem[13492] <= 12'h027;
rommem[13493] <= 12'h024;
rommem[13494] <= 12'h030;
rommem[13495] <= 12'h1FF;
rommem[13496] <= 12'h026;
rommem[13497] <= 12'hFE7;
rommem[13498] <= 12'h0C6;
rommem[13499] <= 12'h020;
rommem[13500] <= 12'h017;
rommem[13501] <= 12'hFFF;
rommem[13502] <= 12'hA22;
rommem[13503] <= 12'h08E;
rommem[13504] <= 12'h000;
rommem[13505] <= 12'h008;
rommem[13506] <= 12'h031;
rommem[13507] <= 12'h3F8;
rommem[13508] <= 12'h0E6;
rommem[13509] <= 12'hA04;
rommem[13510] <= 12'h0C1;
rommem[13511] <= 12'h020;
rommem[13512] <= 12'h024;
rommem[13513] <= 12'h002;
rommem[13514] <= 12'h0C6;
rommem[13515] <= 12'h02E;
rommem[13516] <= 12'h017;
rommem[13517] <= 12'hFFF;
rommem[13518] <= 12'hA12;
rommem[13519] <= 12'h031;
rommem[13520] <= 12'h201;
rommem[13521] <= 12'h030;
rommem[13522] <= 12'h1FF;
rommem[13523] <= 12'h026;
rommem[13524] <= 12'hFEF;
rommem[13525] <= 12'h1BC;
rommem[13526] <= 12'h000;
rommem[13527] <= 12'h926;
rommem[13528] <= 12'h025;
rommem[13529] <= 12'hFB2;
rommem[13530] <= 12'h017;
rommem[13531] <= 12'hFFD;
rommem[13532] <= 12'hBF5;
rommem[13533] <= 12'h016;
rommem[13534] <= 12'hFFF;
rommem[13535] <= 12'hB59;
rommem[13536] <= 12'h0CE;
rommem[13472] <= 12'h919;
rommem[13473] <= 12'h0F7;
rommem[13474] <= 12'h000;
rommem[13475] <= 12'h911;
rommem[13476] <= 12'h0B6;
rommem[13477] <= 12'h000;
rommem[13478] <= 12'h910;
rommem[13479] <= 12'h0B9;
rommem[13480] <= 12'h000;
rommem[13481] <= 12'h918;
rommem[13482] <= 12'h0B7;
rommem[13483] <= 12'h000;
rommem[13484] <= 12'h910;
rommem[13485] <= 12'h08D;
rommem[13486] <= 12'h03F;
rommem[13487] <= 12'h035;
rommem[13488] <= 12'h086;
rommem[13489] <= 12'h08D;
rommem[13490] <= 12'hFC7;
rommem[13491] <= 12'h08D;
rommem[13492] <= 12'h0DC;
rommem[13493] <= 12'h0FC;
rommem[13494] <= 12'h000;
rommem[13495] <= 12'h910;
rommem[13496] <= 12'h0FD;
rommem[13497] <= 12'h000;
rommem[13498] <= 12'h920;
rommem[13499] <= 12'h0FC;
rommem[13500] <= 12'h000;
rommem[13501] <= 12'h912;
rommem[13502] <= 12'h0FD;
rommem[13503] <= 12'h000;
rommem[13504] <= 12'h922;
rommem[13505] <= 12'h08D;
rommem[13506] <= 12'hFB7;
rommem[13507] <= 12'h08D;
rommem[13508] <= 12'h0CC;
rommem[13509] <= 12'h0FC;
rommem[13510] <= 12'h000;
rommem[13511] <= 12'h910;
rommem[13512] <= 12'h0FD;
rommem[13513] <= 12'h000;
rommem[13514] <= 12'h924;
rommem[13515] <= 12'h0FC;
rommem[13516] <= 12'h000;
rommem[13517] <= 12'h912;
rommem[13518] <= 12'h0FD;
rommem[13519] <= 12'h000;
rommem[13520] <= 12'h926;
rommem[13521] <= 12'h039;
rommem[13522] <= 12'h08D;
rommem[13523] <= 12'hFDD;
rommem[13524] <= 12'h0FC;
rommem[13525] <= 12'h000;
rommem[13526] <= 12'h926;
rommem[13527] <= 12'h0B3;
rommem[13528] <= 12'h000;
rommem[13529] <= 12'h922;
rommem[13530] <= 12'h0FC;
rommem[13531] <= 12'h000;
rommem[13532] <= 12'h924;
rommem[13533] <= 12'h0F2;
rommem[13534] <= 12'h000;
rommem[13535] <= 12'h921;
rommem[13536] <= 12'h0B2;
rommem[13537] <= 12'h000;
rommem[13538] <= 12'h008;
rommem[13539] <= 12'h017;
rommem[13540] <= 12'hFFF;
rommem[13541] <= 12'hCE6;
rommem[13542] <= 12'h0BE;
rommem[13543] <= 12'h000;
rommem[13544] <= 12'h912;
rommem[13545] <= 12'h017;
rommem[13546] <= 12'hFFF;
rommem[13547] <= 12'hC5F;
rommem[13548] <= 12'h017;
rommem[13549] <= 12'hFFF;
rommem[13550] <= 12'hCDD;
rommem[13551] <= 12'h05D;
rommem[13552] <= 12'h027;
rommem[13553] <= 12'h00C;
rommem[13554] <= 12'h0F6;
rommem[13555] <= 12'h000;
rommem[13556] <= 12'h913;
rommem[13557] <= 12'h0E7;
rommem[13558] <= 12'h800;
rommem[13559] <= 12'h033;
rommem[13560] <= 12'h5FF;
rommem[13561] <= 12'h283;
rommem[13562] <= 12'h000;
rommem[13563] <= 12'h000;
rommem[13564] <= 12'h026;
rommem[13565] <= 12'hFEB;
rommem[13566] <= 12'h017;
rommem[13567] <= 12'hFFF;
rommem[13568] <= 12'hC2D;
rommem[13569] <= 12'h0C1;
rommem[13570] <= 12'h022;
rommem[13571] <= 12'h026;
rommem[13572] <= 12'h018;
rommem[13573] <= 12'h0CE;
rommem[13538] <= 12'h920;
rommem[13539] <= 12'h124;
rommem[13540] <= 12'h000;
rommem[13541] <= 12'h007;
rommem[13542] <= 12'h0AD;
rommem[13543] <= 12'h90F;
rommem[13544] <= 12'h000;
rommem[13545] <= 12'h80C;
rommem[13546] <= 12'h016;
rommem[13547] <= 12'hFFF;
rommem[13548] <= 12'hE6F;
rommem[13549] <= 12'h039;
rommem[13550] <= 12'h078;
rommem[13551] <= 12'h000;
rommem[13552] <= 12'h913;
rommem[13553] <= 12'h079;
rommem[13554] <= 12'h000;
rommem[13555] <= 12'h912;
rommem[13556] <= 12'h079;
rommem[13557] <= 12'h000;
rommem[13558] <= 12'h911;
rommem[13559] <= 12'h079;
rommem[13560] <= 12'h000;
rommem[13561] <= 12'h910;
rommem[13562] <= 12'h039;
rommem[13563] <= 12'h04F;
rommem[13564] <= 12'h05F;
rommem[13565] <= 12'h0FD;
rommem[13566] <= 12'h000;
rommem[13567] <= 12'h910;
rommem[13568] <= 12'h0FD;
rommem[13569] <= 12'h000;
rommem[13570] <= 12'h912;
rommem[13571] <= 12'h034;
rommem[13572] <= 12'h010;
rommem[13573] <= 12'h08E;
rommem[13574] <= 12'h000;
rommem[13575] <= 12'h028;
rommem[13576] <= 12'h017;
rommem[13577] <= 12'hFFF;
rommem[13578] <= 12'hC23;
rommem[13579] <= 12'h0C1;
rommem[13580] <= 12'h022;
rommem[13581] <= 12'h026;
rommem[13582] <= 12'h005;
rommem[13583] <= 12'h0CE;
rommem[13584] <= 12'h000;
rommem[13585] <= 12'h008;
rommem[13586] <= 12'h020;
rommem[13587] <= 12'hFD5;
rommem[13588] <= 12'h0E7;
rommem[13589] <= 12'h800;
rommem[13590] <= 12'h033;
rommem[13591] <= 12'h5FF;
rommem[13592] <= 12'h283;
rommem[13593] <= 12'h000;
rommem[13594] <= 12'h000;
rommem[13595] <= 12'h022;
rommem[13596] <= 12'hFEB;
rommem[13597] <= 12'h016;
rommem[13598] <= 12'hFFF;
rommem[13599] <= 12'hB19;
rommem[13600] <= 12'h017;
rommem[13601] <= 12'hFFF;
rommem[13602] <= 12'hC80;
rommem[13603] <= 12'h017;
rommem[13604] <= 12'hFFF;
rommem[13605] <= 12'hC25;
rommem[13606] <= 12'h017;
rommem[13607] <= 12'hFFF;
rommem[13608] <= 12'hCA3;
rommem[13609] <= 12'h0F6;
rommem[13610] <= 12'h000;
rommem[13611] <= 12'h913;
rommem[13612] <= 12'h0BE;
rommem[13613] <= 12'h000;
rommem[13614] <= 12'h922;
rommem[13615] <= 12'h04F;
rommem[13616] <= 12'h04D;
rommem[13617] <= 12'h026;
rommem[13618] <= 12'h00D;
rommem[13619] <= 12'h05F;
rommem[13620] <= 12'h04F;
rommem[13621] <= 12'h017;
rommem[13622] <= 12'hFFF;
rommem[13623] <= 12'h971;
rommem[13624] <= 12'h0C1;
rommem[13625] <= 12'h003;
rommem[13626] <= 12'h127;
rommem[13627] <= 12'hFFF;
rommem[13628] <= 12'hAFC;
rommem[13629] <= 12'h0F6;
rommem[13630] <= 12'h000;
rommem[13631] <= 12'h913;
rommem[13632] <= 12'h0E7;
rommem[13633] <= 12'h800;
rommem[13634] <= 12'h0BC;
rommem[13635] <= 12'h000;
rommem[13636] <= 12'h926;
rommem[13637] <= 12'h023;
rommem[13638] <= 12'hFE9;
rommem[13639] <= 12'h016;
rommem[13640] <= 12'hFFF;
rommem[13641] <= 12'hAEF;
rommem[13642] <= 12'h0CC;
rommem[13643] <= 12'hFFF;
rommem[13644] <= 12'h441;
rommem[13645] <= 12'h017;
rommem[13646] <= 12'hFFE;
rommem[13647] <= 12'hE8A;
rommem[13648] <= 12'h08D;
rommem[13649] <= 12'hF2D;
rommem[13650] <= 12'h0FC;
rommem[13651] <= 12'h000;
rommem[13652] <= 12'h900;
rommem[13653] <= 12'h08D;
rommem[13654] <= 12'hF24;
rommem[13655] <= 12'h08D;
rommem[13656] <= 12'hF26;
rommem[13657] <= 12'h0FC;
rommem[13658] <= 12'h000;
rommem[13659] <= 12'h902;
rommem[13660] <= 12'h08D;
rommem[13661] <= 12'hF1D;
rommem[13662] <= 12'h08D;
rommem[13663] <= 12'hF1F;
rommem[13664] <= 12'h0FC;
rommem[13665] <= 12'h000;
rommem[13666] <= 12'h904;
rommem[13667] <= 12'h08D;
rommem[13668] <= 12'hF16;
rommem[13669] <= 12'h08D;
rommem[13670] <= 12'hF18;
rommem[13671] <= 12'h0FC;
rommem[13672] <= 12'h000;
rommem[13673] <= 12'h906;
rommem[13674] <= 12'h08D;
rommem[13675] <= 12'hF0F;
rommem[13676] <= 12'h08D;
rommem[13677] <= 12'hF11;
rommem[13678] <= 12'h0FC;
rommem[13575] <= 12'h000;
rommem[13576] <= 12'h08D;
rommem[13577] <= 12'hF53;
rommem[13578] <= 12'h08D;
rommem[13579] <= 12'h093;
rommem[13580] <= 12'h0C1;
rommem[13581] <= 12'hFFF;
rommem[13582] <= 12'h027;
rommem[13583] <= 12'h017;
rommem[13584] <= 12'h08D;
rommem[13585] <= 12'hFDC;
rommem[13586] <= 12'h08D;
rommem[13587] <= 12'hFDA;
rommem[13588] <= 12'h08D;
rommem[13589] <= 12'hFD8;
rommem[13590] <= 12'h08D;
rommem[13591] <= 12'hFD6;
rommem[13592] <= 12'h0C4;
rommem[13593] <= 12'h00F;
rommem[13594] <= 12'h0FA;
rommem[13595] <= 12'h000;
rommem[13596] <= 12'h913;
rommem[13597] <= 12'h0F7;
rommem[13598] <= 12'h000;
rommem[13599] <= 12'h913;
rommem[13600] <= 12'h030;
rommem[13601] <= 12'h001;
rommem[13602] <= 12'h08C;
rommem[13603] <= 12'h000;
rommem[13604] <= 12'h00C;
rommem[13605] <= 12'h025;
rommem[13606] <= 12'hFE1;
rommem[13607] <= 12'h01F;
rommem[13608] <= 12'h010;
rommem[13609] <= 12'h035;
rommem[13610] <= 12'h090;
rommem[13611] <= 12'h04F;
rommem[13612] <= 12'h05F;
rommem[13613] <= 12'h0FD;
rommem[13614] <= 12'h000;
rommem[13615] <= 12'h910;
rommem[13616] <= 12'h0FD;
rommem[13617] <= 12'h000;
rommem[13618] <= 12'h912;
rommem[13619] <= 12'h034;
rommem[13620] <= 12'h010;
rommem[13621] <= 12'h08E;
rommem[13622] <= 12'h000;
rommem[13623] <= 12'h000;
rommem[13624] <= 12'h08D;
rommem[13625] <= 12'hF23;
rommem[13626] <= 12'h08D;
rommem[13627] <= 12'h099;
rommem[13628] <= 12'h05D;
rommem[13629] <= 12'h02B;
rommem[13630] <= 12'h00F;
rommem[13631] <= 12'h08D;
rommem[13632] <= 12'hFAD;
rommem[13633] <= 12'h0FA;
rommem[13634] <= 12'h000;
rommem[13635] <= 12'h913;
rommem[13636] <= 12'h0F7;
rommem[13637] <= 12'h000;
rommem[13638] <= 12'h913;
rommem[13639] <= 12'h030;
rommem[13640] <= 12'h001;
rommem[13641] <= 12'h08C;
rommem[13642] <= 12'h000;
rommem[13643] <= 12'h030;
rommem[13644] <= 12'h025;
rommem[13645] <= 12'hFEA;
rommem[13646] <= 12'h01F;
rommem[13647] <= 12'h010;
rommem[13648] <= 12'h035;
rommem[13649] <= 12'h090;
rommem[13650] <= 12'h04F;
rommem[13651] <= 12'h05F;
rommem[13652] <= 12'h0FD;
rommem[13653] <= 12'h000;
rommem[13654] <= 12'h910;
rommem[13655] <= 12'h0FD;
rommem[13656] <= 12'h000;
rommem[13657] <= 12'h912;
rommem[13658] <= 12'h034;
rommem[13659] <= 12'h010;
rommem[13660] <= 12'h08E;
rommem[13661] <= 12'h000;
rommem[13662] <= 12'h000;
rommem[13663] <= 12'h08D;
rommem[13664] <= 12'hEFC;
rommem[13665] <= 12'h08D;
rommem[13666] <= 12'h064;
rommem[13667] <= 12'h05D;
rommem[13668] <= 12'h02B;
rommem[13669] <= 12'h027;
rommem[13670] <= 12'h08D;
rommem[13671] <= 12'hF1B;
rommem[13672] <= 12'h0FB;
rommem[13673] <= 12'h000;
rommem[13674] <= 12'h913;
rommem[13675] <= 12'h0F7;
rommem[13676] <= 12'h000;
rommem[13677] <= 12'h913;
rommem[13678] <= 12'h0F6;
rommem[13679] <= 12'h000;
rommem[13680] <= 12'h908;
rommem[13681] <= 12'h08D;
rommem[13682] <= 12'hF08;
rommem[13683] <= 12'h08D;
rommem[13684] <= 12'hF0A;
rommem[13685] <= 12'h0F6;
rommem[13686] <= 12'h000;
rommem[13687] <= 12'h90B;
rommem[13688] <= 12'h017;
rommem[13689] <= 12'hFFE;
rommem[13690] <= 12'hEBC;
rommem[13691] <= 12'h0FC;
rommem[13680] <= 12'h912;
rommem[13681] <= 12'h0C9;
rommem[13682] <= 12'h000;
rommem[13683] <= 12'h0F7;
rommem[13684] <= 12'h000;
rommem[13685] <= 12'h912;
rommem[13686] <= 12'h0F6;
rommem[13687] <= 12'h000;
rommem[13688] <= 12'h911;
rommem[13689] <= 12'h0C9;
rommem[13690] <= 12'h000;
rommem[13691] <= 12'h0F7;
rommem[13692] <= 12'h000;
rommem[13693] <= 12'h90C;
rommem[13694] <= 12'h08D;
rommem[13695] <= 12'hEFB;
rommem[13696] <= 12'h08D;
rommem[13697] <= 12'hEFD;
rommem[13698] <= 12'h0FC;
rommem[13699] <= 12'h000;
rommem[13700] <= 12'h90E;
rommem[13701] <= 12'h0BD;
rommem[13702] <= 12'hFFD;
rommem[13703] <= 12'h2CE;
rommem[13704] <= 12'h08D;
rommem[13705] <= 12'hEF5;
rommem[13706] <= 12'h0B6;
rommem[13707] <= 12'h000;
rommem[13708] <= 12'h90F;
rommem[13709] <= 12'h017;
rommem[13710] <= 12'hFFD;
rommem[13711] <= 12'hD3E;
rommem[13712] <= 12'h08D;
rommem[13713] <= 12'hEED;
rommem[13714] <= 12'h016;
rommem[13715] <= 12'hFFF;
rommem[13716] <= 12'hAA4;
rommem[13717] <= 12'h08D;
rommem[13718] <= 12'hCCB;
rommem[13719] <= 12'h01A;
rommem[13720] <= 12'h010;
rommem[13721] <= 12'h1FE;
rommem[13722] <= 12'h000;
rommem[13723] <= 12'h908;
rommem[13724] <= 12'h0CC;
rommem[13725] <= 12'hFFF;
rommem[13726] <= 12'h5D0;
rommem[13727] <= 12'h034;
rommem[13728] <= 12'h006;
rommem[13729] <= 12'h0C6;
rommem[13730] <= 12'h000;
rommem[13731] <= 12'h034;
rommem[13732] <= 12'h004;
rommem[13733] <= 12'h0FC;
rommem[13734] <= 12'h000;
rommem[13735] <= 12'h912;
rommem[13736] <= 12'h034;
rommem[13737] <= 12'h006;
rommem[13738] <= 12'h0F6;
rommem[13739] <= 12'h000;
rommem[13740] <= 12'h911;
rommem[13741] <= 12'h034;
rommem[13742] <= 12'h004;
rommem[13743] <= 12'h0FC;
rommem[13744] <= 12'h000;
rommem[13745] <= 12'h906;
rommem[13746] <= 12'h034;
rommem[13747] <= 12'h006;
rommem[13748] <= 12'h0FC;
rommem[13749] <= 12'h000;
rommem[13750] <= 12'h904;
rommem[13751] <= 12'h034;
rommem[13752] <= 12'h006;
rommem[13753] <= 12'h0FC;
rommem[13754] <= 12'h000;
rommem[13755] <= 12'h902;
rommem[13756] <= 12'h034;
rommem[13757] <= 12'h006;
rommem[13758] <= 12'h0B6;
rommem[13759] <= 12'h000;
rommem[13760] <= 12'h90E;
rommem[13761] <= 12'h034;
rommem[13762] <= 12'h002;
rommem[13763] <= 12'h0FC;
rommem[13764] <= 12'h000;
rommem[13765] <= 12'h900;
rommem[13766] <= 12'h034;
rommem[13767] <= 12'h006;
rommem[13768] <= 12'h0B6;
rommem[13769] <= 12'h000;
rommem[13770] <= 12'h90F;
rommem[13771] <= 12'h034;
rommem[13772] <= 12'h002;
rommem[13773] <= 12'h015;
rommem[13774] <= 12'h035;
rommem[13775] <= 12'h0FF;
rommem[13776] <= 12'h1FF;
rommem[13777] <= 12'h000;
rommem[13778] <= 12'h908;
rommem[13779] <= 12'h032;
rommem[13780] <= 12'h80F;
rommem[13781] <= 12'h006;
rommem[13782] <= 12'hFFF;
rommem[13783] <= 12'h034;
rommem[13784] <= 12'h001;
rommem[13785] <= 12'h034;
rommem[13786] <= 12'h002;
rommem[13787] <= 12'h01F;
rommem[13788] <= 12'h0B8;
rommem[13789] <= 12'h0B7;
rommem[13790] <= 12'h000;
rommem[13791] <= 12'h90E;
rommem[13792] <= 12'h04F;
rommem[13793] <= 12'h01F;
rommem[13794] <= 12'h08B;
rommem[13795] <= 12'h035;
rommem[13796] <= 12'h002;
rommem[13797] <= 12'h0FD;
rommem[13798] <= 12'h000;
rommem[13799] <= 12'h900;
rommem[13800] <= 12'h0BF;
rommem[13801] <= 12'h000;
rommem[13802] <= 12'h902;
rommem[13803] <= 12'h1BF;
rommem[13804] <= 12'h000;
rommem[13805] <= 12'h904;
rommem[13806] <= 12'h0FF;
rommem[13807] <= 12'h000;
rommem[13808] <= 12'h906;
rommem[13809] <= 12'h035;
rommem[13810] <= 12'h002;
rommem[13811] <= 12'h0B7;
rommem[13812] <= 12'h000;
rommem[13813] <= 12'h90F;
rommem[13814] <= 12'h0CC;
rommem[13815] <= 12'hFFE;
rommem[13816] <= 12'hC64;
rommem[13817] <= 12'h0FD;
rommem[13818] <= 12'h000;
rommem[13819] <= 12'h804;
rommem[13820] <= 12'h0CC;
rommem[13821] <= 12'hFFE;
rommem[13822] <= 12'h319;
rommem[13823] <= 12'h0FD;
rommem[13824] <= 12'h000;
rommem[13825] <= 12'h800;
rommem[13826] <= 12'h0FC;
rommem[13827] <= 12'hFFF;
rommem[13828] <= 12'h2B6;
rommem[13829] <= 12'h0FD;
rommem[13830] <= 12'h000;
rommem[13831] <= 12'h80C;
rommem[13832] <= 12'h016;
rommem[13833] <= 12'hFFF;
rommem[13834] <= 12'hF3F;
rommem[13835] <= 12'h08E;
rommem[13836] <= 12'h000;
rommem[13837] <= 12'h000;
rommem[13838] <= 12'h0E6;
rommem[13839] <= 12'h80A;
rommem[13840] <= 12'h000;
rommem[13841] <= 12'hFFC;
rommem[13842] <= 12'h000;
rommem[13843] <= 12'h0C1;
rommem[13844] <= 12'h018;
rommem[13845] <= 12'h026;
rommem[13846] <= 12'h00A;
rommem[13847] <= 12'h01F;
rommem[13848] <= 12'h010;
rommem[13849] <= 12'h017;
rommem[13850] <= 12'hFFE;
rommem[13851] <= 12'hE1B;
rommem[13852] <= 12'h0C6;
rommem[13853] <= 12'h020;
rommem[13854] <= 12'h017;
rommem[13855] <= 12'hFFF;
rommem[13856] <= 12'h8C0;
rommem[13857] <= 12'h030;
rommem[13858] <= 12'h001;
rommem[13859] <= 12'h08C;
rommem[13860] <= 12'h000;
rommem[13861] <= 12'h010;
rommem[13862] <= 12'h025;
rommem[13863] <= 12'hFE6;
rommem[13864] <= 12'h017;
rommem[13865] <= 12'hFFD;
rommem[13866] <= 12'hAA7;
rommem[13867] <= 12'h016;
rommem[13868] <= 12'hFFF;
rommem[13869] <= 12'hA0B;
rommem[13870] <= 12'h000;
rommem[13871] <= 12'hFFC;
rommem[13872] <= 12'h0FF;
rommem[13873] <= 12'h008;
rommem[13874] <= 12'hFFF;
rommem[13875] <= 12'h634;
rommem[13876] <= 12'hFFF;
rommem[13877] <= 12'h039;
rommem[13878] <= 12'hFFE;
rommem[13879] <= 12'hEA9;
rommem[13880] <= 12'hFFE;
rommem[13881] <= 12'hEE1;
rommem[13882] <= 12'hFFD;
rommem[13883] <= 12'h0D2;
rommem[13884] <= 12'hFFE;
rommem[13885] <= 12'h3DA;
rommem[13886] <= 12'hFFE;
rommem[13887] <= 12'h437;
rommem[13888] <= 12'hFFE;
rommem[13889] <= 12'h42E;
rommem[13890] <= 12'hFFE;
rommem[13891] <= 12'hEEB;
rommem[13892] <= 12'hFFE;
rommem[13893] <= 12'hF6F;
rommem[13894] <= 12'hFFE;
rommem[13895] <= 12'hF9D;
rommem[13896] <= 12'h000;
rommem[13897] <= 12'h000;
rommem[13898] <= 12'hFFF;
rommem[13899] <= 12'h1A3;
rommem[13900] <= 12'hFFF;
rommem[13901] <= 12'h262;
rommem[13902] <= 12'h000;
rommem[13903] <= 12'h800;
rommem[13904] <= 12'h000;
rommem[13905] <= 12'h000;
rommem[13906] <= 12'h000;
rommem[13907] <= 12'h000;
rommem[13908] <= 12'h000;
rommem[13909] <= 12'h000;
rommem[13910] <= 12'h000;
rommem[13911] <= 12'hC00;
rommem[13912] <= 12'hC00;
rommem[13913] <= 12'h000;
rommem[13914] <= 12'h800;
rommem[13915] <= 12'h0E6;
rommem[13916] <= 12'h80C;
rommem[13917] <= 12'hFD0;
rommem[13918] <= 12'h01F;
rommem[13919] <= 12'h09B;
rommem[13920] <= 12'h0EE;
rommem[13921] <= 12'h60B;
rommem[13922] <= 12'h033;
rommem[13923] <= 12'h5FF;
rommem[13924] <= 12'h07D;
rommem[13925] <= 12'h000;
rommem[13926] <= 12'h810;
rommem[13927] <= 12'h027;
rommem[13928] <= 12'h00F;
rommem[13929] <= 12'h0CE;
rommem[13930] <= 12'h000;
rommem[13931] <= 12'h820;
rommem[13932] <= 12'h0F6;
rommem[13933] <= 12'h000;
rommem[13934] <= 12'h811;
rommem[13935] <= 12'h027;
rommem[13936] <= 12'h007;
rommem[13937] <= 12'h2A3;
rommem[13938] <= 12'hA01;
rommem[13939] <= 12'h027;
rommem[13940] <= 12'h04B;
rommem[13941] <= 12'h05A;
rommem[13942] <= 12'h026;
rommem[13943] <= 12'hFF9;
rommem[13944] <= 12'h07F;
rommem[13945] <= 12'h000;
rommem[13946] <= 12'h810;
rommem[13947] <= 12'h037;
rommem[13948] <= 12'h006;
rommem[13949] <= 12'h0C1;
rommem[13950] <= 12'h00E;
rommem[13951] <= 12'h122;
rommem[13952] <= 12'hFFF;
rommem[13953] <= 12'hC34;
rommem[13954] <= 12'h0EF;
rommem[13955] <= 12'h60B;
rommem[13956] <= 12'h0C1;
rommem[13957] <= 12'h00A;
rommem[13958] <= 12'h027;
rommem[13693] <= 12'h911;
rommem[13694] <= 12'h0F6;
rommem[13695] <= 12'h000;
rommem[13696] <= 12'h910;
rommem[13697] <= 12'h0C9;
rommem[13698] <= 12'h000;
rommem[13699] <= 12'h0F7;
rommem[13700] <= 12'h000;
rommem[13701] <= 12'h910;
rommem[13702] <= 12'h030;
rommem[13703] <= 12'h001;
rommem[13704] <= 12'h08C;
rommem[13705] <= 12'h000;
rommem[13706] <= 12'h00F;
rommem[13707] <= 12'h025;
rommem[13708] <= 12'hFD2;
rommem[13709] <= 12'h01F;
rommem[13710] <= 12'h010;
rommem[13711] <= 12'h035;
rommem[13712] <= 12'h090;
rommem[13713] <= 12'h08D;
rommem[13714] <= 12'hECA;
rommem[13715] <= 12'h0C1;
rommem[13716] <= 12'h02B;
rommem[13717] <= 12'h027;
rommem[13718] <= 12'hFBB;
rommem[13719] <= 12'h0C1;
rommem[13720] <= 12'h025;
rommem[13721] <= 12'h027;
rommem[13722] <= 12'hF90;
rommem[13723] <= 12'h031;
rommem[13724] <= 12'h3FF;
rommem[13725] <= 12'h020;
rommem[13726] <= 12'hF5C;
rommem[13727] <= 12'h0C1;
rommem[13728] <= 12'h030;
rommem[13729] <= 12'h025;
rommem[13730] <= 12'h021;
rommem[13731] <= 12'h0C1;
rommem[13732] <= 12'h039;
rommem[13733] <= 12'h022;
rommem[13734] <= 12'h003;
rommem[13735] <= 12'h0C0;
rommem[13736] <= 12'h030;
rommem[13737] <= 12'h039;
rommem[13738] <= 12'h0C1;
rommem[13739] <= 12'h041;
rommem[13740] <= 12'h025;
rommem[13741] <= 12'h016;
rommem[13742] <= 12'h0C1;
rommem[13743] <= 12'h046;
rommem[13744] <= 12'h022;
rommem[13745] <= 12'h005;
rommem[13746] <= 12'h0C0;
rommem[13747] <= 12'h041;
rommem[13748] <= 12'h0CB;
rommem[13749] <= 12'h00A;
rommem[13750] <= 12'h039;
rommem[13751] <= 12'h0C1;
rommem[13752] <= 12'h061;
rommem[13753] <= 12'h025;
rommem[13754] <= 12'h009;
rommem[13755] <= 12'h0C1;
rommem[13756] <= 12'h07A;
rommem[13757] <= 12'h022;
rommem[13758] <= 12'h005;
rommem[13759] <= 12'h0C0;
rommem[13760] <= 12'h061;
rommem[13761] <= 12'h0CB;
rommem[13762] <= 12'h00A;
rommem[13763] <= 12'h039;
rommem[13764] <= 12'h0C6;
rommem[13765] <= 12'hFFF;
rommem[13766] <= 12'h039;
rommem[13767] <= 12'h0C1;
rommem[13768] <= 12'h030;
rommem[13769] <= 12'h025;
rommem[13770] <= 12'h007;
rommem[13771] <= 12'h0C1;
rommem[13772] <= 12'h039;
rommem[13773] <= 12'h022;
rommem[13774] <= 12'h003;
rommem[13775] <= 12'h0C0;
rommem[13776] <= 12'h030;
rommem[13777] <= 12'h039;
rommem[13778] <= 12'h0C6;
rommem[13779] <= 12'hFFF;
rommem[13780] <= 12'h039;
rommem[13781] <= 12'h0C1;
rommem[13782] <= 12'h030;
rommem[13783] <= 12'h026;
rommem[13784] <= 12'h002;
rommem[13785] <= 12'h05F;
rommem[13786] <= 12'h039;
rommem[13787] <= 12'h0C1;
rommem[13788] <= 12'h031;
rommem[13789] <= 12'h026;
rommem[13790] <= 12'h003;
rommem[13791] <= 12'h0C6;
rommem[13792] <= 12'h001;
rommem[13793] <= 12'h039;
rommem[13794] <= 12'h0C6;
rommem[13795] <= 12'hFFF;
rommem[13796] <= 12'h039;
rommem[13797] <= 12'h0CC;
rommem[13798] <= 12'hFFF;
rommem[13799] <= 12'h5F6;
rommem[13800] <= 12'h017;
rommem[13801] <= 12'hFFE;
rommem[13802] <= 12'hDF2;
rommem[13803] <= 12'h07E;
rommem[13804] <= 12'hFFF;
rommem[13805] <= 12'h35C;
rommem[13806] <= 12'h0DD;
rommem[13807] <= 12'h024;
rommem[13808] <= 12'h09F;
rommem[13809] <= 12'h026;
rommem[13810] <= 12'h0BD;
rommem[13811] <= 12'hFFE;
rommem[13812] <= 12'h3DD;
rommem[13813] <= 12'h039;
rommem[13814] <= 12'h02A;
rommem[13815] <= 12'h02A;
rommem[13816] <= 12'h045;
rommem[13817] <= 12'h072;
rommem[13818] <= 12'h072;
rommem[13819] <= 12'h00D;
rommem[13820] <= 12'h00A;
rommem[13821] <= 12'h000;
rommem[13822] <= 12'h03F;
rommem[13823] <= 12'h020;
rommem[13824] <= 12'h03D;
rommem[13825] <= 12'h020;
rommem[13826] <= 12'h044;
rommem[13827] <= 12'h069;
rommem[13828] <= 12'h073;
rommem[13829] <= 12'h070;
rommem[13830] <= 12'h06C;
rommem[13831] <= 12'h061;
rommem[13832] <= 12'h079;
rommem[13833] <= 12'h020;
rommem[13834] <= 12'h068;
rommem[13835] <= 12'h065;
rommem[13836] <= 12'h06C;
rommem[13837] <= 12'h070;
rommem[13838] <= 12'h00D;
rommem[13839] <= 12'h00A;
rommem[13840] <= 12'h043;
rommem[13841] <= 12'h04C;
rommem[13842] <= 12'h053;
rommem[13843] <= 12'h020;
rommem[13844] <= 12'h03D;
rommem[13845] <= 12'h020;
rommem[13846] <= 12'h063;
rommem[13847] <= 12'h06C;
rommem[13848] <= 12'h065;
rommem[13849] <= 12'h061;
rommem[13850] <= 12'h072;
rommem[13851] <= 12'h020;
rommem[13852] <= 12'h073;
rommem[13853] <= 12'h063;
rommem[13854] <= 12'h072;
rommem[13855] <= 12'h065;
rommem[13856] <= 12'h065;
rommem[13857] <= 12'h06E;
rommem[13858] <= 12'h00D;
rommem[13859] <= 12'h00A;
rommem[13860] <= 12'h062;
rommem[13861] <= 12'h02B;
rommem[13862] <= 12'h020;
rommem[13863] <= 12'h03D;
rommem[13864] <= 12'h020;
rommem[13865] <= 12'h073;
rommem[13866] <= 12'h065;
rommem[13867] <= 12'h074;
rommem[13868] <= 12'h020;
rommem[13869] <= 12'h062;
rommem[13870] <= 12'h072;
rommem[13871] <= 12'h065;
rommem[13872] <= 12'h061;
rommem[13873] <= 12'h06B;
rommem[13874] <= 12'h070;
rommem[13875] <= 12'h06F;
rommem[13876] <= 12'h069;
rommem[13877] <= 12'h06E;
rommem[13878] <= 12'h074;
rommem[13879] <= 12'h00D;
rommem[13880] <= 12'h00A;
rommem[13881] <= 12'h062;
rommem[13882] <= 12'h02D;
rommem[13883] <= 12'h020;
rommem[13884] <= 12'h03D;
rommem[13885] <= 12'h020;
rommem[13886] <= 12'h063;
rommem[13887] <= 12'h06C;
rommem[13888] <= 12'h065;
rommem[13889] <= 12'h061;
rommem[13890] <= 12'h072;
rommem[13891] <= 12'h020;
rommem[13892] <= 12'h062;
rommem[13893] <= 12'h072;
rommem[13894] <= 12'h065;
rommem[13895] <= 12'h061;
rommem[13896] <= 12'h06B;
rommem[13897] <= 12'h070;
rommem[13898] <= 12'h06F;
rommem[13899] <= 12'h069;
rommem[13900] <= 12'h06E;
rommem[13901] <= 12'h074;
rommem[13902] <= 12'h00D;
rommem[13903] <= 12'h00A;
rommem[13904] <= 12'h03A;
rommem[13905] <= 12'h020;
rommem[13906] <= 12'h03D;
rommem[13907] <= 12'h020;
rommem[13908] <= 12'h045;
rommem[13909] <= 12'h064;
rommem[13910] <= 12'h069;
rommem[13911] <= 12'h074;
rommem[13912] <= 12'h020;
rommem[13913] <= 12'h06D;
rommem[13914] <= 12'h065;
rommem[13915] <= 12'h06D;
rommem[13916] <= 12'h06F;
rommem[13917] <= 12'h072;
rommem[13918] <= 12'h079;
rommem[13919] <= 12'h020;
rommem[13920] <= 12'h062;
rommem[13921] <= 12'h079;
rommem[13922] <= 12'h074;
rommem[13923] <= 12'h065;
rommem[13924] <= 12'h073;
rommem[13925] <= 12'h00D;
rommem[13926] <= 12'h00A;
rommem[13927] <= 12'h044;
rommem[13928] <= 12'h052;
rommem[13929] <= 12'h020;
rommem[13930] <= 12'h03D;
rommem[13931] <= 12'h020;
rommem[13932] <= 12'h044;
rommem[13933] <= 12'h075;
rommem[13934] <= 12'h06D;
rommem[13935] <= 12'h070;
rommem[13936] <= 12'h020;
rommem[13937] <= 12'h072;
rommem[13938] <= 12'h065;
rommem[13939] <= 12'h067;
rommem[13940] <= 12'h069;
rommem[13941] <= 12'h073;
rommem[13942] <= 12'h074;
rommem[13943] <= 12'h065;
rommem[13944] <= 12'h072;
rommem[13945] <= 12'h073;
rommem[13946] <= 12'h00D;
rommem[13947] <= 12'h00A;
rommem[13948] <= 12'h044;
rommem[13949] <= 12'h020;
rommem[13950] <= 12'h03D;
rommem[13951] <= 12'h020;
rommem[13952] <= 12'h044;
rommem[13953] <= 12'h075;
rommem[13954] <= 12'h06D;
rommem[13955] <= 12'h070;
rommem[13956] <= 12'h020;
rommem[13957] <= 12'h06D;
rommem[13958] <= 12'h065;
rommem[13959] <= 12'h06D;
rommem[13960] <= 12'h058;
rommem[13961] <= 12'h0AE;
rommem[13962] <= 12'h80C;
rommem[13963] <= 12'hFA6;
rommem[13964] <= 12'h03A;
rommem[13965] <= 12'h0AE;
rommem[13966] <= 12'h804;
rommem[13967] <= 12'h0BF;
rommem[13968] <= 12'h000;
rommem[13969] <= 12'h928;
rommem[13970] <= 12'h054;
rommem[13971] <= 12'h08E;
rommem[13972] <= 12'hFFF;
rommem[13973] <= 12'h64E;
rommem[13974] <= 12'h03A;
rommem[13975] <= 12'h0E6;
rommem[13976] <= 12'h804;
rommem[13977] <= 12'h0F7;
rommem[13978] <= 12'h000;
rommem[13979] <= 12'h930;
rommem[13980] <= 12'h1FF;
rommem[13981] <= 12'h000;
rommem[13982] <= 12'h908;
rommem[13983] <= 12'h0EC;
rommem[13984] <= 12'h601;
rommem[13985] <= 12'h0AE;
rommem[13986] <= 12'h604;
rommem[13987] <= 12'h1AE;
rommem[13988] <= 12'h606;
rommem[13989] <= 12'h0EE;
rommem[13990] <= 12'h608;
rommem[13991] <= 12'h1EE;
rommem[13992] <= 12'h80C;
rommem[13993] <= 12'hF85;
rommem[13994] <= 12'h0AD;
rommem[13995] <= 12'h90F;
rommem[13996] <= 12'h000;
rommem[13997] <= 12'h928;
rommem[13998] <= 12'h1FE;
rommem[13999] <= 12'h000;
rommem[14000] <= 12'h908;
rommem[14001] <= 12'h07D;
rommem[14002] <= 12'h000;
rommem[14003] <= 12'h930;
rommem[14004] <= 12'h02A;
rommem[14005] <= 12'h009;
rommem[14006] <= 12'h0ED;
rommem[14007] <= 12'h601;
rommem[14008] <= 12'h078;
rommem[14009] <= 12'h000;
rommem[14010] <= 12'h930;
rommem[14011] <= 12'h02A;
rommem[14012] <= 12'h002;
rommem[14013] <= 12'h0AF;
rommem[14014] <= 12'h604;
rommem[14015] <= 12'h03B;
rommem[14016] <= 12'h0A6;
rommem[14017] <= 12'hE04;
rommem[14018] <= 12'h0B7;
rommem[14019] <= 12'h000;
rommem[14020] <= 12'h90F;
rommem[14021] <= 12'h0EC;
rommem[14022] <= 12'h601;
rommem[14023] <= 12'h0FD;
rommem[14024] <= 12'h000;
rommem[14025] <= 12'h900;
rommem[14026] <= 12'h0E6;
rommem[14027] <= 12'h603;
rommem[14028] <= 12'h0F7;
rommem[14029] <= 12'h000;
rommem[14030] <= 12'h90E;
rommem[14031] <= 12'h0EC;
rommem[14032] <= 12'h604;
rommem[14033] <= 12'h0FD;
rommem[14034] <= 12'h000;
rommem[14035] <= 12'h902;
rommem[14036] <= 12'h0EC;
rommem[14037] <= 12'h606;
rommem[14038] <= 12'h0FD;
rommem[14039] <= 12'h000;
rommem[14040] <= 12'h904;
rommem[14041] <= 12'h0EC;
rommem[14042] <= 12'h608;
rommem[14043] <= 12'h0FD;
rommem[14044] <= 12'h000;
rommem[14045] <= 12'h906;
rommem[14046] <= 12'h1FF;
rommem[14047] <= 12'h000;
rommem[14048] <= 12'h908;
rommem[14049] <= 12'h0EC;
rommem[14050] <= 12'h60B;
rommem[14051] <= 12'h0FD;
rommem[14052] <= 12'h000;
rommem[14053] <= 12'h90A;
rommem[14054] <= 12'h1EE;
rommem[14055] <= 12'h80C;
rommem[14056] <= 12'hF46;
rommem[14057] <= 12'h0CC;
rommem[14058] <= 12'hFFF;
rommem[14059] <= 12'h6AE;
rommem[14060] <= 12'h034;
rommem[14061] <= 12'h006;
rommem[14062] <= 12'h08D;
rommem[14063] <= 12'h01F;
rommem[14064] <= 12'h016;
rommem[14065] <= 12'hFFF;
rommem[14066] <= 12'hE57;
rommem[14067] <= 12'h020;
rommem[14068] <= 12'h039;
rommem[14069] <= 12'h033;
rommem[14070] <= 12'h401;
rommem[14071] <= 12'h0E6;
rommem[14072] <= 12'hC00;
rommem[14073] <= 12'h0C1;
rommem[14074] <= 12'h019;
rommem[14075] <= 12'h122;
rommem[14076] <= 12'hFFF;
rommem[14077] <= 12'hBB8;
rommem[14078] <= 12'h0EF;
rommem[14079] <= 12'h60B;
rommem[14080] <= 12'h058;
rommem[14081] <= 12'h08E;
rommem[14082] <= 12'hFFE;
rommem[14083] <= 12'hEF6;
rommem[14084] <= 12'h06D;
rommem[14085] <= 12'hE0F;
rommem[14086] <= 12'h027;
rommem[14087] <= 12'hFA6;
rommem[14088] <= 12'h0AD;
rommem[14089] <= 12'hF0F;
rommem[14090] <= 12'h07F;
rommem[14091] <= 12'hEF0;
rommem[14092] <= 12'h011;
rommem[13960] <= 12'h06F;
rommem[13961] <= 12'h072;
rommem[13962] <= 12'h079;
rommem[13963] <= 12'h00D;
rommem[13964] <= 12'h00A;
rommem[13965] <= 12'h046;
rommem[13966] <= 12'h020;
rommem[13967] <= 12'h03D;
rommem[13968] <= 12'h020;
rommem[13969] <= 12'h046;
rommem[13970] <= 12'h069;
rommem[13971] <= 12'h06C;
rommem[13972] <= 12'h06C;
rommem[13973] <= 12'h020;
rommem[13974] <= 12'h06D;
rommem[13975] <= 12'h065;
rommem[13976] <= 12'h06D;
rommem[13977] <= 12'h06F;
rommem[13978] <= 12'h072;
rommem[13979] <= 12'h079;
rommem[13980] <= 12'h00D;
rommem[13981] <= 12'h00A;
rommem[13982] <= 12'h046;
rommem[13983] <= 12'h04C;
rommem[13984] <= 12'h020;
rommem[13985] <= 12'h03D;
rommem[13986] <= 12'h020;
rommem[13987] <= 12'h044;
rommem[13988] <= 12'h075;
rommem[13989] <= 12'h06D;
rommem[13990] <= 12'h070;
rommem[13991] <= 12'h020;
rommem[13992] <= 12'h049;
rommem[13993] <= 12'h02F;
rommem[13994] <= 12'h04F;
rommem[13995] <= 12'h020;
rommem[13996] <= 12'h046;
rommem[13997] <= 12'h06F;
rommem[13998] <= 12'h063;
rommem[13999] <= 12'h075;
rommem[14000] <= 12'h073;
rommem[14001] <= 12'h020;
rommem[14002] <= 12'h04C;
rommem[14003] <= 12'h069;
rommem[14004] <= 12'h073;
rommem[14005] <= 12'h074;
rommem[14006] <= 12'h00D;
rommem[14007] <= 12'h00A;
rommem[14008] <= 12'h04A;
rommem[14009] <= 12'h020;
rommem[14010] <= 12'h03D;
rommem[14011] <= 12'h020;
rommem[14012] <= 12'h04A;
rommem[14013] <= 12'h075;
rommem[14014] <= 12'h06D;
rommem[14015] <= 12'h070;
rommem[14016] <= 12'h020;
rommem[14017] <= 12'h074;
rommem[14018] <= 12'h06F;
rommem[14019] <= 12'h020;
rommem[14020] <= 12'h063;
rommem[14021] <= 12'h06F;
rommem[14022] <= 12'h064;
rommem[14023] <= 12'h065;
rommem[14024] <= 12'h00D;
rommem[14025] <= 12'h00A;
rommem[14026] <= 12'h04A;
rommem[14027] <= 12'h044;
rommem[14028] <= 12'h034;
rommem[14029] <= 12'h020;
rommem[14030] <= 12'h03D;
rommem[14031] <= 12'h020;
rommem[14032] <= 12'h04A;
rommem[14033] <= 12'h075;
rommem[14034] <= 12'h06D;
rommem[14035] <= 12'h070;
rommem[14036] <= 12'h020;
rommem[14037] <= 12'h074;
rommem[14038] <= 12'h06F;
rommem[14039] <= 12'h020;
rommem[14040] <= 12'h024;
rommem[14041] <= 12'h046;
rommem[14042] <= 12'h046;
rommem[14043] <= 12'h044;
rommem[14044] <= 12'h034;
rommem[14045] <= 12'h030;
rommem[14046] <= 12'h030;
rommem[14047] <= 12'h00D;
rommem[14048] <= 12'h00A;
rommem[14049] <= 12'h052;
rommem[14050] <= 12'h05B;
rommem[14051] <= 12'h06E;
rommem[14052] <= 12'h05D;
rommem[14053] <= 12'h020;
rommem[14054] <= 12'h03D;
rommem[14055] <= 12'h020;
rommem[14056] <= 12'h053;
rommem[14057] <= 12'h065;
rommem[14058] <= 12'h074;
rommem[14059] <= 12'h020;
rommem[14060] <= 12'h072;
rommem[14061] <= 12'h065;
rommem[14062] <= 12'h067;
rommem[14063] <= 12'h069;
rommem[14064] <= 12'h073;
rommem[14065] <= 12'h074;
rommem[14066] <= 12'h065;
rommem[14067] <= 12'h072;
rommem[14068] <= 12'h020;
rommem[14069] <= 12'h076;
rommem[14070] <= 12'h061;
rommem[14071] <= 12'h06C;
rommem[14072] <= 12'h075;
rommem[14073] <= 12'h065;
rommem[14074] <= 12'h00D;
rommem[14075] <= 12'h00A;
rommem[14076] <= 12'h073;
rommem[14077] <= 12'h020;
rommem[14078] <= 12'h03D;
rommem[14079] <= 12'h020;
rommem[14080] <= 12'h073;
rommem[14081] <= 12'h065;
rommem[14082] <= 12'h072;
rommem[14083] <= 12'h069;
rommem[14084] <= 12'h061;
rommem[14085] <= 12'h06C;
rommem[14086] <= 12'h020;
rommem[14087] <= 12'h06F;
rommem[14088] <= 12'h075;
rommem[14089] <= 12'h074;
rommem[14090] <= 12'h070;
rommem[14091] <= 12'h075;
rommem[14092] <= 12'h074;
rommem[14093] <= 12'h020;
rommem[14094] <= 12'hF9F;
rommem[14095] <= 12'h034;
rommem[14096] <= 12'h036;
rommem[14097] <= 12'h18E;
rommem[14098] <= 12'h000;
rommem[14099] <= 12'h000;
rommem[14100] <= 12'h05F;
rommem[14101] <= 12'h08E;
rommem[14102] <= 12'h000;
rommem[14103] <= 12'h830;
rommem[14104] <= 12'h0C1;
rommem[14105] <= 12'h631;
rommem[14106] <= 12'h024;
rommem[14107] <= 12'h010;
rommem[14108] <= 12'h0F1;
rommem[14109] <= 12'h000;
rommem[14110] <= 12'h811;
rommem[14111] <= 12'h024;
rommem[14112] <= 12'h00B;
rommem[14113] <= 12'h0A6;
rommem[14114] <= 12'h837;
rommem[14115] <= 12'h0A7;
rommem[14116] <= 12'hB09;
rommem[14117] <= 12'h000;
rommem[14118] <= 12'h820;
rommem[14119] <= 12'h031;
rommem[14120] <= 12'h202;
rommem[14121] <= 12'h05C;
rommem[14122] <= 12'h020;
rommem[14123] <= 12'hFEC;
rommem[14124] <= 12'h035;
rommem[14125] <= 12'h0B6;
rommem[14126] <= 12'h034;
rommem[14127] <= 12'h036;
rommem[14128] <= 12'h18E;
rommem[14129] <= 12'h000;
rommem[14130] <= 12'h000;
rommem[14131] <= 12'h05F;
rommem[14132] <= 12'h08E;
rommem[14133] <= 12'h000;
rommem[14134] <= 12'h830;
rommem[14135] <= 12'h0F1;
rommem[14136] <= 12'hFFF;
rommem[14137] <= 12'h631;
rommem[14138] <= 12'h024;
rommem[14139] <= 12'h010;
rommem[14140] <= 12'h0F1;
rommem[14141] <= 12'h000;
rommem[14142] <= 12'h811;
rommem[14143] <= 12'h024;
rommem[14144] <= 12'h00B;
rommem[14145] <= 12'h0A6;
rommem[14146] <= 12'hB09;
rommem[14147] <= 12'h000;
rommem[14148] <= 12'h820;
rommem[14149] <= 12'h0A7;
rommem[14150] <= 12'hB0D;
rommem[14151] <= 12'h031;
rommem[14152] <= 12'h202;
rommem[14153] <= 12'h05C;
rommem[14154] <= 12'h020;
rommem[14155] <= 12'hFEB;
rommem[14156] <= 12'h035;
rommem[14157] <= 12'h0B6;
rommem[14158] <= 12'h034;
rommem[14159] <= 12'h036;
rommem[14160] <= 12'h0B6;
rommem[14161] <= 12'h000;
rommem[14162] <= 12'h811;
rommem[14163] <= 12'h0B1;
rommem[14164] <= 12'hFFF;
rommem[14165] <= 12'h631;
rommem[14166] <= 12'h124;
rommem[14167] <= 12'hFFF;
rommem[14168] <= 12'hB5D;
rommem[14169] <= 12'h017;
rommem[14170] <= 12'hFFF;
rommem[14171] <= 12'hA70;
rommem[14172] <= 12'h0F6;
rommem[14173] <= 12'h000;
rommem[14174] <= 12'h811;
rommem[14175] <= 12'h1BE;
rommem[14176] <= 12'h000;
rommem[14177] <= 12'h912;
rommem[14178] <= 12'h0A6;
rommem[14179] <= 12'hA04;
rommem[14180] <= 12'h08E;
rommem[14181] <= 12'h000;
rommem[14182] <= 12'h830;
rommem[14183] <= 12'h0A7;
rommem[14184] <= 12'hA05;
rommem[14185] <= 12'h086;
rommem[14186] <= 12'h03F;
rommem[14187] <= 12'h0A7;
rommem[14188] <= 12'hA04;
rommem[14189] <= 12'h08E;
rommem[14190] <= 12'h000;
rommem[14191] <= 12'h820;
rommem[14192] <= 12'h058;
rommem[14193] <= 12'h1AF;
rommem[14194] <= 12'hA05;
rommem[14195] <= 12'h054;
rommem[14196] <= 12'h05C;
rommem[14197] <= 12'h0F7;
rommem[14198] <= 12'h000;
rommem[14199] <= 12'h811;
rommem[14200] <= 12'h035;
rommem[14201] <= 12'h0B6;
rommem[14202] <= 12'h034;
rommem[14203] <= 12'h076;
rommem[14204] <= 12'h017;
rommem[14205] <= 12'hFFF;
rommem[14206] <= 12'hA4D;
rommem[14207] <= 12'h05F;
rommem[14208] <= 12'h05F;
rommem[14209] <= 12'h01F;
rommem[14210] <= 12'h001;
rommem[14211] <= 12'h0F1;
rommem[14212] <= 12'hFFF;
rommem[14213] <= 12'h631;
rommem[14214] <= 12'h024;
rommem[14215] <= 12'h041;
rommem[14216] <= 12'h0F1;
rommem[14217] <= 12'h000;
rommem[14218] <= 12'h811;
rommem[14219] <= 12'h024;
rommem[14220] <= 12'h03C;
rommem[14221] <= 12'h1AE;
rommem[14222] <= 12'h809;
rommem[14223] <= 12'h000;
rommem[14224] <= 12'h820;
rommem[14225] <= 12'h1BC;
rommem[14226] <= 12'h000;
rommem[14227] <= 12'h912;
rommem[14228] <= 12'h026;
rommem[14229] <= 12'h02E;
rommem[14230] <= 12'h0BE;
rommem[14231] <= 12'h000;
rommem[14232] <= 12'h912;
rommem[14233] <= 12'h18E;
rommem[14234] <= 12'h000;
rommem[14235] <= 12'h830;
rommem[14236] <= 12'h0A6;
rommem[14237] <= 12'hA0D;
rommem[14238] <= 12'h0A7;
rommem[14239] <= 12'h804;
rommem[14240] <= 12'h07A;
rommem[14241] <= 12'h000;
rommem[14242] <= 12'h811;
rommem[14243] <= 12'h034;
rommem[14244] <= 12'h004;
rommem[14245] <= 12'h05C;
rommem[14246] <= 12'h0A6;
rommem[14247] <= 12'hA05;
rommem[14248] <= 12'h05A;
rommem[14249] <= 12'h0A7;
rommem[14250] <= 12'hA05;
rommem[14251] <= 12'h05C;
rommem[14252] <= 12'h0F1;
rommem[14253] <= 12'hFFF;
rommem[14254] <= 12'h631;
rommem[14255] <= 12'h025;
rommem[14256] <= 12'hFF4;
rommem[14257] <= 12'h035;
rommem[14258] <= 12'h004;
rommem[14259] <= 12'h058;
rommem[14260] <= 12'h04F;
rommem[14261] <= 12'h01F;
rommem[14262] <= 12'h002;
rommem[14263] <= 12'h054;
rommem[14264] <= 12'h0EE;
rommem[14265] <= 12'h202;
rommem[14266] <= 12'h0EF;
rommem[14267] <= 12'hA01;
rommem[14268] <= 12'h05C;
rommem[14269] <= 12'h0F1;
rommem[14270] <= 12'hFFF;
rommem[14271] <= 12'h631;
rommem[14272] <= 12'h025;
rommem[14273] <= 12'hFF6;
rommem[14274] <= 12'h035;
rommem[14275] <= 12'h0F6;
rommem[14276] <= 12'h030;
rommem[14277] <= 12'h002;
rommem[14278] <= 12'h05C;
rommem[14279] <= 12'h020;
rommem[14280] <= 12'hFBA;
rommem[14281] <= 12'h035;
rommem[14282] <= 12'h0F6;
rommem[14283] <= 12'h01A;
rommem[14284] <= 12'h010;
rommem[14285] <= 12'h0A6;
rommem[14286] <= 12'hE04;
rommem[14287] <= 12'h0B7;
rommem[14288] <= 12'h000;
rommem[14289] <= 12'h90F;
rommem[14290] <= 12'h0EC;
rommem[14291] <= 12'h601;
rommem[14292] <= 12'h0FD;
rommem[14293] <= 12'h000;
rommem[14294] <= 12'h900;
rommem[14295] <= 12'h0E6;
rommem[14296] <= 12'h603;
rommem[14297] <= 12'h0F7;
rommem[14298] <= 12'h000;
rommem[14299] <= 12'h90E;
rommem[14300] <= 12'h0EC;
rommem[14301] <= 12'h604;
rommem[14302] <= 12'h0FD;
rommem[14303] <= 12'h000;
rommem[14304] <= 12'h902;
rommem[14305] <= 12'h0EC;
rommem[14306] <= 12'h606;
rommem[14307] <= 12'h0FD;
rommem[14308] <= 12'h000;
rommem[14309] <= 12'h904;
rommem[14310] <= 12'h0EC;
rommem[14311] <= 12'h608;
rommem[14312] <= 12'h0FD;
rommem[14313] <= 12'h000;
rommem[14314] <= 12'h906;
rommem[14315] <= 12'h1FF;
rommem[14316] <= 12'h000;
rommem[14317] <= 12'h908;
rommem[14318] <= 12'h0EC;
rommem[14319] <= 12'h60B;
rommem[14320] <= 12'h0FD;
rommem[14321] <= 12'h000;
rommem[14322] <= 12'h90A;
rommem[14323] <= 12'h1FF;
rommem[14324] <= 12'h000;
rommem[14325] <= 12'h908;
rommem[14326] <= 12'h1CE;
rommem[14327] <= 12'h003;
rommem[14328] <= 12'hFFF;
rommem[14329] <= 12'h0CC;
rommem[14330] <= 12'hFFF;
rommem[14331] <= 12'h803;
rommem[14332] <= 12'h034;
rommem[14333] <= 12'h006;
rommem[14334] <= 12'h01C;
rommem[14335] <= 12'h0EF;
rommem[14336] <= 12'h07E;
rommem[14337] <= 12'hFFF;
rommem[14338] <= 12'h54A;
rommem[14339] <= 12'h1FE;
rommem[14340] <= 12'h000;
rommem[14341] <= 12'h908;
rommem[14342] <= 12'h03B;
rommem[14343] <= 12'h03B;
rommem[14094] <= 12'h074;
rommem[14095] <= 12'h065;
rommem[14096] <= 12'h073;
rommem[14097] <= 12'h074;
rommem[14098] <= 12'h00D;
rommem[14099] <= 12'h00A;
rommem[14100] <= 12'h053;
rommem[14101] <= 12'h031;
rommem[14102] <= 12'h039;
rommem[14103] <= 12'h020;
rommem[14104] <= 12'h03D;
rommem[14105] <= 12'h020;
rommem[14106] <= 12'h072;
rommem[14107] <= 12'h075;
rommem[14108] <= 12'h06E;
rommem[14109] <= 12'h020;
rommem[14110] <= 12'h053;
rommem[14111] <= 12'h031;
rommem[14112] <= 12'h039;
rommem[14113] <= 12'h020;
rommem[14114] <= 12'h06C;
rommem[14115] <= 12'h06F;
rommem[14116] <= 12'h061;
rommem[14117] <= 12'h064;
rommem[14118] <= 12'h065;
rommem[14119] <= 12'h072;
rommem[14120] <= 12'h00D;
rommem[14121] <= 12'h00A;
rommem[14122] <= 12'h053;
rommem[14123] <= 12'h050;
rommem[14124] <= 12'h020;
rommem[14125] <= 12'h03D;
rommem[14126] <= 12'h020;
rommem[14127] <= 12'h073;
rommem[14128] <= 12'h070;
rommem[14129] <= 12'h072;
rommem[14130] <= 12'h069;
rommem[14131] <= 12'h074;
rommem[14132] <= 12'h065;
rommem[14133] <= 12'h020;
rommem[14134] <= 12'h064;
rommem[14135] <= 12'h065;
rommem[14136] <= 12'h06D;
rommem[14137] <= 12'h06F;
rommem[14138] <= 12'h00D;
rommem[14139] <= 12'h00A;
rommem[14140] <= 12'h054;
rommem[14141] <= 12'h049;
rommem[14142] <= 12'h020;
rommem[14143] <= 12'h03D;
rommem[14144] <= 12'h020;
rommem[14145] <= 12'h064;
rommem[14146] <= 12'h069;
rommem[14147] <= 12'h073;
rommem[14148] <= 12'h070;
rommem[14149] <= 12'h06C;
rommem[14150] <= 12'h061;
rommem[14151] <= 12'h079;
rommem[14152] <= 12'h020;
rommem[14153] <= 12'h064;
rommem[14154] <= 12'h061;
rommem[14155] <= 12'h074;
rommem[14156] <= 12'h065;
rommem[14157] <= 12'h02F;
rommem[14158] <= 12'h074;
rommem[14159] <= 12'h069;
rommem[14160] <= 12'h06D;
rommem[14161] <= 12'h065;
rommem[14162] <= 12'h00D;
rommem[14163] <= 12'h00A;
rommem[14164] <= 12'h055;
rommem[14165] <= 12'h020;
rommem[14166] <= 12'h03D;
rommem[14167] <= 12'h020;
rommem[14168] <= 12'h075;
rommem[14169] <= 12'h06E;
rommem[14170] <= 12'h061;
rommem[14171] <= 12'h073;
rommem[14172] <= 12'h073;
rommem[14173] <= 12'h065;
rommem[14174] <= 12'h06D;
rommem[14175] <= 12'h062;
rommem[14176] <= 12'h06C;
rommem[14177] <= 12'h065;
rommem[14178] <= 12'h00D;
rommem[14179] <= 12'h00A;
rommem[14180] <= 12'h058;
rommem[14181] <= 12'h04D;
rommem[14182] <= 12'h020;
rommem[14183] <= 12'h03D;
rommem[14184] <= 12'h020;
rommem[14185] <= 12'h078;
rommem[14186] <= 12'h06D;
rommem[14187] <= 12'h06F;
rommem[14188] <= 12'h064;
rommem[14189] <= 12'h065;
rommem[14190] <= 12'h06D;
rommem[14191] <= 12'h020;
rommem[14192] <= 12'h074;
rommem[14193] <= 12'h072;
rommem[14194] <= 12'h061;
rommem[14195] <= 12'h06E;
rommem[14196] <= 12'h073;
rommem[14197] <= 12'h066;
rommem[14198] <= 12'h065;
rommem[14199] <= 12'h072;
rommem[14200] <= 12'h00D;
rommem[14201] <= 12'h00A;
rommem[14202] <= 12'h078;
rommem[14203] <= 12'h020;
rommem[14204] <= 12'h03D;
rommem[14205] <= 12'h020;
rommem[14206] <= 12'h065;
rommem[14207] <= 12'h078;
rommem[14208] <= 12'h069;
rommem[14209] <= 12'h074;
rommem[14210] <= 12'h020;
rommem[14211] <= 12'h06D;
rommem[14212] <= 12'h06F;
rommem[14213] <= 12'h06E;
rommem[14214] <= 12'h069;
rommem[14215] <= 12'h074;
rommem[14216] <= 12'h06F;
rommem[14217] <= 12'h072;
rommem[14218] <= 12'h00D;
rommem[14219] <= 12'h00A;
rommem[14220] <= 12'h000;
rommem[14221] <= 12'h00D;
rommem[14222] <= 12'h00A;
rommem[14223] <= 12'h020;
rommem[14224] <= 12'h020;
rommem[14225] <= 12'h044;
rommem[14226] <= 12'h02F;
rommem[14227] <= 12'h041;
rommem[14228] <= 12'h042;
rommem[14229] <= 12'h020;
rommem[14230] <= 12'h020;
rommem[14231] <= 12'h020;
rommem[14232] <= 12'h020;
rommem[14233] <= 12'h020;
rommem[14234] <= 12'h058;
rommem[14235] <= 12'h020;
rommem[14236] <= 12'h020;
rommem[14237] <= 12'h020;
rommem[14238] <= 12'h020;
rommem[14239] <= 12'h020;
rommem[14240] <= 12'h020;
rommem[14241] <= 12'h059;
rommem[14242] <= 12'h020;
rommem[14243] <= 12'h020;
rommem[14244] <= 12'h020;
rommem[14245] <= 12'h020;
rommem[14246] <= 12'h020;
rommem[14247] <= 12'h020;
rommem[14248] <= 12'h055;
rommem[14249] <= 12'h020;
rommem[14250] <= 12'h020;
rommem[14251] <= 12'h020;
rommem[14252] <= 12'h020;
rommem[14253] <= 12'h020;
rommem[14254] <= 12'h020;
rommem[14255] <= 12'h053;
rommem[14256] <= 12'h020;
rommem[14257] <= 12'h020;
rommem[14258] <= 12'h020;
rommem[14259] <= 12'h020;
rommem[14260] <= 12'h020;
rommem[14261] <= 12'h020;
rommem[14262] <= 12'h020;
rommem[14263] <= 12'h050;
rommem[14264] <= 12'h043;
rommem[14265] <= 12'h020;
rommem[14266] <= 12'h020;
rommem[14267] <= 12'h020;
rommem[14268] <= 12'h020;
rommem[14269] <= 12'h044;
rommem[14270] <= 12'h050;
rommem[14271] <= 12'h020;
rommem[14272] <= 12'h020;
rommem[14273] <= 12'h043;
rommem[14274] <= 12'h043;
rommem[14275] <= 12'h052;
rommem[14276] <= 12'h00D;
rommem[14277] <= 12'h00A;
rommem[14278] <= 12'h000;
rommem[14279] <= 12'h0BD;
rommem[14280] <= 12'hFFD;
rommem[14281] <= 12'h2D2;
rommem[14282] <= 12'h039;
rommem[14283] <= 12'h0C6;
rommem[14284] <= 12'h020;
rommem[14285] <= 12'h016;
rommem[14286] <= 12'hFFF;
rommem[14287] <= 12'h9F9;
rommem[14288] <= 12'h08D;
rommem[14289] <= 12'hD00;
rommem[14290] <= 12'h18E;
rommem[14291] <= 12'h000;
rommem[14292] <= 12'h000;
rommem[14293] <= 12'h1BE;
rommem[14294] <= 12'h000;
rommem[14295] <= 12'h922;
rommem[14296] <= 12'h017;
rommem[14297] <= 12'hFFD;
rommem[14298] <= 12'h8F7;
rommem[14299] <= 12'h0C6;
rommem[14300] <= 12'h03A;
rommem[14301] <= 12'h017;
rommem[14302] <= 12'hFFF;
rommem[14303] <= 12'h9E9;
rommem[14304] <= 12'h01F;
rommem[14305] <= 12'h020;
rommem[14306] <= 12'h017;
rommem[14307] <= 12'hFFE;
rommem[14308] <= 12'hC4C;
rommem[14309] <= 12'h0C6;
rommem[14310] <= 12'h020;
rommem[14311] <= 12'h017;
rommem[14312] <= 12'hFFF;
rommem[14313] <= 12'h9DF;
rommem[14314] <= 12'h08E;
rommem[14315] <= 12'h000;
rommem[14316] <= 12'h008;
rommem[14317] <= 12'h0E6;
rommem[14318] <= 12'hA04;
rommem[14319] <= 12'h031;
rommem[14320] <= 12'h201;
rommem[14321] <= 12'h017;
rommem[14322] <= 12'hFFE;
rommem[14323] <= 12'hC46;
rommem[14324] <= 12'h0C6;
rommem[14325] <= 12'h020;
rommem[14326] <= 12'h017;
rommem[14327] <= 12'hFFF;
rommem[14328] <= 12'h9D0;
rommem[14329] <= 12'h05F;
rommem[14330] <= 12'h04F;
rommem[14331] <= 12'h017;
rommem[14332] <= 12'hFFF;
rommem[14333] <= 12'h993;
rommem[14334] <= 12'h0C1;
rommem[14335] <= 12'h003;
rommem[14336] <= 12'h027;
rommem[14337] <= 12'h024;
rommem[14338] <= 12'h030;
rommem[14339] <= 12'h1FF;
rommem[14340] <= 12'h026;
rommem[14341] <= 12'hFE7;
rommem[14342] <= 12'h0C6;
rommem[14343] <= 12'h020;
rommem[14344] <= 12'h017;
rommem[14345] <= 12'hFFE;
rommem[14346] <= 12'hC85;
rommem[14347] <= 12'h0B6;
rommem[14348] <= 12'hFFC;
rommem[14349] <= 12'h014;
rommem[14350] <= 12'h044;
rommem[14351] <= 12'h0BA;
rommem[14352] <= 12'hFFC;
rommem[14353] <= 12'h014;
rommem[14354] <= 12'h084;
rommem[14355] <= 12'hFE0;
rommem[14356] <= 12'h0B7;
rommem[14357] <= 12'hFFC;
rommem[14358] <= 12'h014;
rommem[14359] <= 12'h03B;
rommem[14360] <= 12'h015;
rommem[14361] <= 12'h0F6;
rommem[14362] <= 12'hFFF;
rommem[14363] <= 12'hFFF;
rommem[14364] <= 12'hFE0;
rommem[14365] <= 12'h086;
rommem[14366] <= 12'h049;
rommem[14367] <= 12'h08E;
rommem[14368] <= 12'hE00;
rommem[14369] <= 12'h028;
rommem[14370] <= 12'h0A7;
rommem[14371] <= 12'h807;
rommem[14372] <= 12'h03B;
rommem[14345] <= 12'hFFF;
rommem[14346] <= 12'h9BE;
rommem[14347] <= 12'h08E;
rommem[14348] <= 12'h000;
rommem[14349] <= 12'h008;
rommem[14350] <= 12'h031;
rommem[14351] <= 12'h3F8;
rommem[14352] <= 12'h0E6;
rommem[14353] <= 12'hA04;
rommem[14354] <= 12'h0C1;
rommem[14355] <= 12'h020;
rommem[14356] <= 12'h024;
rommem[14357] <= 12'h002;
rommem[14358] <= 12'h0C6;
rommem[14359] <= 12'h02E;
rommem[14360] <= 12'h017;
rommem[14361] <= 12'hFFF;
rommem[14362] <= 12'h9AE;
rommem[14363] <= 12'h031;
rommem[14364] <= 12'h201;
rommem[14365] <= 12'h030;
rommem[14366] <= 12'h1FF;
rommem[14367] <= 12'h026;
rommem[14368] <= 12'hFEF;
rommem[14369] <= 12'h1BC;
rommem[14370] <= 12'h000;
rommem[14371] <= 12'h926;
rommem[14372] <= 12'h025;
rommem[14373] <= 12'hFB2;
rommem[14374] <= 12'h017;
rommem[14375] <= 12'hFFD;
rommem[14376] <= 12'h8A9;
rommem[14377] <= 12'h016;
rommem[14378] <= 12'hFFF;
rommem[14379] <= 12'hB30;
rommem[14380] <= 12'h0CE;
rommem[14381] <= 12'h000;
rommem[14382] <= 12'h008;
rommem[14383] <= 12'h017;
rommem[14384] <= 12'hFFF;
rommem[14385] <= 12'hC48;
rommem[14386] <= 12'h017;
rommem[14387] <= 12'hFFF;
rommem[14388] <= 12'hCC6;
rommem[14389] <= 12'h0BE;
rommem[14390] <= 12'h000;
rommem[14391] <= 12'h912;
rommem[14392] <= 12'h017;
rommem[14393] <= 12'hFFF;
rommem[14394] <= 12'hC3F;
rommem[14395] <= 12'h017;
rommem[14396] <= 12'hFFF;
rommem[14397] <= 12'hCBD;
rommem[14398] <= 12'h05D;
rommem[14399] <= 12'h027;
rommem[14400] <= 12'h00C;
rommem[14401] <= 12'h0F6;
rommem[14402] <= 12'h000;
rommem[14403] <= 12'h913;
rommem[14404] <= 12'h0E7;
rommem[14405] <= 12'h800;
rommem[14406] <= 12'h033;
rommem[14407] <= 12'h5FF;
rommem[14408] <= 12'h283;
rommem[14409] <= 12'h000;
rommem[14410] <= 12'h000;
rommem[14411] <= 12'h026;
rommem[14412] <= 12'hFEB;
rommem[14413] <= 12'h017;
rommem[14414] <= 12'hFFF;
rommem[14415] <= 12'hC0D;
rommem[14416] <= 12'h0C1;
rommem[14417] <= 12'h022;
rommem[14418] <= 12'h026;
rommem[14419] <= 12'h018;
rommem[14420] <= 12'h0CE;
rommem[14421] <= 12'h000;
rommem[14422] <= 12'h028;
rommem[14423] <= 12'h017;
rommem[14424] <= 12'hFFF;
rommem[14425] <= 12'hC03;
rommem[14426] <= 12'h0C1;
rommem[14427] <= 12'h022;
rommem[14428] <= 12'h026;
rommem[14429] <= 12'h005;
rommem[14430] <= 12'h0CE;
rommem[14431] <= 12'h000;
rommem[14432] <= 12'h008;
rommem[14433] <= 12'h020;
rommem[14434] <= 12'hFD5;
rommem[14435] <= 12'h0E7;
rommem[14436] <= 12'h800;
rommem[14437] <= 12'h033;
rommem[14438] <= 12'h5FF;
rommem[14439] <= 12'h283;
rommem[14440] <= 12'h000;
rommem[14441] <= 12'h000;
rommem[14442] <= 12'h022;
rommem[14443] <= 12'hFEB;
rommem[14444] <= 12'h016;
rommem[14445] <= 12'hFFF;
rommem[14446] <= 12'hAED;
rommem[14447] <= 12'h017;
rommem[14448] <= 12'hFFF;
rommem[14449] <= 12'hC60;
rommem[14450] <= 12'h017;
rommem[14451] <= 12'hFFF;
rommem[14452] <= 12'hC05;
rommem[14453] <= 12'h017;
rommem[14454] <= 12'hFFF;
rommem[14455] <= 12'hC83;
rommem[14456] <= 12'h0F6;
rommem[14457] <= 12'h000;
rommem[14458] <= 12'h913;
rommem[14459] <= 12'h0BE;
rommem[14460] <= 12'h000;
rommem[14461] <= 12'h922;
rommem[14462] <= 12'h04F;
rommem[14463] <= 12'h04D;
rommem[14464] <= 12'h026;
rommem[14465] <= 12'h00D;
rommem[14466] <= 12'h05F;
rommem[14467] <= 12'h04F;
rommem[14468] <= 12'h017;
rommem[14469] <= 12'hFFF;
rommem[14470] <= 12'h90A;
rommem[14471] <= 12'h0C1;
rommem[14472] <= 12'h003;
rommem[14473] <= 12'h127;
rommem[14474] <= 12'hFFF;
rommem[14475] <= 12'hAD0;
rommem[14476] <= 12'h0F6;
rommem[14477] <= 12'h000;
rommem[14478] <= 12'h913;
rommem[14479] <= 12'h0E7;
rommem[14480] <= 12'h800;
rommem[14481] <= 12'h0BC;
rommem[14482] <= 12'h000;
rommem[14483] <= 12'h926;
rommem[14484] <= 12'h023;
rommem[14485] <= 12'hFE9;
rommem[14486] <= 12'h016;
rommem[14487] <= 12'hFFF;
rommem[14488] <= 12'hAC3;
rommem[14489] <= 12'h0CC;
rommem[14490] <= 12'hFFF;
rommem[14491] <= 12'h78D;
rommem[14492] <= 12'h017;
rommem[14493] <= 12'hFFE;
rommem[14494] <= 12'hB3E;
rommem[14495] <= 12'h08D;
rommem[14496] <= 12'hF2A;
rommem[14497] <= 12'h0FC;
rommem[14498] <= 12'h000;
rommem[14499] <= 12'h900;
rommem[14500] <= 12'h08D;
rommem[14501] <= 12'hF21;
rommem[14502] <= 12'h08D;
rommem[14503] <= 12'hF23;
rommem[14504] <= 12'h0FC;
rommem[14505] <= 12'h000;
rommem[14506] <= 12'h902;
rommem[14507] <= 12'h08D;
rommem[14508] <= 12'hF1A;
rommem[14509] <= 12'h08D;
rommem[14510] <= 12'hF1C;
rommem[14511] <= 12'h0FC;
rommem[14512] <= 12'h000;
rommem[14513] <= 12'h904;
rommem[14514] <= 12'h08D;
rommem[14515] <= 12'hF13;
rommem[14516] <= 12'h08D;
rommem[14517] <= 12'hF15;
rommem[14518] <= 12'h0FC;
rommem[14519] <= 12'h000;
rommem[14520] <= 12'h906;
rommem[14521] <= 12'h08D;
rommem[14522] <= 12'hF0C;
rommem[14523] <= 12'h08D;
rommem[14524] <= 12'hF0E;
rommem[14525] <= 12'h0FC;
rommem[14526] <= 12'h000;
rommem[14527] <= 12'h908;
rommem[14528] <= 12'h08D;
rommem[14529] <= 12'hF05;
rommem[14530] <= 12'h08D;
rommem[14531] <= 12'hF07;
rommem[14532] <= 12'h0F6;
rommem[14533] <= 12'h000;
rommem[14534] <= 12'h90B;
rommem[14535] <= 12'h017;
rommem[14536] <= 12'hFFE;
rommem[14537] <= 12'hB70;
rommem[14538] <= 12'h0FC;
rommem[14539] <= 12'h000;
rommem[14540] <= 12'h90C;
rommem[14541] <= 12'h08D;
rommem[14542] <= 12'hEF8;
rommem[14543] <= 12'h08D;
rommem[14544] <= 12'hEFA;
rommem[14545] <= 12'h0FC;
rommem[14546] <= 12'h000;
rommem[14547] <= 12'h90E;
rommem[14548] <= 12'h0BD;
rommem[14549] <= 12'hFFD;
rommem[14550] <= 12'h2CE;
rommem[14551] <= 12'h08D;
rommem[14552] <= 12'hEF2;
rommem[14553] <= 12'h0B6;
rommem[14554] <= 12'h000;
rommem[14555] <= 12'h90F;
rommem[14556] <= 12'h017;
rommem[14557] <= 12'hFFD;
rommem[14558] <= 12'h9EF;
rommem[14559] <= 12'h08D;
rommem[14560] <= 12'hEEA;
rommem[14561] <= 12'h016;
rommem[14562] <= 12'hFFF;
rommem[14563] <= 12'hA78;
rommem[14564] <= 12'h017;
rommem[14565] <= 12'hFFF;
rommem[14566] <= 12'hB93;
rommem[14567] <= 12'h017;
rommem[14568] <= 12'hFFF;
rommem[14569] <= 12'hCA7;
rommem[14570] <= 12'h0B6;
rommem[14571] <= 12'h000;
rommem[14572] <= 12'h913;
rommem[14573] <= 12'h0B7;
rommem[14574] <= 12'h000;
rommem[14575] <= 12'h900;
rommem[14576] <= 12'h016;
rommem[14577] <= 12'hFFF;
rommem[14578] <= 12'hA69;
rommem[14579] <= 12'h017;
rommem[14580] <= 12'hFFF;
rommem[14581] <= 12'hB84;
rommem[14582] <= 12'h017;
rommem[14583] <= 12'hFFF;
rommem[14584] <= 12'hC98;
rommem[14585] <= 12'h0B6;
rommem[14586] <= 12'h000;
rommem[14587] <= 12'h913;
rommem[14588] <= 12'h0B7;
rommem[14589] <= 12'h000;
rommem[14590] <= 12'h901;
rommem[14591] <= 12'h016;
rommem[14592] <= 12'hFFF;
rommem[14593] <= 12'hA5A;
rommem[14594] <= 12'h017;
rommem[14595] <= 12'hFFF;
rommem[14596] <= 12'hB75;
rommem[14597] <= 12'h017;
rommem[14598] <= 12'hFFF;
rommem[14599] <= 12'hC89;
rommem[14600] <= 12'h0FC;
rommem[14601] <= 12'h000;
rommem[14602] <= 12'h912;
rommem[14603] <= 12'h0FD;
rommem[14604] <= 12'h000;
rommem[14605] <= 12'h900;
rommem[14606] <= 12'h016;
rommem[14607] <= 12'hFFF;
rommem[14608] <= 12'hA4B;
rommem[14609] <= 12'h017;
rommem[14610] <= 12'hFFF;
rommem[14611] <= 12'hB66;
rommem[14612] <= 12'h017;
rommem[14613] <= 12'hFFF;
rommem[14614] <= 12'hC7A;
rommem[14615] <= 12'h0FC;
rommem[14616] <= 12'h000;
rommem[14617] <= 12'h912;
rommem[14618] <= 12'h0FD;
rommem[14619] <= 12'h000;
rommem[14620] <= 12'h902;
rommem[14621] <= 12'h016;
rommem[14622] <= 12'hFFF;
rommem[14623] <= 12'hA3C;
rommem[14624] <= 12'h017;
rommem[14625] <= 12'hFFF;
rommem[14626] <= 12'hB57;
rommem[14627] <= 12'h017;
rommem[14628] <= 12'hFFF;
rommem[14629] <= 12'hC6B;
rommem[14630] <= 12'h0FC;
rommem[14631] <= 12'h000;
rommem[14632] <= 12'h912;
rommem[14633] <= 12'h0FD;
rommem[14634] <= 12'h000;
rommem[14635] <= 12'h904;
rommem[14636] <= 12'h016;
rommem[14637] <= 12'hFFF;
rommem[14638] <= 12'hA2D;
rommem[14639] <= 12'h017;
rommem[14640] <= 12'hFFF;
rommem[14641] <= 12'hB48;
rommem[14642] <= 12'h017;
rommem[14643] <= 12'hFFF;
rommem[14644] <= 12'hC5C;
rommem[14645] <= 12'h0FC;
rommem[14646] <= 12'h000;
rommem[14647] <= 12'h912;
rommem[14648] <= 12'h0FD;
rommem[14649] <= 12'h000;
rommem[14650] <= 12'h906;
rommem[14651] <= 12'h016;
rommem[14652] <= 12'hFFF;
rommem[14653] <= 12'hA1E;
rommem[14654] <= 12'h017;
rommem[14655] <= 12'hFFF;
rommem[14656] <= 12'hB39;
rommem[14657] <= 12'h017;
rommem[14658] <= 12'hFFF;
rommem[14659] <= 12'hC4D;
rommem[14660] <= 12'h0FC;
rommem[14661] <= 12'h000;
rommem[14662] <= 12'h912;
rommem[14663] <= 12'h0FD;
rommem[14664] <= 12'h000;
rommem[14665] <= 12'h908;
rommem[14666] <= 12'h016;
rommem[14667] <= 12'hFFF;
rommem[14668] <= 12'hA0F;
rommem[14669] <= 12'h017;
rommem[14670] <= 12'hFFF;
rommem[14671] <= 12'hB2A;
rommem[14672] <= 12'h017;
rommem[14673] <= 12'hFFF;
rommem[14674] <= 12'hC3E;
rommem[14675] <= 12'h0B6;
rommem[14676] <= 12'h000;
rommem[14677] <= 12'h913;
rommem[14678] <= 12'h0B7;
rommem[14679] <= 12'h000;
rommem[14680] <= 12'h90E;
rommem[14681] <= 12'h016;
rommem[14682] <= 12'hFFF;
rommem[14683] <= 12'hA00;
rommem[14684] <= 12'h017;
rommem[14685] <= 12'hFFF;
rommem[14686] <= 12'hB1B;
rommem[14687] <= 12'h017;
rommem[14688] <= 12'hFFF;
rommem[14689] <= 12'hC2F;
rommem[14690] <= 12'h0B6;
rommem[14691] <= 12'h000;
rommem[14692] <= 12'h913;
rommem[14693] <= 12'h0B7;
rommem[14694] <= 12'h000;
rommem[14695] <= 12'h90F;
rommem[14696] <= 12'h016;
rommem[14697] <= 12'hFFF;
rommem[14698] <= 12'h9F1;
rommem[14699] <= 12'h017;
rommem[14700] <= 12'hFFF;
rommem[14701] <= 12'hB0C;
rommem[14702] <= 12'h017;
rommem[14703] <= 12'hFFF;
rommem[14704] <= 12'hC20;
rommem[14705] <= 12'h0FC;
rommem[14706] <= 12'h000;
rommem[14707] <= 12'h912;
rommem[14708] <= 12'h0FD;
rommem[14709] <= 12'h000;
rommem[14710] <= 12'h90C;
rommem[14711] <= 12'h0F6;
rommem[14712] <= 12'h000;
rommem[14713] <= 12'h911;
rommem[14714] <= 12'h0F7;
rommem[14715] <= 12'h000;
rommem[14716] <= 12'h90B;
rommem[14717] <= 12'h016;
rommem[14718] <= 12'hFFF;
rommem[14719] <= 12'h9DC;
rommem[14720] <= 12'h017;
rommem[14721] <= 12'hFFF;
rommem[14722] <= 12'hAF7;
rommem[14723] <= 12'h017;
rommem[14724] <= 12'hFFF;
rommem[14725] <= 12'hC0B;
rommem[14726] <= 12'h01A;
rommem[14727] <= 12'h010;
rommem[14728] <= 12'h1FE;
rommem[14729] <= 12'h000;
rommem[14730] <= 12'h908;
rommem[14731] <= 12'h0CC;
rommem[14732] <= 12'hFFF;
rommem[14733] <= 12'h9BA;
rommem[14734] <= 12'h034;
rommem[14735] <= 12'h006;
rommem[14736] <= 12'h0C6;
rommem[14737] <= 12'h000;
rommem[14738] <= 12'h034;
rommem[14739] <= 12'h004;
rommem[14740] <= 12'h0FC;
rommem[14741] <= 12'h000;
rommem[14742] <= 12'h906;
rommem[14743] <= 12'h034;
rommem[14744] <= 12'h006;
rommem[14745] <= 12'h0FC;
rommem[14746] <= 12'h000;
rommem[14747] <= 12'h904;
rommem[14748] <= 12'h034;
rommem[14749] <= 12'h006;
rommem[14750] <= 12'h0FC;
rommem[14751] <= 12'h000;
rommem[14752] <= 12'h902;
rommem[14753] <= 12'h034;
rommem[14754] <= 12'h006;
rommem[14755] <= 12'h0B6;
rommem[14756] <= 12'h000;
rommem[14757] <= 12'h90E;
rommem[14758] <= 12'h034;
rommem[14759] <= 12'h002;
rommem[14760] <= 12'h0FC;
rommem[14761] <= 12'h000;
rommem[14762] <= 12'h900;
rommem[14763] <= 12'h034;
rommem[14764] <= 12'h006;
rommem[14765] <= 12'h0B6;
rommem[14766] <= 12'h000;
rommem[14767] <= 12'h90F;
rommem[14768] <= 12'h034;
rommem[14769] <= 12'h002;
rommem[14770] <= 12'h015;
rommem[14771] <= 12'h035;
rommem[14772] <= 12'h07F;
rommem[14773] <= 12'h015;
rommem[14774] <= 12'h06E;
rommem[14775] <= 12'h90F;
rommem[14776] <= 12'h000;
rommem[14777] <= 12'h911;
rommem[14778] <= 12'h1FF;
rommem[14779] <= 12'h000;
rommem[14780] <= 12'h908;
rommem[14781] <= 12'h032;
rommem[14782] <= 12'h80F;
rommem[14783] <= 12'h006;
rommem[14784] <= 12'hFFF;
rommem[14785] <= 12'h034;
rommem[14786] <= 12'h001;
rommem[14787] <= 12'h034;
rommem[14788] <= 12'h002;
rommem[14789] <= 12'h01F;
rommem[14790] <= 12'h0B8;
rommem[14791] <= 12'h0B7;
rommem[14792] <= 12'h000;
rommem[14793] <= 12'h90E;
rommem[14794] <= 12'h04F;
rommem[14795] <= 12'h01F;
rommem[14796] <= 12'h08B;
rommem[14797] <= 12'h035;
rommem[14798] <= 12'h002;
rommem[14799] <= 12'h0FD;
rommem[14800] <= 12'h000;
rommem[14801] <= 12'h900;
rommem[14802] <= 12'h0BF;
rommem[14803] <= 12'h000;
rommem[14804] <= 12'h902;
rommem[14805] <= 12'h1BF;
rommem[14806] <= 12'h000;
rommem[14807] <= 12'h904;
rommem[14808] <= 12'h0FF;
rommem[14809] <= 12'h000;
rommem[14810] <= 12'h906;
rommem[14811] <= 12'h035;
rommem[14812] <= 12'h002;
rommem[14813] <= 12'h0B7;
rommem[14814] <= 12'h000;
rommem[14815] <= 12'h90F;
rommem[14816] <= 12'h0CC;
rommem[14817] <= 12'hFFE;
rommem[14818] <= 12'hC73;
rommem[14819] <= 12'h0FD;
rommem[14820] <= 12'h000;
rommem[14821] <= 12'h804;
rommem[14822] <= 12'h0CC;
rommem[14823] <= 12'hFFE;
rommem[14824] <= 12'h31C;
rommem[14825] <= 12'h0FD;
rommem[14826] <= 12'h000;
rommem[14827] <= 12'h800;
rommem[14828] <= 12'h0FC;
rommem[14829] <= 12'hFFF;
rommem[14830] <= 12'h5E5;
rommem[14831] <= 12'h0FD;
rommem[14832] <= 12'h000;
rommem[14833] <= 12'h80C;
rommem[14834] <= 12'h016;
rommem[14835] <= 12'hFFF;
rommem[14836] <= 12'hEA4;
rommem[14837] <= 12'h08E;
rommem[14838] <= 12'h000;
rommem[14839] <= 12'h000;
rommem[14840] <= 12'h0E6;
rommem[14841] <= 12'h80A;
rommem[14842] <= 12'h000;
rommem[14843] <= 12'hFFC;
rommem[14844] <= 12'h000;
rommem[14845] <= 12'h0C1;
rommem[14846] <= 12'h018;
rommem[14847] <= 12'h026;
rommem[14848] <= 12'h00A;
rommem[14849] <= 12'h01F;
rommem[14850] <= 12'h010;
rommem[14851] <= 12'h017;
rommem[14852] <= 12'hFFE;
rommem[14853] <= 12'hA34;
rommem[14854] <= 12'h0C6;
rommem[14855] <= 12'h020;
rommem[14856] <= 12'h017;
rommem[14857] <= 12'hFFF;
rommem[14858] <= 12'h7BE;
rommem[14859] <= 12'h030;
rommem[14860] <= 12'h001;
rommem[14861] <= 12'h08C;
rommem[14862] <= 12'h000;
rommem[14863] <= 12'h010;
rommem[14864] <= 12'h025;
rommem[14865] <= 12'hFE6;
rommem[14866] <= 12'h017;
rommem[14867] <= 12'hFFD;
rommem[14868] <= 12'h6BD;
rommem[14869] <= 12'h016;
rommem[14870] <= 12'hFFF;
rommem[14871] <= 12'h944;
rommem[14872] <= 12'h000;
rommem[14873] <= 12'hFFC;
rommem[14874] <= 12'h0FF;
rommem[14875] <= 12'h000;
rommem[14876] <= 12'h008;
rommem[14877] <= 12'hFFF;
rommem[14878] <= 12'hA1F;
rommem[14879] <= 12'hFFF;
rommem[14880] <= 12'h35C;
rommem[14881] <= 12'hFFF;
rommem[14882] <= 12'h191;
rommem[14883] <= 12'hFFF;
rommem[14884] <= 12'h1C9;
rommem[14885] <= 12'hFFD;
rommem[14886] <= 12'h0D2;
rommem[14887] <= 12'hFFE;
rommem[14888] <= 12'h3DD;
rommem[14889] <= 12'hFFE;
rommem[14890] <= 12'h43A;
rommem[14891] <= 12'hFFE;
rommem[14892] <= 12'h431;
rommem[14893] <= 12'hFFF;
rommem[14894] <= 12'h1D3;
rommem[14895] <= 12'hFFF;
rommem[14896] <= 12'h257;
rommem[14897] <= 12'hFFF;
rommem[14898] <= 12'h285;
rommem[14899] <= 12'h000;
rommem[14900] <= 12'h000;
rommem[14901] <= 12'hFFF;
rommem[14902] <= 12'h4D2;
rommem[14903] <= 12'hFFF;
rommem[14904] <= 12'h591;
rommem[14905] <= 12'hFFE;
rommem[14906] <= 12'hC9A;
rommem[14907] <= 12'h000;
rommem[14908] <= 12'h800;
rommem[14909] <= 12'h000;
rommem[14910] <= 12'h000;
rommem[14911] <= 12'h000;
rommem[14912] <= 12'h000;
rommem[14913] <= 12'h000;
rommem[14914] <= 12'h000;
rommem[14915] <= 12'h000;
rommem[14916] <= 12'hC00;
rommem[14917] <= 12'hC00;
rommem[14918] <= 12'h000;
rommem[14919] <= 12'h800;
rommem[14920] <= 12'h000;
rommem[14921] <= 12'h0E6;
rommem[14922] <= 12'h80C;
rommem[14923] <= 12'hFCC;
rommem[14924] <= 12'h01F;
rommem[14925] <= 12'h09B;
rommem[14926] <= 12'h0EE;
rommem[14927] <= 12'h60B;
rommem[14928] <= 12'h033;
rommem[14929] <= 12'h5FF;
rommem[14930] <= 12'h07D;
rommem[14931] <= 12'h000;
rommem[14932] <= 12'h810;
rommem[14933] <= 12'h027;
rommem[14934] <= 12'h00F;
rommem[14935] <= 12'h18E;
rommem[14936] <= 12'h000;
rommem[14937] <= 12'h820;
rommem[14938] <= 12'h0F6;
rommem[14939] <= 12'h000;
rommem[14940] <= 12'h811;
rommem[14941] <= 12'h027;
rommem[14942] <= 12'h007;
rommem[14943] <= 12'h2A3;
rommem[14944] <= 12'hA01;
rommem[14945] <= 12'h027;
rommem[14946] <= 12'h04B;
rommem[14947] <= 12'h05A;
rommem[14948] <= 12'h026;
rommem[14949] <= 12'hFF9;
rommem[14950] <= 12'h07F;
rommem[14951] <= 12'h000;
rommem[14952] <= 12'h810;
rommem[14953] <= 12'h037;
rommem[14954] <= 12'h006;
rommem[14955] <= 12'h0C1;
rommem[14956] <= 12'h00F;
rommem[14957] <= 12'h122;
rommem[14958] <= 12'hFFF;
rommem[14959] <= 12'hB75;
rommem[14960] <= 12'h0EF;
rommem[14961] <= 12'h60B;
rommem[14962] <= 12'h0C1;
rommem[14963] <= 12'h00A;
rommem[14964] <= 12'h027;
rommem[14965] <= 12'h072;
rommem[14966] <= 12'h058;
rommem[14967] <= 12'h0AE;
rommem[14968] <= 12'h80C;
rommem[14969] <= 12'hFA3;
rommem[14970] <= 12'h03A;
rommem[14971] <= 12'h0AE;
rommem[14972] <= 12'h804;
rommem[14973] <= 12'h0BF;
rommem[14974] <= 12'h000;
rommem[14975] <= 12'h928;
rommem[14976] <= 12'h054;
rommem[14977] <= 12'h08E;
rommem[14978] <= 12'hFFF;
rommem[14979] <= 12'hA3B;
rommem[14980] <= 12'h03A;
rommem[14981] <= 12'h0E6;
rommem[14982] <= 12'h804;
rommem[14983] <= 12'h0F7;
rommem[14984] <= 12'h000;
rommem[14985] <= 12'h930;
rommem[14986] <= 12'h1FF;
rommem[14987] <= 12'h000;
rommem[14988] <= 12'h908;
rommem[14989] <= 12'h0EC;
rommem[14990] <= 12'h601;
rommem[14991] <= 12'h0AE;
rommem[14992] <= 12'h604;
rommem[14993] <= 12'h1AE;
rommem[14994] <= 12'h606;
rommem[14995] <= 12'h0EE;
rommem[14996] <= 12'h608;
rommem[14997] <= 12'h1EE;
rommem[14998] <= 12'h80C;
rommem[14999] <= 12'hF81;
rommem[15000] <= 12'h0AD;
rommem[15001] <= 12'h90F;
rommem[15002] <= 12'h000;
rommem[15003] <= 12'h928;
rommem[15004] <= 12'h1FE;
rommem[15005] <= 12'h000;
rommem[15006] <= 12'h908;
rommem[15007] <= 12'h07D;
rommem[15008] <= 12'h000;
rommem[15009] <= 12'h930;
rommem[15010] <= 12'h02A;
rommem[15011] <= 12'h009;
rommem[15012] <= 12'h0ED;
rommem[15013] <= 12'h601;
rommem[15014] <= 12'h078;
rommem[15015] <= 12'h000;
rommem[15016] <= 12'h930;
rommem[15017] <= 12'h02A;
rommem[15018] <= 12'h002;
rommem[15019] <= 12'h0AF;
rommem[15020] <= 12'h604;
rommem[15021] <= 12'h03B;
rommem[15022] <= 12'h0A6;
rommem[15023] <= 12'hE04;
rommem[15024] <= 12'h0B7;
rommem[15025] <= 12'h000;
rommem[15026] <= 12'h90F;
rommem[15027] <= 12'h0EC;
rommem[15028] <= 12'h601;
rommem[15029] <= 12'h0FD;
rommem[15030] <= 12'h000;
rommem[15031] <= 12'h900;
rommem[15032] <= 12'h0E6;
rommem[15033] <= 12'h603;
rommem[15034] <= 12'h0F7;
rommem[15035] <= 12'h000;
rommem[15036] <= 12'h90E;
rommem[15037] <= 12'h0EC;
rommem[15038] <= 12'h604;
rommem[15039] <= 12'h0FD;
rommem[15040] <= 12'h000;
rommem[15041] <= 12'h902;
rommem[15042] <= 12'h0EC;
rommem[15043] <= 12'h606;
rommem[15044] <= 12'h0FD;
rommem[15045] <= 12'h000;
rommem[15046] <= 12'h904;
rommem[15047] <= 12'h0EC;
rommem[15048] <= 12'h608;
rommem[15049] <= 12'h0FD;
rommem[15050] <= 12'h000;
rommem[15051] <= 12'h906;
rommem[15052] <= 12'h1FF;
rommem[15053] <= 12'h000;
rommem[15054] <= 12'h908;
rommem[15055] <= 12'h0E6;
rommem[15056] <= 12'h60A;
rommem[15057] <= 12'h0F7;
rommem[15058] <= 12'h000;
rommem[15059] <= 12'h90A;
rommem[15060] <= 12'h0EC;
rommem[15061] <= 12'h60B;
rommem[15062] <= 12'h0FD;
rommem[15063] <= 12'h000;
rommem[15064] <= 12'h90B;
rommem[15065] <= 12'h1EE;
rommem[15066] <= 12'h80C;
rommem[15067] <= 12'hF3D;
rommem[15068] <= 12'h0CC;
rommem[15069] <= 12'hFFF;
rommem[15070] <= 12'hA9C;
rommem[15071] <= 12'h034;
rommem[15072] <= 12'h006;
rommem[15073] <= 12'h08D;
rommem[15074] <= 12'h01F;
rommem[15075] <= 12'h016;
rommem[15076] <= 12'hFFF;
rommem[15077] <= 12'hDB3;
rommem[15078] <= 12'h020;
rommem[15079] <= 12'h039;
rommem[15080] <= 12'h033;
rommem[15081] <= 12'h401;
rommem[15082] <= 12'h0E6;
rommem[15083] <= 12'hC00;
rommem[15084] <= 12'h0C1;
rommem[15085] <= 12'h019;
rommem[15086] <= 12'h122;
rommem[15087] <= 12'hFFF;
rommem[15088] <= 12'hAF4;
rommem[15089] <= 12'h0EF;
rommem[15090] <= 12'h60B;
rommem[15091] <= 12'h058;
rommem[15092] <= 12'h08E;
rommem[15093] <= 12'hFFF;
rommem[15094] <= 12'h1DE;
rommem[15095] <= 12'h06D;
rommem[15096] <= 12'hE0F;
rommem[15097] <= 12'h027;
rommem[15098] <= 12'hFA1;
rommem[15099] <= 12'h0AD;
rommem[15100] <= 12'hF0F;
rommem[15101] <= 12'h07F;
rommem[15102] <= 12'hEF0;
rommem[15103] <= 12'h011;
rommem[15104] <= 12'h020;
rommem[15105] <= 12'hF9A;
rommem[15106] <= 12'h034;
rommem[15107] <= 12'h036;
rommem[15108] <= 12'h18E;
rommem[15109] <= 12'h000;
rommem[15110] <= 12'h000;
rommem[15111] <= 12'h05F;
rommem[15112] <= 12'h08E;
rommem[15113] <= 12'h000;
rommem[15114] <= 12'h830;
rommem[15115] <= 12'h0C1;
rommem[15116] <= 12'hA1B;
rommem[15117] <= 12'h024;
rommem[15118] <= 12'h010;
rommem[15119] <= 12'h0F1;
rommem[15120] <= 12'h000;
rommem[15121] <= 12'h811;
rommem[15122] <= 12'h024;
rommem[15123] <= 12'h00B;
rommem[15124] <= 12'h0A6;
rommem[15125] <= 12'h837;
rommem[15126] <= 12'h0A7;
rommem[15127] <= 12'hB09;
rommem[15128] <= 12'h000;
rommem[15129] <= 12'h820;
rommem[15130] <= 12'h031;
rommem[15131] <= 12'h202;
rommem[15132] <= 12'h05C;
rommem[15133] <= 12'h020;
rommem[15134] <= 12'hFEC;
rommem[15135] <= 12'h035;
rommem[15136] <= 12'h0B6;
rommem[15137] <= 12'h034;
rommem[15138] <= 12'h036;
rommem[15139] <= 12'h18E;
rommem[15140] <= 12'h000;
rommem[15141] <= 12'h000;
rommem[15142] <= 12'h05F;
rommem[15143] <= 12'h08E;
rommem[15144] <= 12'h000;
rommem[15145] <= 12'h830;
rommem[15146] <= 12'h0F1;
rommem[15147] <= 12'hFFF;
rommem[15148] <= 12'hA1B;
rommem[15149] <= 12'h024;
rommem[15150] <= 12'h010;
rommem[15151] <= 12'h0F1;
rommem[15152] <= 12'h000;
rommem[15153] <= 12'h811;
rommem[15154] <= 12'h024;
rommem[15155] <= 12'h00B;
rommem[15156] <= 12'h0A6;
rommem[15157] <= 12'hB09;
rommem[15158] <= 12'h000;
rommem[15159] <= 12'h820;
rommem[15160] <= 12'h0A7;
rommem[15161] <= 12'hB0D;
rommem[15162] <= 12'h031;
rommem[15163] <= 12'h202;
rommem[15164] <= 12'h05C;
rommem[15165] <= 12'h020;
rommem[15166] <= 12'hFEB;
rommem[15167] <= 12'h035;
rommem[15168] <= 12'h0B6;
rommem[15169] <= 12'h034;
rommem[15170] <= 12'h036;
rommem[15171] <= 12'h0B6;
rommem[15172] <= 12'h000;
rommem[15173] <= 12'h811;
rommem[15174] <= 12'h0B1;
rommem[15175] <= 12'hFFF;
rommem[15176] <= 12'hA1B;
rommem[15177] <= 12'h124;
rommem[15178] <= 12'hFFF;
rommem[15179] <= 12'hA99;
rommem[15180] <= 12'h017;
rommem[15181] <= 12'hFFF;
rommem[15182] <= 12'h92B;
rommem[15183] <= 12'h017;
rommem[15184] <= 12'hFFF;
rommem[15185] <= 12'h9A9;
rommem[15186] <= 12'h05D;
rommem[15187] <= 12'h12B;
rommem[15188] <= 12'hFFF;
rommem[15189] <= 12'hA8F;
rommem[15190] <= 12'h0F6;
rommem[15191] <= 12'h000;
rommem[15192] <= 12'h811;
rommem[15193] <= 12'h1BE;
rommem[15194] <= 12'h000;
rommem[15195] <= 12'h912;
rommem[15196] <= 12'h0A6;
rommem[15197] <= 12'hA04;
rommem[15198] <= 12'h08E;
rommem[15199] <= 12'h000;
rommem[15200] <= 12'h830;
rommem[15201] <= 12'h0A7;
rommem[15202] <= 12'hA05;
rommem[15203] <= 12'h086;
rommem[15204] <= 12'h03F;
rommem[15205] <= 12'h0A7;
rommem[15206] <= 12'hA04;
rommem[15207] <= 12'h08E;
rommem[15208] <= 12'h000;
rommem[15209] <= 12'h820;
rommem[15210] <= 12'h058;
rommem[15211] <= 12'h1AF;
rommem[15212] <= 12'hA05;
rommem[15213] <= 12'h054;
rommem[15214] <= 12'h05C;
rommem[15215] <= 12'h0F7;
rommem[15216] <= 12'h000;
rommem[15217] <= 12'h811;
rommem[15218] <= 12'h035;
rommem[15219] <= 12'h036;
rommem[15220] <= 12'h016;
rommem[15221] <= 12'hFFF;
rommem[15222] <= 12'h7E5;
rommem[15223] <= 12'h034;
rommem[15224] <= 12'h076;
rommem[15225] <= 12'h017;
rommem[15226] <= 12'hFFF;
rommem[15227] <= 12'h8FE;
rommem[15228] <= 12'h017;
rommem[15229] <= 12'hFFF;
rommem[15230] <= 12'h97C;
rommem[15231] <= 12'h05D;
rommem[15232] <= 12'h12B;
rommem[15233] <= 12'hFFF;
rommem[15234] <= 12'h7D9;
rommem[15235] <= 12'h05F;
rommem[15236] <= 12'h05F;
rommem[15237] <= 12'h01F;
rommem[15238] <= 12'h001;
rommem[15239] <= 12'h0F1;
rommem[15240] <= 12'hFFF;
rommem[15241] <= 12'hA1B;
rommem[15242] <= 12'h024;
rommem[15243] <= 12'h041;
rommem[15244] <= 12'h0F1;
rommem[15245] <= 12'h000;
rommem[15246] <= 12'h811;
rommem[15247] <= 12'h024;
rommem[15248] <= 12'h03C;
rommem[15249] <= 12'h1AE;
rommem[15250] <= 12'h809;
rommem[15251] <= 12'h000;
rommem[15252] <= 12'h820;
rommem[15253] <= 12'h1BC;
rommem[15254] <= 12'h000;
rommem[15255] <= 12'h912;
rommem[15256] <= 12'h026;
rommem[15257] <= 12'h02E;
rommem[15258] <= 12'h0BE;
rommem[15259] <= 12'h000;
rommem[15260] <= 12'h912;
rommem[15261] <= 12'h18E;
rommem[15262] <= 12'h000;
rommem[15263] <= 12'h830;
rommem[15264] <= 12'h0A6;
rommem[15265] <= 12'hA0D;
rommem[15266] <= 12'h0A7;
rommem[15267] <= 12'h804;
rommem[15268] <= 12'h07A;
rommem[15269] <= 12'h000;
rommem[15270] <= 12'h811;
rommem[15271] <= 12'h034;
rommem[15272] <= 12'h004;
rommem[15273] <= 12'h05C;
rommem[15274] <= 12'h0A6;
rommem[15275] <= 12'hA05;
rommem[15276] <= 12'h05A;
rommem[15277] <= 12'h0A7;
rommem[15278] <= 12'hA05;
rommem[15279] <= 12'h05C;
rommem[15280] <= 12'h0F1;
rommem[15281] <= 12'hFFF;
rommem[15282] <= 12'hA1B;
rommem[15283] <= 12'h025;
rommem[15284] <= 12'hFF4;
rommem[15285] <= 12'h035;
rommem[15286] <= 12'h004;
rommem[15287] <= 12'h058;
rommem[15288] <= 12'h04F;
rommem[15289] <= 12'h01F;
rommem[15290] <= 12'h002;
rommem[15291] <= 12'h054;
rommem[15292] <= 12'h0EE;
rommem[15293] <= 12'h202;
rommem[15294] <= 12'h0EF;
rommem[15295] <= 12'hA01;
rommem[15296] <= 12'h05C;
rommem[15297] <= 12'h0F1;
rommem[15298] <= 12'hFFF;
rommem[15299] <= 12'hA1B;
rommem[15300] <= 12'h025;
rommem[15301] <= 12'hFF6;
rommem[15302] <= 12'h035;
rommem[15303] <= 12'h0F6;
rommem[15304] <= 12'h030;
rommem[15305] <= 12'h002;
rommem[15306] <= 12'h05C;
rommem[15307] <= 12'h020;
rommem[15308] <= 12'hFBA;
rommem[15309] <= 12'h035;
rommem[15310] <= 12'h076;
rommem[15311] <= 12'h016;
rommem[15312] <= 12'hFFF;
rommem[15313] <= 12'h78A;
rommem[15314] <= 12'h034;
rommem[15315] <= 12'h016;
rommem[15316] <= 12'h03F;
rommem[15317] <= 12'h003;
rommem[15318] <= 12'h08E;
rommem[15319] <= 12'h000;
rommem[15320] <= 12'h000;
rommem[15321] <= 12'h0C6;
rommem[15322] <= 12'h000;
rommem[15323] <= 12'h0F1;
rommem[15324] <= 12'hFFF;
rommem[15325] <= 12'hA1B;
rommem[15326] <= 12'h024;
rommem[15327] <= 12'h016;
rommem[15328] <= 12'h0F1;
rommem[15329] <= 12'h000;
rommem[15330] <= 12'h811;
rommem[15331] <= 12'h024;
rommem[15332] <= 12'h011;
rommem[15333] <= 12'h0EC;
rommem[15334] <= 12'h809;
rommem[15335] <= 12'h000;
rommem[15336] <= 12'h820;
rommem[15337] <= 12'h030;
rommem[15338] <= 12'h002;
rommem[15339] <= 12'h05C;
rommem[15340] <= 12'h034;
rommem[15341] <= 12'h004;
rommem[15342] <= 12'h03F;
rommem[15343] <= 12'h006;
rommem[15344] <= 12'h03F;
rommem[15345] <= 12'h003;
rommem[15346] <= 12'h035;
rommem[15347] <= 12'h004;
rommem[15348] <= 12'h020;
rommem[15349] <= 12'hFE5;
rommem[15350] <= 12'h035;
rommem[15351] <= 12'h016;
rommem[15352] <= 12'h016;
rommem[15353] <= 12'hFFF;
rommem[15354] <= 12'h761;
rommem[15355] <= 12'h01A;
rommem[15356] <= 12'h010;
rommem[15357] <= 12'h0A6;
rommem[15358] <= 12'hE04;
rommem[15359] <= 12'h0B7;
rommem[15360] <= 12'h000;
rommem[15361] <= 12'h90F;
rommem[15362] <= 12'h0EC;
rommem[15363] <= 12'h601;
rommem[15364] <= 12'h0FD;
rommem[15365] <= 12'h000;
rommem[15366] <= 12'h900;
rommem[15367] <= 12'h0E6;
rommem[15368] <= 12'h603;
rommem[15369] <= 12'h0F7;
rommem[15370] <= 12'h000;
rommem[15371] <= 12'h90E;
rommem[15372] <= 12'h0EC;
rommem[15373] <= 12'h604;
rommem[15374] <= 12'h0FD;
rommem[15375] <= 12'h000;
rommem[15376] <= 12'h902;
rommem[15377] <= 12'h0EC;
rommem[15378] <= 12'h606;
rommem[15379] <= 12'h0FD;
rommem[15380] <= 12'h000;
rommem[15381] <= 12'h904;
rommem[15382] <= 12'h0EC;
rommem[15383] <= 12'h608;
rommem[15384] <= 12'h0FD;
rommem[15385] <= 12'h000;
rommem[15386] <= 12'h906;
rommem[15387] <= 12'h1FF;
rommem[15388] <= 12'h000;
rommem[15389] <= 12'h908;
rommem[15390] <= 12'h0EC;
rommem[15391] <= 12'h60B;
rommem[15392] <= 12'h0FD;
rommem[15393] <= 12'h000;
rommem[15394] <= 12'h90A;
rommem[15395] <= 12'h1FF;
rommem[15396] <= 12'h000;
rommem[15397] <= 12'h908;
rommem[15398] <= 12'h1CE;
rommem[15399] <= 12'h003;
rommem[15400] <= 12'hFFF;
rommem[15401] <= 12'h0CC;
rommem[15402] <= 12'hFFF;
rommem[15403] <= 12'hC33;
rommem[15404] <= 12'h034;
rommem[15405] <= 12'h006;
rommem[15406] <= 12'h01C;
rommem[15407] <= 12'h0EF;
rommem[15408] <= 12'h07E;
rommem[15409] <= 12'hFFF;
rommem[15410] <= 12'h899;
rommem[15411] <= 12'h1FE;
rommem[15412] <= 12'h000;
rommem[15413] <= 12'h908;
rommem[15414] <= 12'h03B;
rommem[15415] <= 12'h03B;
rommem[15416] <= 12'h04F;
rommem[15417] <= 12'h01F;
rommem[15418] <= 12'h08B;
rommem[15419] <= 12'h017;
rommem[15420] <= 12'hFFE;
rommem[15421] <= 12'h855;
rommem[15422] <= 12'h0B6;
rommem[15423] <= 12'hFFC;
rommem[15424] <= 12'h014;
rommem[15425] <= 12'h044;
rommem[15426] <= 12'h0BA;
rommem[15427] <= 12'hFFC;
rommem[15428] <= 12'h014;
rommem[15429] <= 12'h084;
rommem[15430] <= 12'hFE0;
rommem[15431] <= 12'h0B7;
rommem[15432] <= 12'hFFC;
rommem[15433] <= 12'h014;
rommem[15434] <= 12'h015;
rommem[15435] <= 12'h0B6;
rommem[15436] <= 12'hFFF;
rommem[15437] <= 12'hFFF;
rommem[15438] <= 12'hFE0;
rommem[15439] <= 12'h0B1;
rommem[15440] <= 12'hFFC;
rommem[15441] <= 12'h010;
rommem[15442] <= 12'h026;
rommem[15443] <= 12'h00D;
rommem[15444] <= 12'h096;
rommem[15445] <= 12'h114;
rommem[15446] <= 12'h027;
rommem[15447] <= 12'h009;
rommem[15448] <= 12'h017;
rommem[15449] <= 12'hFFE;
rommem[15450] <= 12'h69A;
rommem[15451] <= 12'h01F;
rommem[15452] <= 12'h002;
rommem[15453] <= 12'h06C;
rommem[15454] <= 12'hA09;
rommem[15455] <= 12'h002;
rommem[15456] <= 12'h000;
rommem[15457] <= 12'h03B;
rommem[15458] <= 12'h015;
rommem[15459] <= 12'h0F6;
rommem[15460] <= 12'hFFF;
rommem[15461] <= 12'hFFF;
rommem[15462] <= 12'hFE0;
rommem[15463] <= 12'h086;
rommem[15464] <= 12'h049;
rommem[15465] <= 12'h08E;
rommem[15466] <= 12'hE00;
rommem[15467] <= 12'h028;
rommem[15468] <= 12'h0A7;
rommem[15469] <= 12'hA0D;
rommem[15470] <= 12'h03B;
rommem[16368] <= 12'hFFF;
rommem[16369] <= 12'h824;
rommem[16369] <= 12'hC6E;
rommem[16370] <= 12'hFFF;
rommem[16371] <= 12'h7CB;
rommem[16371] <= 12'hBFB;
rommem[16372] <= 12'hFFF;
rommem[16373] <= 12'h824;
rommem[16373] <= 12'hC6E;
rommem[16374] <= 12'hFFF;
rommem[16375] <= 12'h807;
rommem[16375] <= 12'hC37;
rommem[16376] <= 12'hFFF;
rommem[16377] <= 12'h808;
rommem[16377] <= 12'hC38;
rommem[16378] <= 12'hFFF;
rommem[16379] <= 12'h65B;
rommem[16379] <= 12'hA49;
rommem[16380] <= 12'hFFF;
rommem[16381] <= 12'h818;
rommem[16381] <= 12'hC62;
rommem[16382] <= 12'hFFE;
rommem[16383] <= 12'h023;
/rf6809/trunk/software/boot/io_equates.asm
60,6 → 60,7
ACIA_STAT EQU 1
ACIA_CMD EQU 2
ACIA_CTRL EQU 3
ACIA_IRQS EQU 4
ACIA_CTRL2 EQU 11
RTC EQU $FFFE30500 ; I2C
RTCBuf EQU $7FC0
/rf6809/trunk/software/boot/mon_equates.asm
34,6 → 34,16
;
; ============================================================================
;
; ASCII control characters.
SOH equ 1
EOT equ 4
ACK equ 6
BS equ 8
NAK equ 21
ETB equ $17
CAN equ 24
DEL equ 127
 
CR EQU $0D ;ASCII equates
LF EQU $0A
TAB EQU $09
46,6 → 56,7
CTRLS EQU $13
CTRLT EQU $14
CTRLX EQU $18
CTRLZ EQU $1A
XON EQU $11
XOFF EQU $13
 
66,7 → 77,9
MF_Srand EQU 8
MF_Random EQU 9
MF_OSCALL EQU 10
MF_GetRange EQU 11
MF_GetRange EQU 11 ; gets a pair of numbers last>first
MF_GetNumber EQU 12
MF_SerialPutchar EQU 13
 
mon_numwka EQU $910
mon_r1 EQU $920
/rf6809/trunk/software/boot/s19Loader.asm
0,0 → 1,365
; ============================================================================
; __
; \\__/ o\ (C) 2022 Robert Finch, Waterloo
; \ __ / All rights reserved.
; \/_// robfinch<remove>@opencores.org
; ||
;
;
; BSD 3-Clause License
; Redistribution and use in source and binary forms, with or without
; modification, are permitted provided that the following conditions are met:
;
; 1. Redistributions of source code must retain the above copyright notice, this
; list of conditions and the following disclaimer.
;
; 2. Redistributions in binary form must reproduce the above copyright notice,
; this list of conditions and the following disclaimer in the documentation
; and/or other materials provided with the distribution.
;
; 3. Neither the name of the copyright holder nor the names of its
; contributors may be used to endorse or promote products derived from
; this software without specific prior written permission.
;
; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
; DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
; SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
; CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
; OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
;
; ============================================================================
;
; S19 variables
;
s19Address EQU $940 ; to $943
s19StartAddress EQU $944 ; to $947
s19Rectype EQU $948
s19Reclen EQU $949
s19Abort EQU $94A
s19Checksum EQU $94B
s19SummaryChecksum EQU $94C
s19Source EQU $94E
s19XferAddress EQU $950 ; to $951
 
; ------------------------------------------------------------------------------
; Input a character either from a file in memory or from the serial port.
;
; Parameters:
; none
; Returns:
; accb = character input
; ------------------------------------------------------------------------------
 
s19InputChar:
tst s19Source
beq s19ic1
ldb [s19XferAddress]
inc s19XferAddress+1 ; increment low byte of address pointer
bne s19ic2
inc s19XferAddress ; increment high byte of address pointer
s19ic2:
rts
s19ic1:
ldd #-1 ; block until input is available
swi
fcb MF_INCH ; monitor input rout
rts
 
; ------------------------------------------------------------------------------
; Skip over input to the next record.
; ------------------------------------------------------------------------------
 
s19NextRecord:
bsr s19InputChar
cmpb #LF ; line feed marks end of record
beq s19nr1
cmpb #CTRLC ; should not get this in a file transfer
bne s19nr2
stb s19Abort
s19nr2:
cmpb #CTRLZ ; end of file marker?
bne s19nr3
stb s19Abort
s19nr3:
tst s19Abort
beq s19NextRecord
s19nr1:
rts
 
; ------------------------------------------------------------------------------
; Update the checksum.
; ------------------------------------------------------------------------------
 
s19AddCheck:
pshs b
addb s19Checksum
stb s19Checksum
puls b,pc
 
; ------------------------------------------------------------------------------
; Input a byte. There are three characters per byte since things are 12-bit.
;
; Parameters:
; none
; Returns:
; accb = byte value converted from text
; ------------------------------------------------------------------------------
 
s19GetByte:
bsr s19InputChar ; get the first character
lbsr AsciiToHexNybble ; convert to nybble
tst s19Abort ; check for abort
beq s19gb1
clra
rts
s19gb1: ; shift the value four bits
aslb
aslb
aslb
aslb
pshs b ; save off value
bsr s19InputChar ; get the second character
lbsr AsciiToHexNybble ; convert to nybble
tst s19Abort ; check for abort
bne s19gb2
orb ,s+ ; merge new nybble into value
aslb ; shift the value four more bits
aslb
aslb
aslb
pshs b ; save off value
bsr s19InputChar ; get the third character
lbsr AsciiToHexNybble ; convert to nybble
orb ,s+ ; merge in value
clra ; make byte 000 to FFF in D
rts
s19gb2:
leas 1,s ; discard saved byte
clra
rts
 
; ------------------------------------------------------------------------------
; Zero out address
; ------------------------------------------------------------------------------
 
s19ClearAddress:
clr s19Address
clr s19Address+1
clr s19Address+2
clr s19Address+3
rts
; ------------------------------------------------------------------------------
; Get an address composed of two bytes (24 bit)
;
; Side Effects:
; updates s19Address variable
; Returns:
; none
; ------------------------------------------------------------------------------
 
s19GetAddress2:
bsr s19ClearAddress
bsr s19GetByte
bsr s19AddCheck
stb s19Address+2
tst s19Abort
bne s19ga1
bsr s19GetByte
bsr s19AddCheck
stb s19Address+3
s19ga1:
rts
; ------------------------------------------------------------------------------
; Get an address composed of three bytes (36 bit)
;
; Side Effects:
; updates s19Address variable
; Returns:
; none
; ------------------------------------------------------------------------------
 
s19GetAddress3:
bsr s19ClearAddress
bsr s19GetByte
bsr s19AddCheck
stb s19Address+1
tst s19Abort
bne s19ga2
bsr s19GetByte
bsr s19AddCheck
stb s19Address+2
tst s19Abort
bne s19ga2
bsr s19GetByte
bsr s19AddCheck
stb s19Address+3
s19ga2:
rts
 
; ------------------------------------------------------------------------------
; Put a byte to memory.
; ------------------------------------------------------------------------------
 
s19PutMem:
clrb ; accb = current byte count
s19pm3:
pshs b ; save byte count
bsr s19GetByte
bsr s19AddCheck
tst s19Abort
bne s19pm1
stb far [s19Address+1] ; store the byte using far addressing
inc s19Address+3
bne s19pm2
inc s19Address+2
bne s19pm2
inc s19Address+1
s19pm2:
puls b ; get back byte count
incb ; increment and
cmpb s19Reclen ; compare to record length
blo s19pm3
bsr s19GetByte ; get the checksum byte
bra s19AddCheck
s19pm1:
leas 1,s ; faster than actual pull
bsr s19GetByte ; get the checksum byte
bra s19AddCheck
 
; ------------------------------------------------------------------------------
; Processing for S1 record type.
; ------------------------------------------------------------------------------
 
s19ProcessS1:
bsr s19GetAddress2
bsr s19PutMem
tst s19Checksum
beq s19p11
inc s19SummaryChecksum
ldd #msgChecksumErr
swi
fcb MF_DisplayString
s19p11:
bra s19lnr
 
; ------------------------------------------------------------------------------
; Processing for S2 record type.
; ------------------------------------------------------------------------------
 
s19ProcessS2:
bsr s19GetAddress3
bsr s19PutMem
tst s19Checksum
beq s19p21
inc s19SummaryChecksum
ldd #msgChecksumErr
swi
fcb MF_DisplayString
s19p21:
bra s19lnr
 
; S3,4,5,6 not processed
 
; ------------------------------------------------------------------------------
; Processing for S7 record type. Gets a two byte (24 bit) start address.
; ------------------------------------------------------------------------------
 
s19ProcessS9:
bsr s19GetAddress2
ldd s19Address+2
std s19StartAddress+2
ldd s19Address+0
std s19StartAddress+0
bra s19l2
; ------------------------------------------------------------------------------
; Processing for S8 record type. Gets a three byte (36 bit) start address.
; ------------------------------------------------------------------------------
 
s19ProcessS8:
bsr s19GetAddress3
ldd s19Address+2
std s19StartAddress+2
ldd s19Address+0
std s19StartAddress+0
bra s19l2
 
; ------------------------------------------------------------------------------
; S19 Loader
;
; Not all record types are processed. Some are skipped over.
; ------------------------------------------------------------------------------
 
S19Loader:
clr s19Source
lbsr GetNumber ; check for a file storage address
tstb
beq s19l4 ; if not a memory file
inc s19Source ; set flag indicating a memory file
ldd mon_numwka+2 ; set transfer address variable
std s19XferAddress
s19l4:
clr s19Abort ; clear the abort flag
ldd #msgS19Loader ; signon banner
swi
fcb MF_DisplayString
clr s19SummaryChecksum
s19l3:
bsr s19InputChar ; get a character from input
cmpb #CTRLZ ; is it CTRL-Z?
beq s19l2
clr s19Checksum
cmpb #'C' ; records must start with the letter C
bne s19lnr
bsr s19InputChar ; get the next character
cmpb #'0' ; must be a numeric digit
blo s19lnr
cmpb #'9'
bhi s19lnr
stb s19Rectype ; save off in record type
bsr s19GetByte ; get a byte indicating record length
bsr s19AddCheck
stb s19Reclen
tst s19Abort ; check for abort
bne s19l2
ldb s19Rectype ; process according to record type
cmpb #'0'
beq s19lnr
cmpb #'1'
beq s19ProcessS1 ; data record with a two byte address
cmpb #'2'
beq s19ProcessS2 ; data record with a three byte address
cmpb #'3'
beq s19lnr
cmpb #'5' ; record count? ignore
beq s19lnr
cmpb #'7' ; ignore record with 48 bit address
beq s19l2
cmpb #'8'
beq s19ProcessS8 ; two byte start address
cmpb #'9'
beq s19ProcessS9 ; three byte start address
s19lnr:
ldb #'.' ; output a progress indicator
swi
fcb MF_OUTCH
bsr s19NextRecord ; skip to the next record
tst S19Abort ; check for abort
bne s19l2
bra s19l3 ; loop back to process more records
s19l2:
lbra Monitor
 
msgS19Loader:
fcb "S19 Loader Active",CR,LF,0
msgChecksumErr:
fcb "S19 Checksum Err",CR,LF,0
 
/rf6809/trunk/software/boot/serial.asm
41,14 → 41,19
; none
;------------------------------------------------------------------------------
 
setdp $FFC
 
InitSerial:
SerialInit:
pshs dpr
lda #$FFC
tfr a,dpr
clra
clrb
std SerHeadRcv-1
std SerTailRcv-1
std SerHeadXmit-1
std SerTailXmit-1
clr SerHeadRcv
clr SerTailRcv
clr SerHeadXmit
clr SerTailXmit
clr SerRcvXon
clr SerRcvXoff
lda COREID
55,13 → 60,13
sini1:
cmpa IOFocusID
bne sini1
ldb #$09 ; dtr,rts active, rxint enabled, no parity
ldb #$0B ; dtr,rts active, rxint enabled (bit 1=0), no parity
stb ACIA+ACIA_CMD
ldb #$1F ; baud 9600, 1 stop bit, 8 bit, internal baud gen
ldb #$1E ; baud 9600, 1 stop bit, 8 bit, internal baud gen
stb ACIA+ACIA_CTRL
ldb #$0A6 ; diable fifos, reset fifos
ldb #$0AC ; disable fifos (bit zero, one), reset fifos
stb ACIA+ACIA_CTRL2
rts
puls dpr,pc
 
;------------------------------------------------------------------------------
; SerialGetChar
71,7 → 76,7
; XON.
;
; Stack Space:
; 2 words
; 3 words
; Parameters:
; none
; Modifies:
81,32 → 86,32
;------------------------------------------------------------------------------
 
SerialGetChar:
pshs x,y
ldy #0
sei ; disable interrupts
bsr SerialRcvCount ; check number of chars in receive buffer
cmpb #8 ; less than 8?
bhi sgc2
ldb SerRcvXon ; skip sending XON if already sent
bne sgc2 ; XON already sent?
ldb #XON ; if <8 send an XON
clr SerRcvXoff ; clear XOFF status
stb SerRcvXon ; flag so we don't send it multiple times
bsr SerialPutChar
pshs ccr,x,y,dpr
lda #$FFC
tfr a,dpr
sei ; disable interrupts
bsr SerialRcvCount ; check number of chars in receive buffer
cmpb #8 ; less than 8?
bhi sgc2
ldb SerRcvXon ; skip sending XON if already sent
bne sgc2 ; XON already sent?
ldb #XON ; if <8 send an XON
clr SerRcvXoff ; clear XOFF status
stb SerRcvXon ; flag so we don't send it multiple times
bsr SerialPutChar
sgc2:
ldb SerHeadRcv ; check if anything is in buffer
cmpb SerTailRcv
beq sgcNoChars ; no?
ldx #SerRcvBuf
clra
ldb b,x ; get byte from buffer
inc SerHeadRcv ; 4k wrap around
bra sgcXit
ldb SerHeadRcv ; check if anything is in buffer
cmpb SerTailRcv
beq sgcNoChars ; no?
leax SerRcvBuf ; x = buffer address
clra
ldb b,x ; get byte from buffer
inc SerHeadRcv ; 4k wrap around
bra sgcXit
sgcNoChars:
ldd #-1
ldd #-1
sgcXit:
cli
puls x,y,pc
puls ccr,x,y,dpr,pc
 
;------------------------------------------------------------------------------
; SerialPeekChar
116,7 → 121,7
; to send an XON here.
;
; Stack Space:
; 0 words
; 2 words
; Parameters:
; none
; Modifies:
126,12 → 131,14
;------------------------------------------------------------------------------
 
SerialPeekChar:
pshs x,ccr
pshs x,ccr,dpr
lda #$FFC
tfr a,dpr
sei
ldb SerHeadRcv ; check if anything is in buffer
cmpb SerTailRcv
beq spcNoChars ; no?
ldx #SerRcvBuf
leax SerRcvBuf
clra
ldb b,x ; get byte from buffer
bra spcXit
138,7 → 145,7
spcNoChars:
ldd #-1
spcXit:
puls x,ccr,pc
puls x,ccr,dpr,pc
 
;------------------------------------------------------------------------------
; SerialPeekChar
156,6 → 163,9
;------------------------------------------------------------------------------
 
SerialPeekCharDirect:
pshs ccr,dpr
lda #$FFC
tfr a,dpr
lda COREID ; Ensure we have the IO Focus
cmpa IOFocusID
bne spcd0001
166,12 → 176,10
beq spcd0001
clra
ldb ACIA+ACIA_RX
cli
rts
puls ccr,dpr,pc
spcd0001:
ldd #-1
cli
rts
puls ccr,dpr,pc
 
;------------------------------------------------------------------------------
; SerialPutChar
187,7 → 195,9
;------------------------------------------------------------------------------
 
SerialPutChar:
pshs a,ccr
pshs a,ccr,dpr
lda #$FFC
tfr a,dpr
spc0001:
lda COREID ; Ensure we have the IO Focus
cmpa IOFocusID
200,13 → 210,14
bita #16 ; bit #4 of the status reg
beq spc0001 ; branch if transmitter is not empty
stb ACIA+ACIA_TX ; send the byte
puls a,ccr,pc
puls a,ccr,dpr,pc
 
;------------------------------------------------------------------------------
; Calculate number of character in input buffer
; Calculate number of character in input buffer. Direct page must be set
; already.
;
; Parameters:
; y = 0 if current core, otherwise reference to core memory area $Cyxxxx
; none
; Returns:
; d = number of bytes in buffer.
;------------------------------------------------------------------------------
213,12 → 224,12
 
SerialRcvCount:
clra
ldb SerTailRcv,y
subb SerHeadRcv,y
ldb SerTailRcv
subb SerHeadRcv
bge srcXit
ldd #$1000
subd SerHeadRcv,y
addd SerTailRcv,y
subd SerHeadRcv
addd SerTailRcv
srcXit:
rts
 
238,48 → 249,44
;------------------------------------------------------------------------------
 
SerialIRQ:
pshs dpr ; set direct page register to boot variables
lda #$FFC
tfr a,dpr
lda PIC+$D3 ; Serial active interrupt flag
beq notSerInt
sirqNxtByte:
ldb ACIA+ACIA_IRQS ; look for IRQs
bpl notSerInt ; quick test for any irqs
ldb ACIA+ACIA_STAT ; check the status
bitb #$08 ; bit 3 = rx full
beq notRxInt
bitb #$08 ; bit 3 = rx full (not empty)
beq notRxInt1
ldb ACIA+ACIA_RX ; get data from Rx buffer to clear interrupt
cmpb #CTRLT ; detect special keystroke
bne sirq0001
; bsr DumpTraceQueue
sirq0001:
pshs b
; Compute receive buffer address
lda IOFocusID
asla
asla
asla
asla
ora #$C00
clrb
tfr d,y
puls b
lda SerTailRcv,y ; check if recieve buffer full
lda SerTailRcv ; check if recieve buffer full
inca
cmpa SerHeadRcv,y
cmpa SerHeadRcv
beq sirqRxFull
sta SerTailRcv,y ; update tail pointer
sta SerTailRcv ; update tail pointer
deca ; backup
exg a,b
leax SerRcvBuf,y ; x = buffer address
leax SerRcvBuf ; x = buffer address
sta b,x ; store recieved byte in buffer
tst SerRcvXoff,y ; check if xoff already sent
tst SerRcvXoff ; check if xoff already sent
bne sirqNxtByte
bsr SerialRcvCount ; if more than 4080 chars in buffer
cmpb #4080
bsr SerialRcvCount ; if more than 4070 chars in buffer
cmpb #4070
blo sirqNxtByte
ldb #XOFF ; send an XOFF
clr SerRcvXon,y ; clear XON status
stb SerRcvXoff,y ; set XOFF status
clr SerRcvXon ; clear XON status
stb SerRcvXoff ; set XOFF status
stb ACIA+ACIA_TX
bra sirqNxtByte ; check the status for another byte
; Process other serial IRQs
notRxInt1:
puls dpr,pc
sirqRxFull:
notRxInt:
rts
notSerInt:
puls dpr,pc
 
nmeSerial:
fcb "Serial",0
338,3 → 345,4
msgSerialTest:
fcb "Serial port test",CR,LF,0
 
setdp $000
/rf6809/trunk/software/boot/timer.asm
31,8 → 31,8
clr VIA+VIA_T3LH
lda VIA+VIA_ACR ; set continuous mode for timer
ora #$100
sta VIA+VIA_ACR ; enable timer #3 interrupts
lda #$810
sta VIA+VIA_ACR
lda #$880 ; enable timer #3 interrupts
sta VIA+VIA_IER
rts
 
39,17 → 39,33
TimerIRQ:
; Reset the edge sense circuit in the PIC
lda #31 ; Timer is IRQ #31
sta IrqSource ; stuff a byte indicating the IRQ source for PEEK()
sta PIC+16 ; register 16 is edge sense reset reg
lda VIA+VIA_IFR
bpl notTimerIRQ
bita #$800
lda PIC+$FF ; Timer active interrupt flag
beq notTimerIRQ
clr VIA+VIA_T3LL
clr PIC+$FF ; clear the flag
lda #31 ; Timer is IRQ #31
sta IrqSource ; stuff a byte indicating the IRQ source for PEEK()
clr VIA+VIA_T3LL ; should clear the interrupt
clr VIA+VIA_T3LH
inc $E00037 ; update timer IRQ screen flag
lda #31 ; Timer is IRQ #31
sta PIC+16 ; register 16 is edge sense reset reg
clr PIC+$FF ; clear the flag
inc $E0003F ; update timer IRQ screen flag
ldd milliseconds+2
addd #10
std milliseconds+2
ldd milliseconds
adcb #0
stb milliseconds+1
adca #0
sta milliseconds
 
; Update XModem timer, we just always do it rather than testing if XModem
; is active. The increment is set to give approximately 3s before the MSB
; gets set.
ldb xm_timer
addb #4
stb xm_timer
notTimerIRQ:
rts
 
 
/rf6809/trunk/software/boot/xmodem.asm
0,0 → 1,437
; ============================================================================
; __
; \\__/ o\ (C) 2022 Robert Finch, Waterloo
; \ __ / All rights reserved.
; \/_// robfinch<remove>@opencores.org
; ||
;
;
; BSD 3-Clause License
; Redistribution and use in source and binary forms, with or without
; modification, are permitted provided that the following conditions are met:
;
; 1. Redistributions of source code must retain the above copyright notice, this
; list of conditions and the following disclaimer.
;
; 2. Redistributions in binary form must reproduce the above copyright notice,
; this list of conditions and the following disclaimer in the documentation
; and/or other materials provided with the distribution.
;
; 3. Neither the name of the copyright holder nor the names of its
; contributors may be used to endorse or promote products derived from
; this software without specific prior written permission.
;
; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
; DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
; SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
; CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
; OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
;
; ============================================================================
;
; Xmodem variables
;
xm_timer EQU $FFC020
xm_protocol EQU $9F5
xm_flag EQU $9F6
xm_checksum EQU $9F7
xm_tmp2 EQU $9F8
xm_packetnum EQU $9FA
xm_tmp EQU $9FC
xm_crc EQU $9FE
xm_ibuf EQU $A00 ; to $A7F
xm_obuf EQU $A80 ; to $AFF
 
; ------------------------------------------------------------------------------
; Send data using XModem.
; ------------------------------------------------------------------------------
 
xm_SendStart:
lbsr GetRange
ldx mon_r1+2 ; x = buffer address
tfr x,u
ldb #1 ; packet numbers start at one
stb xm_packetnum+1
; Wait for receiver to send a NAK
xm_send:
ldd #-1 ; select blocking input
swi
fcb MF_INCH
cmpb #NAK ; should have got a NAK
beq xm_send5
cmpb #'C' ; or a 'C'
bne xm_send
xm_send5:
stb xm_protocol
xm_send4:
ldb #SOH ; send start
swi
fcb OUTCH
ldb xm_packetnum+1 ; send packet number
swi
fcb MF_OUTCH
comb ; one's complement
swi
fcb MF_OUTCH ; send packet number complement
clra ; acca = byte count
tfr x,u ; u = buffer address
xm_send1:
ldb ,u+ ; grab a byte from the buffer
swi
fcb MF_OUTCH ; send it out
inca
cmpa #128 ; number of bytes in payload
blo xm_send1
ldb xm_protocol
cmpb #'C' ; CRC protocol?
bne xm_send2
bsr xm_calc_crc ; compute CRC
ldd xm_crc ; get crc
lsra ; transfer high eight bits first, so
rorb ; right shift D by eight
lsra
rorb
lsra
rorb
lsra
rorb
lsra
rorb
lsra
rorb
lsra
rorb
lsra
rorb
swi
fcb MF_OUTCH ; send out the byte
ldd xm_crc ; get back CRC
swi
fcb MF_OUTCH ; and send out low byte
bra xm_send3
xm_send2:
bsr xm_calc_checksum
ldb xm_checksum
swi
fcb MF_OUTCH
xm_send3:
swi
ldd #-1 ; block until input is present
fcb MF_INCH
cmpb #ACK
bne xm_send4 ; not an ACK then resend the record
inc xm_packetnum ; increment packet number
leax 128,x ; advance buffer pointer
cmpx mon_r2+2
blo xm_send4 ; go send next record
ldb #EOT ; send end of transmission
swi
fcb MF_OUTCH
swi
fcb MF_OUTCH
swi
fcb MF_OUTCH
rts
 
; ------------------------------------------------------------------------------
; Get a byte, checking for a receive timeout.
;
; Returns:
; accb = byte (0 to 255) or -1 if timed out
; ------------------------------------------------------------------------------
 
xm_getbyte:
xm_gb1:
tst xm_timer ; check the timeout - 2048 ticks (3 seconds approx.)
bmi xm_gb2
clra ; non-blocking
clrb
swi
fcb MF_INCH ; try and get a character
bmi xm_gb1 ; if no character, try again
bsr xm_outbyteAsHex
rts
xm_gb2:
ldb #-1
rts
 
; ------------------------------------------------------------------------------
; XModem Receive
;
; Parameters:
; none
; Modifies:
; All
; Returns:
; none
; ------------------------------------------------------------------------------
 
xm_ReceiveStart:
lbsr Delay3s ; give a little bit of time for sender
lbsr Delay3s
lbsr Delay3s
lbsr GetNumber ; Get the transfer address
tstb ; Make sure we got a value
lbeq Monitor
ldx mon_numwka+2 ; X = transfer address
clr xm_packetnum ; initialize
lda #'C' ; try for CRC first
sta xm_protocol
xm_receive:
lda #2 ; number of times to retry -1
xm_rcv5:
ldb xm_protocol ; indicate we want a transfer (send protocol byte)
swi
fcb MF_SerialPutchar
xm_rcv4:
clr xm_timer ; clear the timeout
xm_rcv1:
bsr xm_getbyte
tstb
bmi xm_retry1 ; timeout on protocol id?
cmpb #SOH ; it should be start of a transfer
beq xm_SOH
cmpb #EOT
beq xm_EOT ; or end of transfer (EOT)
cmpb #CAN
beq xm_receive ; might be a cancel
cmpb #ETB
beq xm_EOT
xm_rcv_nak: ; wasn't a valid start so
ldb #NAK ; send a NAK
swi
fcb MF_SerialPutchar ; and try again
bra xm_rcv4
xm_SOH:
bsr xm_getbyte ; get packet number
bmi xm_rcv_to1
stb xm_packetnum+1
pshs b ; save it
bsr xm_getbyte ; get complement of packet number
bmi xm_rcv_to2
addb ,s ; add the two values
andb #$FF ; the sum should be $FF
subb #$FF
stb xm_flag ; should be storing a zero if there is no error
ldy #0 ; y = payload byte counter
tfr x,u
xm_rcv2:
bsr xm_getbyte
bmi xm_rcv_to1
stb ,u+ ; store the byte to memory
iny
cmpy #128 ; 128 bytes per payload
blo xm_rcv2
bsr xm_getbyte ; get checksum or CRC byte
bmi xm_rcv_to1
stb xm_tmp ; stuff checksum/CRC byte
ldb xm_protocol
cmpb #'C'
bne xm_rcv_chksum
bsr xm_getbyte ; get low order CRC byte
bmi xm_rcv_to1
lda xm_tmp ; get the high byte
aslb ; prepare to combine high and low order
aslb
aslb
aslb
lsra ; shift low nybble of acca into accb
rorb
lsra
rorb
lsra
rorb
lsra
rorb
anda #$00F ; mask off any extra bits
std xm_tmp2
bsr xm_calc_crc ; compute the CRC-16 for the received data
ldd xm_crc ; and compare to received value
cmpd xm_tmp2
bra xm_rcv3
xm_rcv_chksum:
bsr xm_calc_checksum
ldb xm_checksum
cmpb xm_tmp ; where we stuffed the byte
xm_rcv3:
bne xm_rcv_nak ; if not the same, NAK
tst xm_flag
bne xm_rcv_nak ; bad packet number?
ldb #ACK ; packet recieved okay, send back an ACK
swi
fcb MF_SerialPutchar
ldb xm_packetnum+1 ; did we receive the same packet
cmpb xm_packetnum
beq xm_rcv4 ; same packet received, dont update buffer pointer
stb xm_packetnum ; update last seen packet number
leax 128,x ; increment buffer pointer
bra xm_rcv4 ; and go back for next packet
xm_rcv_to2:
leas 1,s ; get rid of stacked byte
xm_rcv_to1:
ldd #msgXmTimeout
swi
fcb MF_DisplayString
lbra Monitor
xm_EOT: ; end of transmission received, return
ldb #ACK ; ACK the EOT
swi
fcb MF_SerialPutchar
lbra Monitor
xm_retry1:
deca
bpl xm_rcv5
lda xm_protocol
cmpa #NAK ; are we already lowered down to checksum protocol?
beq xm_noTransmitter ; did we try both checksum and CRC?
lda #NAK
sta xm_protocol
bra xm_receive
xm_noTransmitter:
ldd #msgXmNoTransmitter
swi
fcb MF_DisplayString
lbra Monitor
 
msgXmTimeout:
fcb "Xmodem: timed out",CR,LF,0
msgXmNoTransmitter:
fcb "XModem: transmitter not responding",CR,LF,0
 
; ------------------------------------------------------------------------------
; Calculate checksum value. The checksum is simply the low order eight bits of
; the sum of all the bytes in the payload area.
;
; Stack space:
; two words
; Modifies:
; xm_checksum contains the checksum value for the record
; Parameters:
; X = buffer address
; Returns:
; none
; ------------------------------------------------------------------------------
 
xm_calc_checksum:
pshs d,x
clra
clrb
xm_cs1:
addb ,x+
inca
cmpa #128
blo xm_cs1
andb #$FF
stb xm_checksum
puls d,x,pc
 
; ------------------------------------------------------------------------------
; Compute CRC-16 of buffer.
;
;int calcrc(char *ptr, int count)
;{
; int crc;
; char i;
; crc = 0;
; while (--count >= 0)
; {
; crc = crc ^ (int) (*ptr++ << 8);
; i = 8;
; do
; {
; if (crc & 0x8000)
; crc = crc << 1 ^ 0x1021;
; else
; crc = crc << 1;
; } while(--i);
; }
; return (crc);
;}
;
; Modifies:
; xm_crc variable
; Parameters:
; u = buffer address
; Returns:
; none
; ------------------------------------------------------------------------------
 
xm_calc_crc:
pshs d,x,y,u
clr xm_crc
clr xm_crc+1
ldu #0 ; u = byte count
xm_crc1:
ldb ,x+ ; get byte
clr xm_tmp ; save in temp
stb xm_tmp+1
asl xm_tmp+1 ; shift temp eight bits to left
rol xm_tmp
asl xm_tmp+1
rol xm_tmp
asl xm_tmp+1
rol xm_tmp
asl xm_tmp+1
rol xm_tmp
asl xm_tmp+1
rol xm_tmp
asl xm_tmp+1
rol xm_tmp
asl xm_tmp+1
rol xm_tmp
asl xm_tmp+1
rol xm_tmp
ldd xm_crc ; crc = crc ^ tmp
eora xm_tmp
eorb xm_tmp+1
std xm_crc
ldy #0
xm_crc4:
ldb xm_crc ; get high byte
bitb #$8 ; check for $8000
beq xm_crc2 ; no? then just go shift
ldd xm_crc ; load
aslb ; shift
rola
eorb #$021 ; and xor
eora #$001
std xm_crc ; store it back
bra xm_crc3
xm_crc2:
ldd xm_crc ; load
aslb ; shift
rola
std xm_crc ; and store
xm_crc3:
iny
cmpy #8 ; repeat eight times
blo xm_crc4
leau 1,u ; increment byte count
cmpu #128
ldd xm_crc ; we want only a 16-bit CRC
anda #$0F
std xm_crc
blo xm_crc1
puls d,x,y,u,pc
 
xm_outbyteAsHex:
pshs d
ldd CharOutVec ; get current char out vector
pshs d ; save it
ldd #ScreenDisplayChar ; set output vector to screen display
std CharOUtVec
ldd 2,s ; get passed data
lbsr DispByteAsHex ; and display on-screen
ldb #' '
lbsr ScreenDisplayChar
puls d ; get back old char out vector
std CharOutVec ; and restore it
puls d ; restore input arguments
rts
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.