Squeeze Monitor into top 1K, use common function names for UART for compatibility

This commit is contained in:
Ben Chong
2017-05-31 17:41:06 -07:00
parent e95d31e3b3
commit 21bbbe8199
4 changed files with 34 additions and 125 deletions

View File

@@ -25,18 +25,17 @@ uart_reg5 = $c0c5
uart_reg6 = $c0c6
uart_reg7 = $c0c7
uart_xmit = uart_reg0 ; Used by upload.asm
;uart_recv = $c040
;uart_status = $c041
;
;***********************************************************************
; UART I/O Support Routines
; We'll use Daryl's routine names for compatibility with his software/code
; Otherwise, we'll use UART-agnostic nomemclature
;---------------------------------------------------------------------
;
ACIA1_init
uart_init
lda #$80 ; Line control register, Set DLAB=1
sta uart_reg3
@@ -58,6 +57,7 @@ uart_init
;---------------------------------------------------------------------
; Input char from UART (blocking)
; Exit: character in A
ACIA1_Input
uart_input
lda uart_reg5 ; Serial port status
and #$01 ; is recvr full
@@ -68,6 +68,7 @@ uart_input
;---------------------------------------------------------------------
; Non-waiting get character routine
; Scan for input (no wait), C=1 char, C=0 no character
ACIA1_Scan
uart_scan
clc
lda uart_reg5 ; Serial port status
@@ -81,6 +82,7 @@ uart_scan2 rts
; output to OutPut Port
; Entry: character in A
; Exit: character in A
ACIA1_Output
uart_output
pha ; save registers
uart_out1

View File

@@ -21,10 +21,12 @@ uart_status = $c041
;
;***********************************************************************
; UART I/O Support Routines
; We'll use Daryl's routine names for compatibility with his software/code
; Otherwise, we'll use UART-agnostic nomemclature
;---------------------------------------------------------------------
;
ACIA1_init
uart_init
; Nothing to init
ldx #4
@@ -40,6 +42,7 @@ ui_loop
;---------------------------------------------------------------------
; Input char from UART (blocking)
; Exit: character in A
ACIA1_Input
uart_input
lda uart_status ; Serial port status
and #$01 ; is recvr full
@@ -50,6 +53,7 @@ uart_input
;---------------------------------------------------------------------
; Non-waiting get character routine
; Scan for input (no wait), C=1 char, C=0 no character
ACIA1_Scan
uart_scan
clc
lda uart_status ; Serial port status
@@ -63,6 +67,7 @@ uart_scan2 rts
; output to OutPut Port
; Entry: character in A
; Exit: character in A
ACIA1_Output
uart_output
pha ; save registers
uart_out1

View File

@@ -10,29 +10,20 @@
;
;*********************************************************************
; local Zero-page variables
;
xsav = $30 ; 1 byte
ysav = $31 ; 1 byte
rowcount = $32
;Prompt = $32 ; 1 byte
;linecnt = $33 ; 1 byte
;Modejmp = $34 ; 1 byte
;Hexdigcnt = $35 ; 1 byte
;OPCtxtptr = $36 ; 1 byte
;Memchr = $37 ; 1 byte
Startaddr = $38 ; 2 bytes
Startaddr_H = $39
;Addrptr = $3a ; 2 bytes
;Addrptr_H = $3b
Hexdigits = $3c ; 2 bytes
Hexdigits_H = $3d
;Memptr = $3e ; 2 bytes
;Memptr_H = $3f
strptr = $40
strptrh = $41 ; temporary string pointer (not preserved across calls)
;
; Modified from Daryl's code so that we overlap with EhBASIC as little
; as possible. This was needed to debug EhBASIC during the porting process
ysav = $e0 ; 1 byte
rowcount = $e1 ; 1 byte
Startaddr = $e2 ; 2 bytes
Startaddr_H = $e3
Hexdigits = $e4 ; 2 bytes
Hexdigits_H = $e5
strptr = $e6
strptrh = $e7 ; temporary string pointer (not preserved across calls)
; Local Non-Zero Page Variables
;
; Unchange from Daryl's code except for addition of the interrupt vectors
buffer = $0300 ; keybd input buffer (127 chrs max)
PCH = $03e0 ; hold program counter (need PCH next to PCL for Printreg routine)
PCL = $03e1 ; ""
@@ -60,7 +51,6 @@ nmi_vector = $03ea ; NMI vector
; Print2SP - prints 2 spaces
; Print1SP - prints 1 space
; Input_Char - get one byte from input port, waits for input
; check_Input - Checks for an input character (no waiting)
; Output_char - send one byte to the console
; *************************************************************************
;
@@ -551,9 +541,6 @@ Version jsr Print_CR ;
jsr PrintStrAX
rts ;
;---------------------------------------------------------------------
;
;
;-----------DATA TABLES ------------------------------------------------
;

View File

@@ -5,102 +5,17 @@
; upload.asm
; By Daryl Rictor & Ross Archer Aug 2002
;
; 21st century code for 20th century CPUs (tm?)
;
; A simple file transfer program to allow upload from a serial
; port to the SBC. It integrates both x-modem/CRC transfer protocol
; and Intel Hex formatted files. Primary is XMODEM-CRC, due to its
; superior reliability. Fallback to Intel Hex is automagical following
; receipt of the first Hexfile d/l character, so the selection is
; transparent to the user.
;
; Files uploaded via XMODEM-CRC must be
; in .o64 format -- the first two bytes are the load address in
; little-endian format:
; FIRST BLOCK
; offset(0) = lo(load start address),
; offset(1) = hi(load start address)
; offset(2) = data byte (0)
; offset(n) = data byte (n-2)
;
; Subsequent blocks
; offset(n) = data byte (n)
;
; The TASS assembler and most Commodore 64-based tools generate this
; data format automatically and you can transfer their .obj/.o64 output
; file directly.
;
; The only time you need to do anything special is if you have
; a raw memory image file (say you want to load a data
; table into memory). For XMODEM you'll have to
; "insert" the start address bytes to the front of the file.
; Otherwise, XMODEM would have no idea where to start putting
; the data.
;
; The "fallback" format is Intel Hex. As address information is included
; at the start of each line of an Intel Hex file, there is no need for a special
; "first block". As soon as the receiver sees an Intel Hex
; character ':' coming in, it aborts the XMODEM-CRC upload attempt and
; tries to accept Intel Hex instead. This is the format used natively
; by a lot of generic tools such as TASM.
; Note there is no "fallback fallback." Once it quits CRC and
; thinks you're sending it Intel Hex, you either have to finish the download
; or press CTRL-C to abort.
;
; By having support for both formats under the same "U"pload command,
; it enables seamless switching between either kind of toolchain with
; no special user intervention. This seemed like a Good Thing (tm).
;
; Note: testing shows that no end-of-line delay is required for Intel Hex
; uploads, but in case your circumstances differ and you encounter
; error indications from a download (especially if you decided to run the
; controller under 1 Mhz), adding a 10-50 mS delay after each line is
; harmless and will ensure no problems even at low clock speeds
;
;
; Style conventions being tried on this file for possible future adoption:
; 1. Constants known at assembly time are ALL CAPS
; 2. Variables are all lower-case, with underscores used as the word separator
; 3. Labels are PascalStyleLikeThis to distinguish from constants and variables
; 4. Old labels from external modules are left alone. We may want
; to adopt these conventions and retrofit old source later.
; 5. Op-codes are lower-case
; 6. Comments are free-style but ought to line up with similar adjacent comments
; zero page variables (Its ok to stomp on the monitor's zp vars)
;
;
;crc = $38 ; CRC lo byte
;crch = $39 ; CRC hi byte
;ptr = $3a ; data pointer
;ptrh = $3b ; " "
;blkno = $3c ; block number
;retry = $3d ; retry counter
;retry2 = $3e ; 2nd counter
;bflag = $3f ; block flag
temp = $e0 ; save hex value
chksum = $e8 ; record checksum accumulator
reclen = $ea ; record length in bytes
start_lo = $ec
start_hi = $ed
rectype = $ee
dlfail = $ef ; flag for upload failure
bytecount_l = $f0
bytecount_h = $f1
bytecount_l = $36
bytecount_h = $37
chksum = $38 ; record checksum accumulator
reclen = $39 ; record length in bytes
start_lo = $3b
start_hi = $3c
rectype = $3d
dlfail = $3e ; flag for upload failure
temp = $3f ; save hex value
;
; tables and constants
;
;crclo = $7a00 ; Two 256-byte tables for quick lookup
;crchi = $7b00 ; (should be page-aligned for speed)
;Rbuff = $0300 ; temp 128 byte receive buffer
; (uses the Monitor's input buffer)
SOH = $01 ; start block
EOT = $04 ; end of text marker
ACK = $06 ; good block acknowleged
NAK = $15 ; bad block acknowleged
CAN = $18 ; cancel (not standard, not supported)
CR = 13
LF = 10
ESC = 27 ; ESC to exit