Files
2023-03-13 08:36:51 +00:00

160 lines
4.7 KiB
NASM

; Emulated 65C02 SOC
;
; By Daryl Rictor (c)2012
;
; 16k - 256 byte RAM
; 48k ROM (in flash)
; IO @ 3Fxx
;******************************************************************************
; include AVRASM definitions
;******************************************************************************
.include "m1284Pdef.inc"
;******************************************************************************
; Set Register definitions
;******************************************************************************
.def i = R16
.def j = R17
.def zero = R2
.def one = R3
.def mmap = R4
.def free1 = R12 ; unused register pair
.def free2 = R13
;******************************************************************************
; Load Lower Flash Tables starting at 0x1B00 (below ROM image)
;******************************************************************************
.include "av2sr.inc"
.include "sr2av.inc"
.include "opcjmp.inc"
.include "ioexe.inc"
.include "sbcrom.inc"
;******************************************************************************
; Program Starts here on Reset
;******************************************************************************
STARTUP: ; first line executed after reset
CLI ; disable interupts
;******************************************************************************
; Initialize the I/O Ports
;******************************************************************************
; port A pins
ldi i, 0xff ;
out porta, i ;
LDI i, 0x00 ;
out ddra, i ;
; port B pins
LDI i, 0xff ;
out portb, i ;
LDI i, 0x00 ;
out ddrb, i ;
; port C pins
ldi i, 0xff ;
out portc, i ;
LDI i, 0x00 ;
out ddrc, i ;
; port D pins
ldi i, 0xff ;
out portd, i ;
LDI i, 0x00 ;
out ddrd, i ;
;******************************************************************************
; Init other CPU I/O registers
;******************************************************************************
ldi i, 0x80
out ACSR, i ; turn off comparator
ldi i, 0x40 ; set stack pointer to top of SRAM
out SPH, i ;
ldi i, 0xff ;
out SPL, i ;
;******************************************************************************
; Init RS-232 port
;******************************************************************************
InitRS232:
; set baud rate
ldi i, 0x0C ;
; 16MHZ 20MHZ 24MHz
ldi j, 0x00 ; 115200 xxxx 000A 000C
sts UBRR0H, j ; 19200 0033 0040 004D
sts UBRR0L, i ; 9600 0067 0081 009B
; 4800 00CF 0103 0137
; ; 2400 019F 0208 0270
; Enable receiver and transmitter
ldi i, (1<<RXEN0)|(1<<TXEN0)
sts UCSR0B, i
; Set frame format: 8data, 1stop bit
ldi i, (3<<UCSZ00)
sts UCSR0C, i
;******************************************************************************
; Init program registers
;******************************************************************************
clr zero
ldi i, 0x01
mov one, i
ldi i, 0x3F ; IO Page
mov mmap, i
;******************************************************************************
; Show Engine version
;******************************************************************************
ldi zl, low(version*2)
ldi zh, high(version*2)
out rampz, one
ver1:
elpm i, Z+
tst i
breq Ready
call Put_Chr
rjmp ver1
;******************************************************************************
; Main Loop
;******************************************************************************
Ready:
out rampz, zero
call CPU_RESET
jmp Main ; Enter CPU Execute Loop
;***********************
; Version #
;***********************
version: .db 0x0d,0x0a,"Version 3.1 - Starting Emulator... ", 0x0d, 0x0a, 0x00
;******************************************************************************
; include CPU emulator and bootloader files (after ROM image)
;******************************************************************************
; these files in the application area
.include "cpu.asm"
; These files are in the Bootloader section
.include "bootload.asm"
.include "xmodem-receive.asm"
;
; $0000-$3EFF - 15.75k RAM
; $3F00-$3FFF - I/O
; $4000-$FFFF - 48k ROM
;
; Version 2.7 supports AVR interrupts and the full AVR IO page access
; FULL WDC 65C02 instruction set, including BCD mode
; V 3.0 changed opcode excution to a macro and added a table for IO execute
; also moved IRQ flag from GPIOR0 ro R5 - EEPROM flag moved to GPIOR0
; fixed NOP byte count for unused opcoded
; updated bootloader to load engine across the $8000 word boundary
; Version 3.1 - corrected opcode behavior