Download 6802 Kit User`s Manual - Build Your Own Microcontroller Projects

Transcript
6802 Microprocessor Kit
User's Manual
Rev 1.1, October 2015
6802 MICROPROCESSOR KIT
CONTENTS
OVERVIEW...........................................................................................4
FUNCTIONAL BLOCK DIAGARM........................................................4
HARDWARE LAYOUT...........................................................................5
KEYBOARD LAYOUT............................................................................5
HARDWARE FEATURES......................................................................8
MONITOR PROGRAM FEATURES.......................................................8
MEMORY AND I/O MAPS......................................................................9
INTERRUPT and RESET VECTORS....................................................9
GETTING STARTED..............................................................................10
HOW TO ENTER PROGRAM USING HEX CODE................................12
USER REGISTERS DISPLAY................................................................13
TEST CODE RUNNING WITH SINGLE STEPPING.............................14
HOW TO FIND OFFSET BYTE..............................................................16
GPIO1 LED.............................................................................................17
CONNECTING KIT TO TERMINAL.......................................................18
DUMP MEMORY CONTENTS...............................................................21
EXPANSION BUS HEADER..................................................................22
REP KEY...............................................................................................23
10ms TICK GENERATOR....................................................................23
RS232C PORT......................................................................................24
DATA FRAME for UART COMMUNICATION......................................25
CONNECTING LCD MODULE.............................................................25
LOGIC PROBE POWER SUPPLY........................................................26
HARDWARE SCHEMATIC, BOM.........................................................27
PCB LAYOUT........................................................................................31
MONITOR PROGRAM LISTINGS.........................................................35
OVERVIEW
The 6802 Microprocessor kit is a new design single board computer using the early 1976
Motorola 6802 microprocessor. This single board computer is a basic learning tool for
programming the 6802 with low level instructions hex code. The board has hex keypad and
7-segment display for entering the instruction hex code and test it directly. Students will
learn basic of the computer hardware and software of the 6802 easily. The 6802 is software
compatible with the 6800 microprocessor. The instructions and addressing modes of 6802
microprocessor are good for learning the basic of microprocessor operations.
FUNCTIONAL BLOCK DIAGRAM
Notes
1. UART is software control for low speed asynchronous communication.
2. The kit has 8-bit LCD module interfacing bus.
3. 100Hz Tick generator is for interrupt experiment.
4. Ports for display and keypad interfacing were built with discrete logic IC chips.
5. Memory and Port decoders are made with Programmable Logic Device, PLD. 4
HARDWARE LAYOUT
RS232C connector, DB9
male
DC jack, +9VDC
GPIO1 LED, 8-bit binary
display (address is 40H)
LCD contrast adj.
20-pin Text LCD header.
Selector for 10ms tick or
IRQ key
Important Notes
1. Plugging or removing the LCD module must be done when the kit is powered off!
2. AC adapter should provide approx. +9VDC, higher voltage will cause the voltage
regulator chip becomes hot.
3. The kit has diode protection for wrong polarity of adapter jack. If the center pin is not the
positive (+), the diode will be reverse bias, preventing wrong polarity feeding to voltage
regulator.
5
KEYBOARD LAYOUT
HEX keys
Hexadecimal number 0 to F with associated user registers, flag bits and page
zero memory $00 to $06 (use with key REG)
CPU control keys
RESET
Reset the CPU, the 6802 will get reset vector from location FFFE and FFFF
USER
User key, no connection
IRQ
Make IRQ pin to logic low, used for experimenting with interrupt process
Monitor function keys
REP
Repeat the key that pressed, must be pressed together with REP key.
INS
Insert one byte to the next location, the 256 bytes will be shifted down.
DEL
Delete one byte at current display, the next 256 bytes will be moved up.
STEP
Execute user code only single instruction and return to save CPU registers
GO
Jump from monitor program to user code
-
Decrement current display address by one
+
Increment current display address by one
PC
Set current display address with user Program Counter
REG
Display user registers, flags or page zero $00 to $06 with HEX key.
6
ACCA, Accumulator A
ACCB, Accumulator B
IX, 16-bit Index register
SP, 16-bit Stack Pointer register
--HI, upper 4-bit contents of the Condition Code registers, for Half Carry Flag
and Interrupt flag
NZVC, lower 4-bit contents of the Condition Code register, for Negative,
Zero, Overflow and Carry flags.
$00, display 16-bit data location $00 (high byte) and $01 (low byte)
$02, display 16-bit data location $02 (high byte) and $03 (low byte)
$04, display 16-bit data location $04 (high byte) and $05 (low byte)
$06, display 16-bit data location $06 (high byte) and $07 (low byte)
DATA
Set entry mode of hex keys to Data field
ADDR
Set entry mode of hex keys to Address field
COPY
Copy block of memory used with key + for Start, End, Destination and with
key GO
REL
Compute relative byte, used with key + for Start, Destination and key GO
DUMP
Display 16 bytes x 16 lines memory contents by using 2400 bit/s display
terminal.
LOAD
Load Motorola S-record or Intel hex file at 2400 bit/s using serial port
MUTE
Turn beep ON/OFF
Prg
Demonstration program 00-09, program number can be selected with key + or
-. Then press key GO to run it. Available sample programs are,
00
Rotate bit with ROLA instruction
01
Binary number counting from 00 to FF
02
BCD number counting from 00 to 99
7
03
Simple clock using 10ms tick for IRQ interrupt. SW1 must select to
Tick. Key + will clear the clock.
04
Test LCD module. Display message on the LCD display. Caution!
Plugging/removing the LCD module must do when the kit was
POWER OFF!
05-09 N/A for this version. User may add it in the monitor source code.
HARDWARE FEATURES
The hardware features:
•
•
•
•
•
•
•
•
•
•
•
CPU: Motorola 6802, NMOS 8-bit Microprocessor @1MHz clock
Memory: 32kB RAM, 16kB EPROM
Memory and I/O Decoder chip: Programmable Logic Device GAL16V8D
Display: high brightness 6-digit 7-segment LED
Keyboard: 36 keys
RS232 port: software controlled UART 2400 bit/s 8n1
Debugging LED: 8-bit GPIO1 LED at location $8000
Tick: 10ms tick produced by 89C2051 for time trigger experiment
Text LCD interface: direct CPU bus interface text LCD
Brownout reset: KIA7042 reset chip for power brownout reset
Expansion header: 40-pin header
MONITOR PROGRAM FEATURES
The MONITOR program features:
•
•
•
•
•
•
•
•
•
•
•
Simple hex code entering
Insert and Delete byte
Single step running
User registers: ACCA, ACCB, IX, SP, and Condition code registers for storing
CPU status after program execution
Page zero memory display
Easy offset byte calculation for Relative addressing mode
Copy block of memory
Motorola s-record or Intel hex file downloading
Memory dump
Beep ON/OFF
Demo programs
8
MEMORY AND I/O MAPS
The first 32kB is RAM space from 0000-7FFFH. Zero page is location 00-FFH. User Stack
space is set at 7F00H. System Stack is set at 7FFFH. User space is from 200H to 7000H.
The 6802 CPU uses memory space from 8000H-BFFFH for I/O ports. Available user I/O for
lab experiment is A000H-BFFFH. The monitor ROM is located at C000H-FFFFH
Memory mapped I/O
64kB Memory
0000H
0200H
7FFFH
8000H
9000H
C000H
8000H
8001H
8002H
8003H
System RAM
User RAM
Input/Output
16kB Monitor ROM
FFFFH
GPIO1
PORT0
PORT1
PORT2
9000H LCD command WR
9001H LCD data WR
9002H LCD command RD
9003H LCD data RD
INTERRUPT and RESET VECTORS
The vectors for RESET and Interrupts are shown below.
Vector
Description
MS
LS
$FFF8
$FFF9
IRQ
$FFFA
$FFFB
Software Interrupt
$FFFC
$FFFD
NMI
$FFFE
$FFFF
RESET
Software interrupt vector is for SWI instruction. Hex code for SWI instruction is 3FH.
User can put 3FH (SWI instruction) at the end of user program. It will generate interrupt
process, return to the monitor program that saves CPU registers to user registers. We can
examine the program running easily.
NMI is reserved for Single Step running. When press STEP key, the NMI interrupt will be
generated after user instruction was executed. The service routine is the same as software
interrupt, saving CPU registers to user registers for later checking.
IRQ is prepared for user interrupt experiment. The RAM vector, 00F8H is put the IRQ
vector in ROM. CPU will jump to location 00F8H. User can place the service routine for 9
IRQ at that location! NOT THE VECTOR ITSELF! See the program example of using
IRQ in the 6802 Programming Book.
GETTING STARTED
The kit accepts DC power supply with minimum voltage +7.5V. It draws DC current
approx. 200mA. However we can use +9VDC from any AC adapter. The example of AC
adapter is shown below.
The center pin is positive.
10
If your adapter is adjustable output voltage, try with approx. +9V. Higher voltage will make
higher power loss at the voltage regulator, 7805. Dropping voltage across 7805 is approx.
+2V. To get +5VDC for the kit, we thus need DC input >+7.5V.
When power up, we will see the cold boot message 6802 running.
6802
Press RESET it will be warm boot. When RESET key has been released it will show,
6802
11
If there is no LED light up, check the adapter polarity with multimeter.
HOW TO ENTER PROGRAM USING HEX CODE
Let us try enter HEX CODE of the example program to memory and test it. We write the
program using 6802 instructions.
Address Hex code
0200
86 01
0202
B7 80 00
Label
MAIN
Instruction
comment
LDAA #1
Load register A with 1
STAA $8000
Write A to GPIO1@ 8000H
Our test program has only two instructions.
The first instruction is LDAA #1, Load Accumulator A with 8-bit constant, 1.
This instruction has two bytes hex code i.e., 86 is LDAA #n and #n is 01.
The 2nd instruction is STAA $8000. The instruction's machine code is B7. The location of
GPIO1 is 8000, 16-bit data.
The total of hex codes for this small program is 5 bytes that are, 86, 01, B7, 80, and 00.
The first byte will be entered to location 0200. And the following bytes will be entered at
0201, 0202, 0203, 0204.
Let us see how to enter these codes into the memory.
Step 1 Press key PC, the display will show current memory address and its contents.
0200 a4
Shown the location 0200 has data A4. There are small dots at the data field indicating the
active field, ready for modifying the hex contents.
Step 2 Press key 8 and key 6. The new hex code 86 will be entered to the location 0200.
0200 86
Step 3 Press key + to increment the location from 0200 to 0201. Then enter hex key 1,
0200 0 1
12
Repeat Step 3 until completed for the last location. We can verify the hex code with key +
or key -.
To change the display location, press key ADDR. The dots will move to Address field. Any
hex key pressed will change the address.
USER REGISTERS DISPLAY
Before we test the code running, let us see how to use the user registers. User registers are
the memory block in RAM that used to save the contents of CPU registers after completing
a given program running. We can examine the user registers for checking our code running
then.
Press key REG, then press key 0, it will show Accumulator A has 14.
ACCA 14
Press key 1 for Accumulator B.
ACCb 60
Press key 2 for Index register, shown IX has 16-bit data= C0EF
c0ef ix
Press key 3 for Stack Pointer register, shown SP has 16-bit data= 7F00
7F00 SP
Press key 4 for upper half 4-bit of the Condition Code Register for Half carry flag and
Interrupt flag.
1 1 0 1 CH
13
Press key 5 for lower half 4-bit of the Condition Code Register for Negative, Zero,
Overflow and Carry flags.
1 1 0 1 CL
Press key 6, the 16-bit data at location 00 and 01 will show. Shown 16-bit data, 174C.
17 is MS byte stored at address 0000.
4C is LS byte stored at address 0001.
174c 00
Similarly for key 7, 8 and 9.
16 is MS byte stored at address 0002
164a 02
4A is LS byte stored at address 0003
0C is MS byte stored at address 0004
0c82 04
82 is LS byte stored at address 0005
84 is MS byte stored at address 0006
8454 06
54 is LS byte stored at address 0007
These (user) registers will be useful for program testing. The page zero memory display,
each 16-bit will also be useful for checking Arithmetic and logical operations. We will see
the examples in the programming book.
TEST CODE RUNNING WITH SINGLE STEPPING
Now get back to the program we have just entered. Let us take a look again.
Address Hex code
0200
86 01
0202
B7 80 00
Label
MAIN
Instruction
comment
LDAA #1
Load register A with 1
STAA $8000
Write A to GPIO1@ 8000H
We will try test the program using single step running.
14
Step 1 Press key PC. We see that the location 0200 has 86.
0200 86
Step 2 Press REG key, then key 0, to check the Accumulator A.
ACCA 14
Step 3 Press PC then STEP key. The instruction LDAA #1 will be executed.
0202 b7
The display will show next instruction to be executed, that is STAA $8000.
Step 4 Let check again register A with key REG and 0. We see that now the Accumulator A
has 01.
ACCA 0 1
Step 5 Press PC then STEP, the instruction STAA $800 will be executed. The display will
show next instruction to be executed.
0205 2e
We will see the contents of Accumulator register will be stored at GPIO1 LED!
To get back key PC to the location 0200, press RESET key, then press PC.
We see that the single step running is useful for learning the operation of each instruction.
We can check the result with user registers easily.
15
HOW TO FIND OFFSET BYTE
The offset byte is signed number using two's complement. It is the distant in number of byte
length between destination address and current Program Counter. The 6802 CPU uses it for
relative addressing of the Branch instructions. The monitor program has function key for
finding the offset byte by entering the start and destination addresses.
Let us see the example, how to find the offset byte, XX from below program.
This program will increment the Accumulator A, store it to GPIO1 LED, then branch back
to loop. The BRA LOOP instruction has machine code 20. The 2nd byte is OFFSET byte.
Address Hex code
0200
4C
0201
0204
Label
LOOP
Instruction
comment
INCA
Increment Accumulator A
B7 80 00
STAA $8000
Write A to GPIO1@ 8000H
20 XX
BRA LOOP
Jump back to loop
Suppose we have entered the hex code from beginning to the location 0204. The display
will show.
0204 20
To find the offset byte, XX, Press key REL.
0204 -s
The display address will be start location. Press key +, and enter destination address, 200.
0200 -d
Press GO, the offset byte, FA or -6 will be entered to location 0205 automatically.
0205 fa
If we count by hand, we will see that the byte length will be 6 bytes backward.
We can test this program with key STEP and REP together. We will see binary incrementing
on the GPIO1 LED. The program will jump back to loop with Branch Always instruction.
16
GPIO1 LED
The 6802 kit provides a useful 8-bit binary display. It can be used to debug the program or
code running demonstration. The I/O address is 8000H. U14 is 8-bit data latch. Logic 1 at
the output will make LED lit.
The GPIO1 LED can be used to display accumulator register easily. Let us take a look the
sample code below.
Address Hex code
0200
C6 01
0202
F7 80 00
Label
MAIN
Instruction
comment
LDAB #1
Load register B with 1
STAB $8000
Write B to GPIO1@ 8000H
The test code has only two instructions. The first instruction has two bytes machine code,
C6 and 01. The second instruction has three bytes F7, 80 and 00.
Enter the hex code to memory from 0200 to 0204. Then press PC, and execute the
instruction with single step by pressing key STEP. The 2nd press STEP key that executes
instruction STAB $8000 will make the GPIO1 LED showing the contents of register B. Try
change the load value to register B and test the code.
Another example is with JUMP instruction. The JUMP instruction will change the Program
Counter to 0200, to repeat program running. Now we use instruction that increments the
Accumulator A. After incrementing, we write register A to location of GPIO1 at 8000H. And
with JMP LOOP instruction, the program will be repeated.
17
Address Hex code
0200
4C
0201
0204
Label
LOOP
Instruction
comment
INCA
Increment Accumulator A
B7 80 00
STAA $8000
Write A to GPIO1@ 8000H
7E 02 00
JMP LOOP
Jump back to loop
Again enter the hex code to memory and test it with single step. Now press key STEP and
key REP together. Every time when instruction STAA $8000 was executed, did you see the
binary number counting up?
Note the JUMP instruction has 3 bytes hex code, but the BRA instruction has only 2 bytes.
CONNECTING 6802 KIT TO TERMINAL
For LOAD key, we can connect the 6802 kit to a terminal by RS232C cross cable. You may
download free terminal program, teraterm from this URL,
http://ttssh2.sourceforge.jp/index.html.en
RS232C cross cable
VT100 Terminal
6802 Kit
The example shows connecting laptop with COM1 port to the RS232C port of the 6802 kit.
New laptop has no COM port, we may use the USB-RS232 adapter for converting the USB
port to RS232 port.
To download Motorola s-record or Intel hex file that generated from the assembler or c
compiler, set serial port speed to 2400 bit/s, 8-data bit, no parity, no flow control, one stop
bit.
Step 1 Run teraterm, then click at Serial connection.
18
Step 2 Click setup>Serial port.
19
Step 3 Set serial port speed to 2400 and format as shown below.
Step 4 Press key LOAD, then key GO. The kit will wait for the data stream from terminal.
Step 5 On PC, Click file>Send File>LED.HEX.
20
The kit will read the hex file, write to memory, when completed if no checksum error, the
display will show the current address. The kit accepts for both Motorola s-record or Intel
hex files automatically.
DUMP MEMORY CONTENTS
With terminal connection, we can use it to display the memory contents, 256 bytes easily.
The monitor command is DUMP key. When pressed, the kit will send data stream to display
the memory contents from current program counter. In addition, the ASCII code is also
decoded for each line.
21
EXPANSION BUS HEADER
JP1, 40-pin header provides CPU bus signals for expansion or I/O interfacing. Students may
learn how to make the simple I/O port, interfacing to Analog-to-Digital Converter,
interfacing to stepper motor or AC power circuits.
22
REP KEY
REP(repeat) key, S19 is one bit active low key switch connected to bit 6 of Port 0. To test
the logic of S19, we can use instruction LDAA $0000 and check bit 6 of the accumulator
with test bit instruction. REP key is used in monitor program together with key STEP, + or –
to provide automatic repeating.
10ms TICK GENERATOR
SW1 is a selector for interrupt source between key IRQ or 10ms tick produced by 89C2051
microcontroller. Tick generator is software controlled using timer0 interrupt in the 89C2051
chip. The active low tick signal is sent to P3.7. For tick running indicator, P1.7 drives D1
LED.
23
Tick is a 10ms periodic signal for triggering the 6802 IRQ pin. When select SW1 to Tick,
the 6802 CPU can be triggered by a maskable interrupt. The 100Hz tick or 10ms tick can be
used to produce tasks that executed with multiple of tick. The 6802 kit lab look will show
how to use 10ms tick to make a digital timer.
10ms
10ms
10ms
RS232C PORT
The RS232C port is for serial communication. We can use a cross cable or null MODEM
cable to connect between the kit and terminal. The connector for both sides are DB9 female.
We may build it or buying from computer stores.
For new PC or laptop computer without the RS232 port. It
has only USB port, we may have the RS232C port by
using the USB to RS232 converter.
24
DATA FRAME for UART COMMUNICATION
Serial data that communicated between kit and terminal is asynchronous format. The 6802
kit has no UART chip, instead it uses software controlled to produce bit rate of 2400 bit/s.
The data frame is composed of start bit, 8-data bit and stop bit. For our kit, period = 1/2400
= 417 microseconds.
Since bit period is provided by machine cycle delay. Thus to send/receive serial data
correctly, all interrupts must be disabled.
CONNECTING LCD MODULE
JR1 is 20-pin header for connecting the LCD module. The example shows connecting the
16x2 lines text LCD module. R12 is a current limit resistor for back-light. R13 is trimmer
POT for contrast adjustment. The LCD module is interfaced to the 6802 bus directly. The
command and data registers are located in I/O space having address from 9000H to 9003H.
Be advised that plugging or removing the LCD module must be done when the kit is
powered off.
Text LCD module accepts ASCII codes for displaying the message on screen.
Without settings the LCD by software, no characters will be displayed. The first line will be
black line by adjusting the R13 for contrast adjustment.
25
LOGIC PROBE POWER SUPPLY
The kit provides test points TP4(+5V) and TP5(GND) for using the logic probe. Students
may learn digital logic signals with logic probe easily. The important signals are RESET
(TP2) and E clock (TP3). Tick signal, however indicated by D1 LED blinking. Logic probe
can test it at P3.7 of the 89C2051 microcontroller directly. Red clip is for +5V and Black
clip for GND.
+ 5V at TP1
GND at TP1
26
HARDWARE SCHEMATIC, PARTS LIST and PCB layout
D
+5V
C16
10uF
4.7k
R15
R5
R3
R2
TEST POINT
+5V
1k
1k
1k
+5V
+
1
TP4
+5V
TP5
1
VSS
VDD
C21
1
27pF
TP2
RESET1
HALT
NMI
IRQ
+5V
VCC
5
VCC
Y1
4MHz
E
VMA
R/W
C5
0.1uF
ROM_CE
6802
BA
E
VMA
R/W
IRQ
MR
RE
RESET
NMI
HALT
EX2
27pF
C20
U16
38
X1
39
40
6
2
4
3
36
7
37
5
34
C6
0.1uF
A0
A1
A2
A3
A4
A5
A6
A7
A[0..7]
A8
A9
A10
A11
A12
A13
A14
+5V
C7
0.1uF
U1
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
O0
O1
O2
O3
O4
O5
O6
O7
11
12
13
15
16
17
18
19
0xC000-0xFFFF
Monitor Program
10
9
8
7
6
5
4
3
25
24
21
23
2
26
27
20
22
1
+5V
D0
D1
D2
D3
D4
D5
D6
D7
4
D0
D1
D2
D3
D4
D5
D6
D7
A8
A9
A10
A11
A12
A13
A14
A[0..7]
A0
A1
A2
A3
A4
A5
A6
A7
10
9
8
7
6
5
4
3
25
24
21
23
2
26
1
U2
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
D0
D1
D2
D3
D4
D5
D6
D7
11
12
13
15
16
17
18
19
D0
D1
D2
D3
D4
D5
D6
D7
3
E
A0
A1
TXD
12
13
14
15
16
17
18
19
U3
P3.0/RXD
P3.1/TXD
P3.2/INTO
P3.3/INT1
P3.4/T0
P3.5/T1
XTAL1
XTAL2
RST/VPP
VCC
9
U7D
AT89C2051
QA
QB
QC
QD
QE
QF
QG
QH
J1
1
2
D[0..7]
12
13
14
15
16
17
18
19
11
ROM_CE
RAM_CE
RAM_WR
2
2
Q0
Q1
Q2
Q3
TP1
1
3
4
5
6
3
Title
Size
B
Date:
+5V
R1
680
LED
D1
D0
D1
D2
D3
D4
D5
D6
D7
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
JP1
1
3
5
7
9
11
13
15
17
19
21
23
25
27
29
31
33
35
37
39
1
HEADER 20X2
R6
10k
1
3
C2
10uF
Q2
1
1
VMA
E
+5V
D0
D1
D2
D3
D4
D5
D6
D7
NMI
IRQ
RESET2
RESET1
R/W
A15
A14
A13
A12
D0
D1
D2
D3
D4
D5
D6
D7
TICK
10ms Tick
SW2
IRQ
of
3
VOLTAGE DIP RESET
2
KIA7045
RESET
SW3
IRQ test switch
SW1
ESP switch
2
+5V
+
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
36
38
40
CPU expansion connector
5
TVS5V_SOD123
D2
IRQ
U7C
VCC
6
74LS14
+5V
6802 MICROPROCESSOR KIT
Document Number
<Doc>
Saturday, September 26, 2015
Sheet
Designed by Wichit Sirichote, [email protected], (C)2015
LCD_E
PORT0
PORT1
PORT2
GPIO1
TEST POINT
TICK/2
TICK
U17
D0
D1
D2
D3
DDA
DDB
CLK
ODA
ODB
RST
74LS14
CD4076B
4
U7B
RESET2
9
10
7
1
2
15
user
SW4
RESET2
RESET1
74LS14
8
E
P3.7
P1.0/AIN0
P1.1/AIN1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
DC Input
14
13
12
11
Programmable system tick
5
4
2
3
6
7
8
9
E
1
+5V
20
RESET2
U4
I/O/Q
I/O/Q
I/O/Q
I/O/Q
I/O/Q
I/O/Q
I/O/Q
I/O/Q
U6
A
B
CLK
CLR
U7A
1
74HC164
1
3
4
5
6
10
11
12
13
PLD decoder logic
I
I
I
I
I
I
I
I
D3
74LS14
9
8
1
2
GAL16V8D
I/CLK
I/OE
2
1k
2
1N4007
1000uF25V
+5V
2
3
4
5
6
7
8
9
BREAK
NMI
D14
+
POWER
C4
3
R14
E
R/W
A10
A11
A12
A13
A14
A15
C11
0.1uF
VIN
U8
LM2490-5.0
1
11
1
0x0000-0x7FFF 32kB
SRAM, NVRAM
RAM_CE
20
22
27
VOUT
TEST POINT
1
TP3
RAM_WR
3
A0
A1
CE
OE
WE
E
HM62256B
A[8..14]
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
A15
C10
0.1uF
27C256
35
9
10
11
12
13
14
15
16
17
18
19
20
22
23
24
25
33
32
31
30
29
28
27
26
C3
10uF 16V
C9
0.1uF
+
CE
OE
VPP
VCCSTB
D0
D1
D2
D3
D4
D5
D6
D7
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
A15
C8
0.1uF
4
3
1
C
B
A
GND
5
GND
2
+
C1
22uF
Rev
D
C
B
A
D
C
B
A
D0
D1
D2
D3
D4
D5
D6
D7
RESET2
5
D0
D1
D2
D3
D4
D5
D6
D7
D0
D1
D2
D3
D4
D5
D6
D7
D0
D1
D2
D3
D4
D5
D6
D7
+
VCC
2
3
4
5
6
7
8
9
11
1
20
1
19
18
17
16
15
14
13
12
11
20
11
1
2
3
4
5
6
7
8
9
C17
10uF
VCC
VCC
U11
1D
2D
3D
4D
5D
6D
7D
8D
LE
OE
VCC
1Q
2Q
3Q
4Q
5Q
6Q
7Q
8Q
1Q
2Q
3Q
4Q
5Q
6Q
7Q
8Q
0x01
74HC573
U12
1D
2D
3D
4D
5D
6D
7D
8D
LE
OE
A1
A2
A3
A4
A5
A6
A7
A8
U13
74HC573
VCC
TXD
Y1
Y2
Y3
Y4
Y5
Y6
Y7
Y8
G1
G2
VCC
74HC541
VCC
19
18
17
16
15
14
13
12
19
18
17
16
15
14
13
12
2
3
4
5
6
7
8
9
20
VCC
E
G
F
A
B
C
DP
D
4
RXD
S19
PC7 SPEAKER
PA0
PA1
PA2
PA3
PA4
PA5
PA6
C18
100nF
4
PC0
PC1
PC2
PC3
PC4
PC5
PC6
A
B
C
D
E
F
G
DP
14
16
13
3
5
11
15
7
U9
A
B
C
D
E
F
G
DP
LTC-4727JR
PC5
PC4
PC3
PC2
PC1
PC0
S1
S7
S13
S20
S26
S30
BREAK
3
S2
S8
S14
S21
S27
S31
3
S3
S9
S15
S22
S28
S32
2
14
16
13
3
5
11
15
7
U10
A
B
C
D
E
F
G
DP
S6
A
B
C
D
E
F
G
DP
S5
S12
4
S4
S11
S18
L1L2L3
LTC-4727JR
S10
S17
S25
R7
C
VCC
1
R9
330
VCC
R8
4.7k
D4
1
C
R11
10
R10
Q1
BC327
7-segment test
2
10k RESISTOR SIP 9
2
3
4
5
6
7
8
9
TONE
PA0
PA1
PA2
PA3
PA4
PA5
PA6
6802 MICROPROCESSOR KIT
Document Number
<Doc>
Saturday, September 26, 2015
1
Sheet
2
J2
4
CON3
1
2
3
L1L2L3
LS1
VCC
SPEAKER
+5V
1
of
3
Designed by Wichit Sirichote, [email protected], (C) 2015
Date:
Size
B
Title
SPEAKER
10k RESISTOR SIP 9
PC0
2
PC1
3
PC2
4
PC3
5
PC4
6
PC5
7
8
9
S16
S24
S33
S29
S23
2
DIGIT4
8
D0
D1
D2
D3
D4
D5
D6
D7
PORT2
PORT1
PORT0
+5V
5
1
3
DIGIT3
6
DIGIT2
2
DIGIT1
1
DIGIT4
8
DIGIT3
6
DIGIT2
2
DIGIT1
1
Rev
1
D
C
B
A
10
+5V
1
D0
D1
D2
D3
D4
D5
D6
D7
R13
10K
A1
A0
3
VCC
LCD_E
2
3
4
5
6
7
8
9
11
1
20
A1
VCC
U14
1D
2D
3D
4D
5D
6D
7D
8D
LE
OE
VCC
74HC573
A0
4
1Q
2Q
3Q
4Q
5Q
6Q
7Q
8Q
+5V
19
18
17
16
15
14
13
12
D5
D6
LED
D7
D8
D9
3
1N5236A
D13
LED
D10
8-bit Binary display LED x8
VB1
3
D11
+5V
D12
14
7
13
8
6
2
10uF 10V
C12
C14
10uF
SUB-D 9, Male (cross cable)
5
9
4
8
3
7
2
6
1
+
5
D0
D1
D2
D3
D4
D5
D6
D7
GPIO1
R12
D7
D6
D5
D4
D3
D2
D1
D0
R/W
RS
+5V
VCC
+
D0
D1
D2
D3
D4
D5
D6
D7
RESET2
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
16x2 text LCD interface
JR1
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
CONN RECT 16
+5V
VCC
4
U15
V+
V-
T1OUT
T2OUT
R1IN
R2IN
MAX232A
C+
C1C2+
C2T1IN
T2IN
R1OUT
R2OUT
+5V
10uF
1
3
4
5
11
10
12
9
C19
100nF
C13
+
D
C
B
A
5
2
2
C15
10uF
2
RXD
TXD
Title
Size
B
6802 MICROPROCESSOR KIT
Document Number
<Doc>
Saturday, September 26, 2015
1
1
Sheet
3
of
3
Designed by Wichit Sirichote, [email protected], (C)2015
Date:
Rev
1
D
C
B
A
+
PARTS LIST
Semiconductors
U1
27C256, 32kB EPROM
U2
HM62256B, 32kB SRAM
U3
AT89C2051, 2kB Microcontroller
U4
GAL16V8D, PLD
U6
74HC164, shift register
U7
74LS14, hex inverter
U8
LM7805, voltage reguator
U10,U9 LTC-4727JR, common cathode LED
U11,U12,U14 74HC573, 8-bit Latch
U13 74HC541, tri-state buffer
U15 MAX232A, RS232 level converter
U16 6802 Motorola 8-bit Microprocessor
U17 CD4076B, D-FF
D2
TVS5V_SOD123
D3
1N4007, rectifier diode
D4
TONE, LED
D13 1N5236A, zener diode
Q1
BC327, PNP transistor
Q2
KIA7045, reset chip
Resistors (all resistors are 1/8W +/-5%)
R1 680
R2,R3,R5 1k
R8,R4 4.7k
R13,R6 10k
R11,R7 10k RESISTOR SIP 9
R9 330
R12,R10 10
Capacitors
C1 22uF electrolytic
C2,C13,C14,C15,C16,C17 10uF electrolytic
C3 10uF 16V electrolytic
C4 1000uF25V electrolytic
C5,C6,C7,C8,C9 0.1uF disc ceramic
C10,C11 0.1uF disc ceramic
C12 10uF 10V electrolytic
C19,C18 100nF disc ceramic
Additional parts
JJP1 HEADER 20X2
JR1 CONN RECT 16 text LCD connector
J1 DC Input
J2 CON3 3-pin header
LS1 SPEAKER
SW1 ESP switch
SW2 IRQ
SW3 RESET
SW4 user
S1,S2,S3,S4,S5,S6,S7,S8,
S9,S10,S11,S12,S13,S14,Tact switch
S15,S16,S17,S18,S19,S20,
S21,S22,S23,S24,S25,S26,
S27,S28,S29,S30,S31,S32,
S33
TP1,TP2,TP3 TEST POINT
TP4 +5V
TP5 GND
VB1 SUB-D 9, Male (cross cable)
Y1
4MHz Xtal
PCB double side plate through hole
LED cover Clear RED color acrylic plastic
Keyboard sticker printable SVG file
MONITOR PROGRAM LISTINGS
MON68.LST
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
0000
2/11/2558 17:06
;
;
;
;
;
MONITOR PROGRAM FOR 6802 MICROPROCESSOR KIT
(C) COPYRIGHT 2015 BY WICHIT SIRICHOTE
Source code was translated by tasm assembler with command
d:>tasm -68 mon68.asm mon68.hex
; 12 September 2015 fix 16-bit variable allocation
;
HIGH BYTE DISPLAY
;
LOW BYTE DISPLAY+1
; 13 September 2015 test single step with 74LS164
;
8th clock will make NMI low!
;
The number of clock must be 7 after the break signal
;
has been set. So the 8th clock will make NMI low
;
User instruction will be fetched and executed at the
;
Add key INS and DEL
; 14 September 2015 provide RAM vector for IRQ at location 00F8H
;
CPU will jump to 00F8H if IRQ was triggered and Interrupt
;
mask has been cleared.
; 16 September 2015 Testing single step with 4076
;
add 4-bit D-FF 4076 to provide 4-bit shifting
;
use with RTI 10 cycles to make NMI service
; 17 September 2015 Add register display, page zero display
; 18 September 2015 test software UART at 2400 Hz, found half bit 1207
;
or 2414Hz, % error = 0.6%
;
test receive hex file
; 19 September 2015 add LCD drivers to monitor program
;
begin test monitor code in RAM @4000h
; 20 September 2015 add Motorola S record for hex file download command
;
tested with tasm -68 -g2 led.asm
; 21 September 2015 fix s-record lodaing, check number of byte include
;
s-record loading was tested with tasm -g2 option
;
add key mute for beep on/off
;
prepare to backup the source code!
; 23 September 2015 add cold/warm boot setup
; 25 September 2015 add function copy block of memory and cold message
;
add hex dump function for displaying hex contents
;
on 2400 terminal
; 28 Spetember 2015 fix rep key bouncing! when pressed together with key
;
fix ASCII printing with key DUMP
; address of the I/O ports
GPIO1
PORT0
PORT1
PORT2
.EQU
.EQU
.EQU
.EQU
DIGIT
SEG7
KIN
.EQU 8002H
.EQU 8003H
.EQU 8001H
ONE
ZERO
.EQU 30H
.EQU 0BDH
BUSY
8000H
8001H
8002H
8003H
.EQU 80H
; below LCD's registers are mapped into memory space
command_write
data_write
.EQU 9000H
.EQU 9001H
Page 1 of 40
MON68.LST
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130
0131
0132
0133
0134
0135
0136
0137
0138
0139
0140
0141
0142
0143
0144
0145
0146
0147
0148
0149
0150
0151
0152
0000
0000
0000
0000
0000
0000
0000
0000
0000
0080
0080
0080
0080
0081
0082
0083
0084
0086
0088
0089
0089
008A
008C
0092
0093
0093
0093
0093
0094
0095
0096
0096
0098
0098
009A
009B
009C
009E
00A0
00A1
00A3
00A3
00A5
00A7
00A9
00A9
00AB
00AB
00AD
00AD
00AE
00AE
00B0
00B2
00B2
00B4
00B4
00B6
00C6
00C7
00C9
00CA
00CB
00CC
00CC
00CC
00CD
00CE
00CF
00D0
00D1
00D1
00D2
00D3
00D3
00D3
2/11/2558 17:06
command_read
data_read
.EQU 9002H
.EQU 9003H
; page zero register definition
; LOCATION $00 TO $7F ARE 128 BYTES FOR USER PROGRAM USE
.DSEG
.ORG 80H
; zero page memory definitions for monitor use
REG_E
.BLOCK 1
REG_D
.BLOCK 1
REG_B
.BLOCK 1
REG_C
.BLOCK 1
HL
.BLOCK 2
; 84H = L 85H = H
DE
.BLOCK 2
REG_A
.BLOCK 1
_ERROR
BCC
BUFFER
INVALID
.BLOCK
.BLOCK
.BLOCK
.BLOCK
1
2
6
1
; ERROR FLAG FOR INTEL HEX FILE DOWNLOADING
; BYTE CHECK SUM
; 8BH - 90H PAGE ZERO DISPLAY BUFFER
; INVALID KEY HAS BEEN PRESSED FLAG BIT
; 0 VALID
; 1 INVALID
KEY
.BLOCK 1
STATE
.BLOCK 1
ZERO_FLAG .BLOCK 1
; ZERO WHEN HEX KEY PRESSED FOR ADDRESS OR
DISPLAY .BLOCK 2
USER_PC
USER_A
USER_B
USER_IX
USER_SP
USER_P
SAVE_SP
; display address
.BLOCK 2
.BLOCK 1
.BLOCK 1
.BLOCK 2
.BLOCK 2
.BLOCK 1
.BLOCK 2
; FOR SAVING CURRENT PC, ON RESET, IT SETS TO
; USER STACK POINTER
; PROGRAM STATUS REGISTER
; SAVE SYSTEM STACK
START_ADDRESS .BLOCK 2
DESTINATION .BLOCK 2
OFFSET_BYTE .BLOCK 2
; FOR OFFSET BYTE CALCULATION
; OFFSET BYTE = DESTINATION - START_ADDRESS
END_ADDRESS .BLOCK 2
COLD
; FOR COPY MEMORY FUNCTION
.BLOCK 2
; COLD BOOT OR WARM BOOT
REPDELAY .BLOCK 1
DEBUG
TEMP16
.BLOCK 2
.BLOCK 2
IX2
.BLOCK 2
; FOR PROGRAM DEBUGGING
; REGISTER 16 BITS
OFFSET
.BLOCK 2
BIN2SEG .BLOCK 16
BEEP_FREQ .BLOCK 1
BEEP_PERIOD .BLOCK 2
DEMO_NO
.BLOCK 1
MUTE
.BLOCK 1
BIT1_COUNTER .BLOCK 1
;
;
;
;
;
;
;
SEC100
SEC
MIN
HOUR
RUNSTOP
.BLOCK
.BLOCK
.BLOCK
.BLOCK
.BLOCK
; VARIABLES FOR CLOCK PROGRAM
K
J
.BLOCK 1
.BLOCK 1
1
1
1
1
1
FOR X INDEXT REGISTER USE
TABLE FOR 4-BIT BINARY TO 7-SEGMENT PATTERN
STORE BEEP FREQUENCY
STORE BEEP PERIOD LOAD WITH IX
FOR DEMO 0-9
TOGGLE MUTE FOR BEEP ON/OFF 0=BEEP ON
COUNTER FOR BIT 1 TEST
; GENERAL PURPOSE REGISTERS
Page 2 of 40
MON68.LST
0153
0154
0155
0156
0157
0158
0159
0160
0161
0162
0163
0164
0165
0166
0167
0168
0169
0170
0171
0172
0173
0174
0175
0176
0177
0178
0179
0180
0181
0182
0183
0184
0185
0186
0187
0188
0189
0190
0191
0192
0193
0194
0195
0196
0197
0198
0199
0200
0201
0202
0203
0204
0205
0206
0207
0208
0209
0210
0211
0212
0213
0214
0215
0216
0217
0218
0219
0220
0221
0222
0223
0224
0225
0226
0227
0228
00D3
00D3
00D3
C000
C000
C000
C000
C000
C000
C002
C005
C007
C00A
C00A
C00A
C00A
C00A
C00D
C00E
C010
C010
C010
C013
C013
C016
C018
C018
C018
C01A
C01C
C01E
C020
C020
C020
C020
C022
C024
C026
C028
C02A
C02C
C02E
C030
C030
C030
C032
C034
C036
C036
C038
C03A
C03C
C03E
C040
C042
C042
C043
C045
C045
C045
C047
C049
C04B
C04D
C04D
C04D
C050
C052
C052
C054
C056
C056
C058
C05A
C05A
C05C
2/11/2558 17:06
.CSEG
.ORG 0C000H
;
86
B7
86
B7
BF
80 02
00
80 00
START
; START ADDRESS FOR ROM
.ORG 4000H
LDAA
STAA
LDAA
STAA
; TEST IN RAM
#$BF
PORT1
#0
GPIO1
; DISABLE NMI BREAK SIGNAL
; TEST DISPLAY
; power up delay
CE 01 2C
09
26 FD
LDX #300
POWER_UP_DELAY DEX
BNE POWER_UP_DELAY
8E 7F FF
LDS #$7FFF
CE 7F 00
DF 9E
LDX #$7F00
STX USER_SP
86
97
97
97
00
8C
8D
92
; SYSTEM STACK
; STORE USER STACK
LDAA #0
STAA BUFFER
STAA BUFFER+1
STAA INVALID
; CLEAR INVALID FLAG
; INSERT 6502 TEXT
86
97
86
97
86
97
86
97
AF
91
BF
90
BD
8F
9B
8E
LDAA #0AFH
STAA BUFFER+5
LDAA #0BFH
STAA BUFFER+4
LDAA #0BDH
STAA BUFFER+3
LDAA #9BH
STAA BUFFER+2
86 00
97 94
97 95
LDAA #0
86
97
97
86
97
97
LDAA #02
STAA DISPLAY
STAA USER_PC
LDAA #0
STAA DISPLAY+1
STAA USER_PC+1
02
96
98
00
97
99
07
97 A0
96
97
96
97
96
84
97
85
STAA STATE
STAA ZERO_FLAG
; INITIAL STATE
TPA
STAA USER_P
LDAA DISPLAY
STAA HL
LDAA DISPLAY+1
STAA HL+1
CE 00 35
97 C7
LDX #35H
STAA BEEP_PERIOD
86 52
97 C6
LDAA #52H
STAA BEEP_FREQ
86 00
97 C9
LDAA #0
STAA DEMO_NO
DE AB
8C AA 55
LDX COLD
CPX #0AA55H
Page 3 of 40
MON68.LST
0229
0230
0231
0232
0233
0234
0235
0236
0237
0238
0239
0240
0241
0242
0243
0244
0245
0246
0247
0248
0249
0250
0251
0252
0253
0254
0255
0256
0257
0258
0259
0260
0261
0262
0263
0264
0265
0266
0267
0268
0269
0270
0271
0272
0273
0274
0275
0276
0277
0278
0279
0280
0281
0282
0283
0284
0285
0286
0287
0288
0289
0290
0291
0292
0293
0294
0295
0296
0297
0298
0299
0300
0301
0302
0303
0304
C05F
C061
C061
C061
C061
C064
C066
C066
C068
C06A
C06A
C06C
C06F
C06F
C06F
C072
C072
C075
C075
C075
C076
C079
C079
C079
C079
C079
C079
C079
C079
C079
C079
C079
C07C
C07C
C07C
C07C
C07C
C07C
C07C
C07E
C07F
C081
C082
C082
C082
C082
C084
C085
C087
C088
C088
C088
C088
C088
C08A
C08A
C08C
C08F
C091
C091
C093
C095
C095
C097
C099
C09B
C09B
C09D
C0A0
C0A0
C0A2
C0A2
C0A2
C0A4
C0A7
C0A9
2/11/2558 17:06
27 18
BEQ SKIP_COLD
; COLD START
CE AA 55
DF AB
LDX #0AA55H
STX COLD
86 00
97 CA
LDAA #0
STAA MUTE
86 FF
B7 80 00
LDAA #0FFH
STAA GPIO1
BD C9 AD
JSR BEEP
BD CB 43
JSR DISPLAY_START_MSG
4F
B7 80 00
CLRA
STAA GPIO1
; BEEP IS ON
SKIP_COLD
;
;
7E C9 A2
LDX #TEXT3
JSR PSTR
; PRINT TEXT3 TESTING 2400 TERMINAL
JMP MAIN
;----------------------- 2400 BIT/S SOFTWARE UART --------------------------; one bit delay for 2400 bit/s UART
C6 3D
5A
26 FD
39
BIT_DELAY LDAB #61
LOOP
DECB
BNE LOOP
RTS
; 1207 TESTED WITH 55H @1MHz (4MHz xtal)
; 1.5 bit delay
C6 5C
5A
26 FD
39
BIT1_5_DELAY LDAB #92
LOOP1
DECB
BNE LOOP1
RTS
; DELAY 1.5 BIT
; SEND ASCII LETTER TO TERMINAL
; ENTRY: A
97 80
SEND_BYTE: STAA REG_E
; SAVE ACCUMULATOR
86 3F
B7 80 02
8D EB
LDAA #3FH
; start bit is zero
STAA PORT1
BSR BIT_DELAY
; delay one bit
86 08
97 81
LDAA #8
STAA REG_D
96 80
84 01
27 07
86 BF
B7 80 02
20 07
86 3F
B7 80 02
20 00
; 8-data bit wil be sent
CHK_BIT:
LDAA REG_E
ANDA #1
BEQ SEND_ZERO
LDAA #0BFH
STAA PORT1
BRA NEXT_BIT
SEND_ZERO: LDAA #3FH
STAA PORT1
BRA NEXT_BIT
Page 4 of 40
MON68.LST
0305
0306
0307
0308
0309
0310
0311
0312
0313
0314
0315
0316
0317
0318
0319
0320
0321
0322
0323
0324
0325
0326
0327
0328
0329
0330
0331
0332
0333
0334
0335
0336
0337
0338
0339
0340
0341
0342
0343
0344
0345
0346
0347
0348
0349
0350
0351
0352
0353
0354
0355
0356
0357
0358
0359
0360
0361
0362
0363
0364
0365
0366
0367
0368
0369
0370
0371
0372
0373
0374
0375
0376
0377
0378
0379
0380
C0A9
C0AB
C0AB
C0AE
C0B1
C0B3
C0B3
C0B5
C0B8
C0BA
C0BA
C0BB
C0BB
C0BB
C0BB
C0BB
C0BB
C0BB
C0BE
C0C0
C0C2
C0C2
C0C4
C0C4
C0C6
C0C8
C0CA
C0CC
C0CC
C0CC
C0CC
C0CF
C0D1
C0D3
C0D3
C0D5
C0D7
C0D9
C0DB
C0DB
C0DD
C0DF
C0E1
C0E3
C0E3
C0E5
C0E5
C0E8
C0E8
C0EB
C0ED
C0ED
C0EF
C0EF
C0F1
C0F1
C0F2
C0F2
C0F2
C0F2
C0F2
C0F2
C0F2
C0F2
C0F2
C0F2
C0F2
C0F4
C0F7
C0F9
C0FC
C0FD
C0FD
C0FD
C0FD
C0FD
2/11/2558 17:06
8D D1
NEXT_BIT:
BSR BIT_DELAY
74 00 80
7A 00 81
26 E2
LSR REG_E
DEC REG_D
BNE CHK_BIT
86 BF
B7 80 02
8D C2
LDAA #0BFH
STAA PORT1
BSR BIT_DELAY
39
RTS
; RECEIVE BYTE FROM 2400 BIT/S TERMINAL
; EXIT: A
B6 80 01
84 80
26 F9
CIN
LDAA PORT0
ANDA #80H
BNE CIN
8D BE
86
97
86
97
07
81
00
80
B6 80 01
84 80
26 08
BSR BIT1_5_DELAY
LDAA
STAA
LDAA
STAA
#7
REG_D
#0
REG_E
CHK_BIT_RX
LDAA PORT0
ANDA #80H
BNE BIT_IS_ONE
96
84
97
20
80
7F
80
08
LDAA REG_E
ANDA #7FH
STAA REG_E
BRA NEXT_BIT_RX
96
8A
97
20
80
80
80
00
BIT_IS_ONE LDAA REG_E
ORAA #80H
STAA REG_E
BRA NEXT_BIT_RX
8D 97
NEXT_BIT_RX
BSR BIT_DELAY
74 00 80
LSR REG_E
7A 00 81
26 DF
DEC REG_D
BNE CHK_BIT_RX
8D 8D
BSR BIT_DELAY
96 80
LDAA REG_E
39
RTS
CR
LF
EOS
; CENTER OF STOP BIT
.EQU 0DH
.EQU 0AH
.EQU 0
;NEW LINE
; PRINT CR, LF
86
BD
86
BD
39
0D
C0 88
0A
C0 88
NEW_LINE
LDAA #0DH
JSR SEND_BYTE
LDAA #0AH
JSR SEND_BYTE
RTS
; WRITE NIBBLE TO TERMINAL
84 0F
OUT1X
ANDA #0FH
Page 5 of 40
MON68.LST
0381
0382
0383
0384
0385
0386
0387
0388
0389
0390
0391
0392
0393
0394
0395
0396
0397
0398
0399
0400
0401
0402
0403
0404
0405
0406
0407
0408
0409
0410
0411
0412
0413
0414
0415
0416
0417
0418
0419
0420
0421
0422
0423
0424
0425
0426
0427
0428
0429
0430
0431
0432
0433
0434
0435
0436
0437
0438
0439
0440
0441
0442
0443
0444
0445
0446
0447
0448
0449
0450
0451
0452
0453
0454
0455
0456
C0FF
C0FF
C101
C103
C105
C107
C10A
C10B
C10B
C10B
C10C
C10C
C10D
C10E
C10F
C110
C110
C110
C110
C113
C114
C117
C118
C118
C118
C118
C11A
C11C
C11C
C11C
C11F
C121
C123
C123
C125
C127
C127
C129
C12C
C12E
C131
C131
C133
C136
C138
C13B
C13B
C13B
C13D
C13D
C13F
C13F
C142
C142
C144
C147
C147
C149
C14A
C14C
C14C
C14F
C14F
C151
C151
C151
C151
C151
C151
C153
C155
C155
C157
C157
C159
C159
2/11/2558 17:06
8B
81
2D
8B
BD
39
30
3A
02
07
C0 88
36
OUT1X1
RTS
OUT2X
ADDA #30H
CMPA #3AH
BLT OUT1X1
ADDA #7
JSR SEND_BYTE
PSHA
44
44
44
44
LSRA
LSRA
LSRA
LSRA
;
BD C0 FD
32
BD C0 FD
39
STAA GPIO1
JSR OUT1X
PULA
JSR OUT1X
RTS
; PRINT LINE OF MEMORY POINTED TO HL
86 10
97 D2
PRINT_LINE
LDAA #16
STAA J
PRINT_LINE1
BD C0 F2
86 10
97 83
JSR NEW_LINE
LDAA #16
STAA REG_C
DE 84
DF B0
LDX HL
STX TEMP16
; FOR ASCII PRINTING
96
BD
96
BD
84
C1 0B
85
C1 0B
LDAA HL
JSR OUT2X
LDAA HL+1
JSR OUT2X
86
BD
86
BD
3A
C0 88
20
C0 88
LDAA #':'
JSR SEND_BYTE
LDAA #' '
JSR SEND_BYTE
DE 84
PRINT_LINE2
A6 00
LDX HL
LDAA 0,X
BD C1 0B
JSR OUT2X
86 20
BD C0 88
LDAA #' '
JSR SEND_BYTE
DE 84
08
DF 84
7A 00 83
26 EA
LDX HL
INX
STX HL
DEC REG_C
BNE PRINT_LINE2
;----------------------------------; PRINT ASCII CODE
86 10
97 83
LDAA #16
STAA REG_C
PRINT_IT1
DE B0
LDX TEMP16
A6 00
LDAA 0,X
81 20
CMPA #20H
Page 6 of 40
MON68.LST
0457
0458
0459
0460
0461
0462
0463
0464
0465
0466
0467
0468
0469
0470
0471
0472
0473
0474
0475
0476
0477
0478
0479
0480
0481
0482
0483
0484
0485
0486
0487
0488
0489
0490
0491
0492
0493
0494
0495
0496
0497
0498
0499
0500
0501
0502
0503
0504
0505
0506
0507
0508
0509
0510
0511
0512
0513
0514
0515
0516
0517
0518
0519
0520
0521
0522
0523
0524
0525
0526
0527
0528
0529
0530
0531
0532
C15B
C15D
C15D
C15F
C15F
C162
C162
C164
C165
C167
C167
C16A
C16C
C16C
C16C
C16C
C16F
C171
C171
C171
C172
C172
C172
C174
C176
C176
C176
C178
C17A
C17A
C17D
C17D
C180
C180
C182
C184
C187
C187
C188
C188
C188
C188
C188
C188
C188
C188
C188
C18A
C18D
C190
C193
C195
C195
C198
C199
C19B
C19C
C19C
C19C
C19C
C19C
C19C
C19C
C19C
C19C
C19C
C19F
C19F
C1A1
C1A1
C1A3
C1A5
C1A5
C1A7
C1A9
C1AB
2/11/2558 17:06
2C 02
BGE
86 2E
LDAA #'.'
BD C0 88
PRINT_IT
PRINT_IT
JSR SEND_BYTE
DE B0
08
DF B0
LDX TEMP16
INX
STX TEMP16
7A 00 83
26 E9
DEC REG_C
BNE PRINT_IT1
;---------------------------------
7A 00 D2
26 AB
DEC J
BNE PRINT_LINE1
39
RTS
86 FF
97 CA
KEY_DUMP
LDAA #$FF
STAA MUTE
DE 96
DF 84
LDX DISPLAY
STX HL
BD C1 18
JSR PRINT_LINE
BD C0 F2
JSR NEW_LINE
DE 84
DF 96
BD C4 06
LDX HL
STX DISPLAY
JSR STILL_DATA
39
RTS
;TURN BEEP OFF
;------------------------------SOFTWARE UART -----------------------96
B7
BD
7C
20
00
80 00
C1 95
00 00
F3
CE 27 10
09
26 FD
39
LOOP2
LDAA $0
STAA GPIO1
JSR DELAY
INC $0
BRA LOOP2
DELAY
DELAY1
LDX #10000
DEX
BNE DELAY1
RTS
; CONVERT LOW NIBBLE IN ACCUMULATOR TO 7-SEGMENT PATTERN
; ENTRY: A
; EXIT: A
NIBBLE_7SEG
CE CB FB
LDX
#SEGTAB
DF B0
STX
TEMP16
9B B1
97 B1
ADDA TEMP16+1
STAA TEMP16+1
86 00
99 B0
97 B0
LDAA #0
ADCA TEMP16
STAA TEMP16
Page 7 of 40
MON68.LST
0533
0534
0535
0536
0537
0538
0539
0540
0541
0542
0543
0544
0545
0546
0547
0548
0549
0550
0551
0552
0553
0554
0555
0556
0557
0558
0559
0560
0561
0562
0563
0564
0565
0566
0567
0568
0569
0570
0571
0572
0573
0574
0575
0576
0577
0578
0579
0580
0581
0582
0583
0584
0585
0586
0587
0588
0589
0590
0591
0592
0593
0594
0595
0596
0597
0598
0599
0600
0601
0602
0603
0604
0605
0606
0607
0608
C1AB
C1AD
C1AD
C1AF
C1AF
C1B0
C1B0
C1B0
C1B0
C1B0
C1B0
C1B1
C1B1
C1B3
C1B6
C1B8
C1B8
C1B9
C1B9
C1BA
C1BB
C1BC
C1BD
C1BD
C1C0
C1C2
C1C2
C1C3
C1C3
C1C3
C1C3
C1C3
C1C3
C1C4
C1C7
C1C9
C1CB
C1CD
C1CF
C1D0
C1D1
C1D1
C1D1
C1D1
C1D1
C1D1
C1D1
C1D3
C1D6
C1D8
C1DA
C1DC
C1DE
C1E0
C1E3
C1E5
C1E7
C1E9
C1EB
C1EC
C1EC
C1EC
C1EC
C1EC
C1EC
C1EC
C1EE
C1F0
C1F2
C1F4
C1F6
C1F6
C1F7
C1F7
C1F7
C1F7
2/11/2558 17:06
DE B0
LDX TEMP16
A6 00
LDAA
39
RTS
0,X
; GET 7-SEGMENT PATTERN
; CONVERT BYTE TO 7-SEGMENT PATTERN
; ENTRY: A
; EXIT: DE
36
BYTE_7SEG
84 0F
BD C1 9C
97 86
PSHA
ANDA #0FH
JSR NIBBLE_7SEG
STAA DE
32
PULA
44
44
44
44
LSRA
LSRA
LSRA
LSRA
BD C1 9C
97 87
JSR NIBBLE_7SEG
STAA DE+1
39
RTS
; CONVERT BYTE TO 7-SEGMENT PATTERN AND SAVE TO DISPLAY BUFFER DATA FIELD
; ENTRY: A
36
BD
96
97
96
97
32
39
C1 B0
86
8C
87
8D
DATA_DISPLAY PSHA
; SAVE ACCUMULATOR
JSR BYTE_7SEG
LDAA DE
STAA BUFFER
LDAA DE+1
STAA BUFFER+1
PULA
RTS
; CONVERT 16-BIT ADDRESS IN HL AND SAVE IT TO ADDRESS FILED DISPLAY BUFFER
; ENTRY: HL
ADDRESS_DISPLAY
96
BD
96
97
96
97
96
BD
96
97
96
97
39
84
C1 B0
86
90
87
91
85
C1 B0
86
8E
87
8F
LDAA HL
JSR BYTE_7SEG
LDAA DE
STAA BUFFER+4
LDAA DE+1
STAA BUFFER+5
LDAA HL+1
JSR BYTE_7SEG
LDAA DE
STAA BUFFER+2
LDAA DE+1
STAA BUFFER+3
RTS
; CONVERT ASCII TO HEX
; ENTRY: A
TO_HEX
80
81
2D
84
80
39
30
10
04
DF
07
SUBA #30H
CMPA #10H
BLT ZERO_NINE
ANDA #11011111B
SUBA #7
ZERO_NINE
RTS
; CONVERT TWO ASCII LETTERS
; EXIT: A
Page 8 of 40
TO SINGLE BYTE
MON68.LST
0609
0610
0611
0612
0613
0614
0615
0616
0617
0618
0619
0620
0621
0622
0623
0624
0625
0626
0627
0628
0629
0630
0631
0632
0633
0634
0635
0636
0637
0638
0639
0640
0641
0642
0643
0644
0645
0646
0647
0648
0649
0650
0651
0652
0653
0654
0655
0656
0657
0658
0659
0660
0661
0662
0663
0664
0665
0666
0667
0668
0669
0670
0671
0672
0673
0674
0675
0676
0677
0678
0679
0680
0681
0682
0683
0684
C1F7
C1FA
C1FD
C1FE
C1FF
C200
C201
C201
C204
C204
C206
C206
C209
C20C
C20E
C20E
C20F
C20F
C20F
C211
C213
C214
C214
C214
C214
C214
C214
C214
C214
C214
C216
C218
C218
C21B
C21D
C21F
C21F
C221
C223
C223
C226
C226
C226
C226
C226
C228
C22A
C22A
C22D
C22F
C22F
C232
C232
C235
C237
C237
C23A
C23A
C23D
C23F
C23F
C242
C242
C245
C245
C247
C247
C249
C249
C24C
C24E
C250
C250
C253
C253
C255
2/11/2558 17:06
BD C0 BB
BD C1 EC
48
48
48
48
GET_HEX
JSR CIN
JSR TO_HEX
ASLA
ASLA
ASLA
ASLA
B7 80 00
STAA GPIO1
97 88
STAA REG_A
BD C0 BB
BD C1 EC
9A 88
JSR CIN
JSR TO_HEX
ORAA REG_A
39
RTS
9B 8A
97 8A
39
ADD_BCC
ADDA BCC
STAA BCC
RTS
; get hex file for both Intel and Motorola s record automatically
;
; GET_RECORD READS INTEL HEX FILE AND SAVE TO MEMORY
86 00
97 89
GET_RECORD LDAA #0
STAA _ERROR
BD C0 BB
81 3A
27 07
GET_RECORD1 JSR CIN
CMPA #':'
BEQ GET_RECORD2
81 53
26 F5
CMPA #'S'
BNE GET_RECORD1
7E C2 92
JMP GET_S_RECORD2
; if it was Motorola s record
GET_RECORD2
86 00
97 8A
LDAA #0
STAA BCC
BD C1 F7
97 83
JSR GET_HEX
STAA REG_C
BD C2 0F
JSR ADD_BCC
BD C1 F7
97 84
JSR GET_HEX
STAA HL
BD C2 0F
JSR ADD_BCC
BD C1 F7
97 85
JSR GET_HEX
STAA HL+1
BD C2 0F
JSR ADD_BCC
BD C1 F7
JSR GET_HEX
; GET NUMBER OF BYTE
81 00
CMPA #0
27 14
BEQ DATA_RECORD
BD C0 BB
81 0D
26 F9
; GET LOAD ADDRESS
WAIT_CR
JSR CIN
CMPA #0DH
BNE WAIT_CR
B7 80 00
STAA GPIO1
96 89
81 01
LDAA _ERROR
CMPA #1
Page 9 of 40
MON68.LST
0685
0686
0687
0688
0689
0690
0691
0692
0693
0694
0695
0696
0697
0698
0699
0700
0701
0702
0703
0704
0705
0706
0707
0708
0709
0710
0711
0712
0713
0714
0715
0716
0717
0718
0719
0720
0721
0722
0723
0724
0725
0726
0727
0728
0729
0730
0731
0732
0733
0734
0735
0736
0737
0738
0739
0740
0741
0742
0743
0744
0745
0746
0747
0748
0749
0750
0751
0752
0753
0754
0755
0756
0757
0758
0759
0760
C257
C259
C259
C259
C259
C259
C25C
C25C
C25C
C25D
C25D
C25D
C25D
C260
C262
C264
C264
C267
C267
C26A
C26A
C26B
C26D
C26D
C270
C272
C272
C274
C276
C277
C277
C279
C279
C279
C27C
C27C
C27E
C280
C280
C282
C284
C284
C284
C284
C284
C287
C287
C287
C287
C287
C287
C287
C287
C287
C287
C287
C287
C287
C287
C287
C289
C28B
C28B
C28B
C28B
C28B
C28B
C28E
C290
C292
C292
C292
C292
C295
C297
C299
2/11/2558 17:06
26 03
BNE NOERROR
; SHOW ERROR ON LED
; JSR OUT_OFF_RANGE
B7 80 00
STAA GPIO1
NOERROR
39
RTS
DATA_RECORD
BD C1 F7
DE 84
A7 00
JSR GET_HEX
LDX HL
STAA 0,X
BD C2 0F
JSR ADD_BCC
B7 80 00
STAA GPIO1
08
DF 84
; WRITE TO MEMORY
INX
STX HL
7A 00 83
26 EB
DEC REG_C
BNE DATA_RECORD ; UNTIL C=0
96 8A
88 FF
4C
LDAA BCC
EORA #0FFH
INCA
; ONE'S COMPLEMENT
; TWO'S COMPLEMENT
97 8A
STAA BCC
BD C1 F7
JSR GET_HEX
91 8A
27 04
CMPA BCC
BEQ SKIP11
86 01
97 89
LDAA #1
STAA _ERROR
; GET BYTE CHECK SUM
; COMPARE WITH BYTE CHECK SUM
; ERROR FLAG =1
SKIP11
7E C2 18
JMP GET_RECORD1
; NEXT LINE
; Motorola s record downloading subrouitne
;
;
;
;
;
;
;
86 00
97 89
S1 14 0200 8601B780008D034920F8CE07D00926FD39 30
S1 0A 0218 CE13880926FD39 0D
S9 03 0000 FC
14 is pair count for remaining pair
GET_S_RECORD LDAA #0
STAA _ERROR
GET_S_RECORD1
BD C0 BB
81 53
26 F9
JSR CIN
CMPA #'S'
BNE GET_S_RECORD1
GET_S_RECORD2
BD C0 BB
81 31
27 06
JSR CIN
CMPA #'1'
BEQ GET_S1
Page 10 of 40
MON68.LST
0761
0762
0763
0764
0765
0766
0767
0768
0769
0770
0771
0772
0773
0774
0775
0776
0777
0778
0779
0780
0781
0782
0783
0784
0785
0786
0787
0788
0789
0790
0791
0792
0793
0794
0795
0796
0797
0798
0799
0800
0801
0802
0803
0804
0805
0806
0807
0808
0809
0810
0811
0812
0813
0814
0815
0816
0817
0818
0819
0820
0821
0822
0823
0824
0825
0826
0827
0828
0829
0830
0831
0832
0833
0834
0835
0836
C299
C29B
C29D
C29D
C29F
C29F
C29F
C29F
C2A1
C2A3
C2A3
C2A6
C2A8
C2A8
C2AB
C2AB
C2AE
C2B0
C2B0
C2B3
C2B3
C2B6
C2B6
C2B9
C2BB
C2BB
C2BE
C2BE
C2C1
C2C1
C2C4
C2C4
C2C6
C2C6
C2C6
C2C6
C2C9
C2CB
C2CD
C2CD
C2D0
C2D0
C2D2
C2D4
C2D6
C2D6
C2D6
C2D6
C2D6
C2D9
C2D9
C2D9
C2DA
C2DA
C2DA
C2DA
C2DA
C2DD
C2DF
C2E1
C2E1
C2E4
C2E4
C2E7
C2E7
C2E8
C2EA
C2EA
C2ED
C2EF
C2EF
C2F1
C2F3
C2F5
C2F5
C2F5
2/11/2558 17:06
81 39
27 29
CMPA #'9'
BEQ END_OF_RECORD
20 EC
BRA GET_S_RECORD1
GET_S1
86 00
97 8A
LDAA #0
STAA BCC
BD C1 F7
97 83
JSR GET_HEX
STAA REG_C
BD C2 0F
JSR ADD_BCC
BD C1 F7
97 84
JSR GET_HEX
STAA HL
7A 00 83
DEC REG_C
BD C2 0F
JSR ADD_BCC
BD C1 F7
97 85
JSR GET_HEX
STAA HL+1
7A 00 83
DEC REG_C
BD C2 0F
; GET NUMBER OF pairs
; GET LOAD ADDRESS
JSR ADD_BCC
7A 00 83
DEC REG_C
; BYTE COUNT-1 FOR BCC
20 14
BRA DATA_S_RECORD
END_OF_RECORD
BD C0 BB
81 0D
26 F9
JSR CIN
CMPA #0DH
; END OF LINE 0D,0A
BNE END_OF_RECORD
B7 80 00
STAA GPIO1
96 89
81 01
26 03
LDAA _ERROR
CMPA #1
BNE NOERROR2
; SHOW ERROR ON LED
; JSR OUT_OFF_RANGE
B7 80 00
STAA GPIO1
NOERROR2
39
RTS
DATA_S_RECORD
BD C1 F7
DE 84
A7 00
JSR GET_HEX
LDX HL
STAA 0,X
BD C2 0F
JSR ADD_BCC
B7 80 00
STAA GPIO1
08
DF 84
; WRITE TO MEMORY
INX
STX HL
7A 00 83
26 EB
DEC REG_C
BNE DATA_S_RECORD ; UNTIL C=0
96 8A
88 FF
97 8A
LDAA BCC
EORA #0FFH
STAA BCC
BD C1 F7
JSR GET_HEX
; ONE'S COMPLEMENT
; GET BYTE CHECK SUM
Page 11 of 40
MON68.LST
0837
0838
0839
0840
0841
0842
0843
0844
0845
0846
0847
0848
0849
0850
0851
0852
0853
0854
0855
0856
0857
0858
0859
0860
0861
0862
0863
0864
0865
0866
0867
0868
0869
0870
0871
0872
0873
0874
0875
0876
0877
0878
0879
0880
0881
0882
0883
0884
0885
0886
0887
0888
0889
0890
0891
0892
0893
0894
0895
0896
0897
0898
0899
0900
0901
0902
0903
0904
0905
0906
0907
0908
0909
0910
0911
0912
C2F8
C2F8
C2FA
C2FC
C2FC
C2FE
C300
C300
C300
C300
C300
C303
C303
C303
C303
C303
C303
C303
C303
C303
C303
C303
C303
C303
C303
C303
C303
C303
C303
C303
C303
C303
C303
C303
C303
C303
C303
C303
C303
C303
C303
C303
C303
C303
C303
C303
C303
C303
C303
C303
C303
C303
C303
C303
C303
C303
C303
C303
C305
C307
C307
C307
C307
C309
C30B
C30B
C30D
C30F
C30F
C311
C314
C314
C316
C318
C31B
C31B
2/11/2558 17:06
91 8A
27 04
86 01
97 89
CMPA BCC
BEQ SKIP21
LDAA #1
STAA _ERROR
; COMPARE WITH BYTE CHECK SUM
; ERROR FLAG =1
SKIP21
7E C2 8B
JMP GET_S_RECORD1
; NEXT LINE
;****************************************************************************
;
; EXECUTE FUNCTIONS OR HEX KEY ENTERED
; CHECK HEX KEY OR FUNCTIONS KEY
; ENTRY: A
81 10
2C 56
KEYEXE
CMPA #10H
BGE FUNCTION_KEY
;HHHHHHHHHHHHHHH
KEY HEX ENTERED HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
97 83
96 94
STAA REG_C
LDAA STATE
81 01
26 05
CMPA #1
BNE CHK_STATE2
96 83
7E C7 15
; SAVE HEX KEY
LDAA REG_C
JMP HEX_ADDR
81 02
26 03
7E C7 4B
CHK_STATE2 CMPA #2
BNE CHK_STATE3
JMP HEX_DATA
81 03
CHK_STATE3 CMPA #3
Page 12 of 40
MON68.LST
0913
0914
0915
0916
0917
0918
0919
0920
0921
0922
0923
0924
0925
0926
0927
0928
0929
0930
0931
0932
0933
0934
0935
0936
0937
0938
0939
0940
0941
0942
0943
0944
0945
0946
0947
0948
0949
0950
0951
0952
0953
0954
0955
0956
0957
0958
0959
0960
0961
0962
0963
0964
0965
0966
0967
0968
0969
0970
0971
0972
0973
0974
0975
0976
0977
0978
0979
0980
0981
0982
0983
0984
0985
0986
0987
0988
C31D
C31F
C322
C322
C324
C326
C329
C329
C32B
C32D
C330
C330
C332
C334
C337
C337
C339
C33B
C33E
C33E
C340
C342
C345
C345
C347
C349
C34C
C34C
C34E
C350
C353
C353
C353
C353
C353
C353
C355
C358
C35A
C35C
C35C
C35C
C35C
C35C
C35C
C35C
C35C
C35C
C35D
C35D
C35D
C35D
C35D
C35D
C35D
C35D
C35D
C35D
C35D
C35D
C35D
C35D
C35D
C35D
C35D
C35D
C35D
C35D
C35D
C35D
C35D
C35D
C35D
C35D
C35F
C361
2/11/2558 17:06
26 03
7E C7 6B
BNE CHK_STATE5
JMP HEX_REG
81 05
26 03
7E C8 9C
CHK_STATE5 CMPA #5
BNE CHK_STATE6
JMP HEX_REL
81 06
26 03
7E C8 A8
CHK_STATE6 CMPA #6
BNE CHK_STATE7
JMP HEX_REL6
81 07
26 03
7E C8 D8
CHK_STATE7 CMPA #7
BNE CHK_STATE8
JMP HEX_SEND_FILE
81 08
26 03
7E C8 D9
CHK_STATE8
81 1E
26 03
7E C8 B4
CHK_STATE9
81 1F
26 03
7E C8 C0
CHK_STATE10 CMPA #31
BNE CHK_STATE11
JMP HEX_COPY32
81 20
26 03
7E C8 CC
CHK_STATE11 CMPA #32
BNE CHK_STATE12
JMP HEX_COPY33
CMPA #8
BNE CHK_STATE9
JMP HEX_SEND_FILE2
CMPA #30
BNE CHK_STATE10
JMP HEX_COPY31
CHK_STATE12
96
B7
86
97
83
80 00
01
92
LDAA REG_C
STAA GPIO1
LDAA #1
STAA INVALID
; INVALID KEY PRESSED
; HEX KEY WAS PRESSED
39
RTS
;FFFFFFFFFFFFFFFFFFFFFF FUNCTION KEY FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FUNCTION_KEY
81 19
26 03
7E C3 CE
CMPA #19H
BNE CHK_FUNC1
JMP KEY_ADDR
; KEY ADDR
Page 13 of 40
MON68.LST
0989
0990
0991
0992
0993
0994
0995
0996
0997
0998
0999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
C364
C364
C366
C368
C36B
C36B
C36B
C36B
C36D
C36F
C372
C372
C374
C376
C379
C379
C37B
C37D
C380
C380
C382
C384
C387
C387
C389
C38B
C38E
C38E
C390
C392
C395
C395
C397
C399
C39C
C39C
C39E
C3A0
C3A3
C3A3
C3A3
C3A5
C3A7
C3AA
C3AA
C3AC
C3AE
C3B1
C3B1
C3B3
C3B5
C3B8
C3B8
C3B8
C3BA
C3BC
C3BF
C3BF
C3C1
C3C3
C3C6
C3C6
C3C8
C3CA
C3CD
C3CD
C3CD
C3CD
C3CD
C3CE
C3CE
C3CE
C3CE
C3D0
C3D2
C3D2
2/11/2558 17:06
81 14
26 03
7E C3 FE
CHK_FUNC1 CMPA #14H
; KEY DATA
BNE CHK_FUNC2
JMP KEY_DATA
81 10
26 03
7E C4 70
CHK_FUNC2 CMPA #10H
; KEY +
BNE CHK_FUNC3
JMP KEY_INC
81 11
26 03
7E C5 0A
CHK_FUNC3 CMPA #11H
; KEY BNE CHK_FUNC4
JMP KEY_DEC
81 18
26 03
7E C4 41
CHK_FUNC4
81 1B
26 03
7E C4 55
CHK_FUNC5
81 12
26 03
7E C5 33
CHK_FUNC6
81 1D
26 03
7E C6 79
CHK_FUNC7
81 1F
26 03
7E C6 8D
CHK_FUNC8
81 13
26 03
7E C6 36
CHK_FUNC9 CMPA #13H
BNE CHK_FUNC10
JMP KEY_STEP
81 16
26 03
7E C6 0D
CHK_FUNC10 CMPA #16H
BNE CHK_FUNC11
JMP KEY_INS
81 17
26 03
7E C6 26
CHK_FUNC11 CMPA #17H
BNE CHK_FUNC12
JMP KEY_DEL
81 15
26 03
7E C6 E3
CHK_FUNC12 CMPA #15H
BNE CHK_FUNC13
JMP KEY_DEMO
; CHANGE SBR KEY TO DEMO
81 1A
26 03
7E C6 FD
CHK_FUNC13 CMPA #1AH
BNE CHK_FUNC14
JMP KEY_MUTE
; TURN BEEP ON/OFF
81 1C
26 03
7E C7 01
CHK_FUNC14 CMPA #1CH
;
BNE CHK_FUNC15
JMP KEY_COPY
81 1E
26 03
7E C1 72
CHK_FUNC15 CMPA #1EH
BNE CHK_FUNC16
JMP KEY_DUMP
CMPA #18H
BNE CHK_FUNC5
JMP KEY_PC
CMPA #1BH
BNE CHK_FUNC6
JMP KEY_REG
CMPA #12H
BNE CHK_FUNC7
JMP KEY_GO
CMPA #1DH
BNE CHK_FUNC8
JMP KEY_REL
CMPA #1FH
BNE CHK_FUNC9
JMP KEY_DOWNLOAD_HEX
CHK_FUNC16
39
86 01
97 94
86 00
RTS
;--------------------------------------------------------KEY_ADDR
LDAA #1
STAA STATE
; STAATE =1 FOR ADDRESS MODE
LDAA #0
Page 14 of 40
MON68.LST
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
C3D4
C3D6
C3D6
C3D6
C3D9
C3D9
C3DB
C3DD
C3DF
C3DF
C3E1
C3E3
C3E5
C3E5
C3E7
C3E9
C3EB
C3EB
C3ED
C3EF
C3F1
C3F1
C3F3
C3F5
C3F7
C3F7
C3F9
C3FB
C3FD
C3FD
C3FE
C3FE
C3FE
C3FE
C400
C402
C402
C404
C406
C406
C409
C409
C40B
C40D
C40F
C40F
C411
C413
C415
C415
C417
C419
C41B
C41B
C41D
C41F
C421
C421
C423
C425
C427
C427
C429
C42B
C42D
C42D
C42E
C42E
C42E
C42E
C42E
C42E
C42E
C430
C432
C434
2/11/2558 17:06
97 95
STAA ZERO_FLAG
STILL_ADDRESS
BD C4 2E
JSR READ_MEMORY
96 91
8A 40
97 91
LDAA BUFFER+5
ORAA #40H
STAA BUFFER+5
96 90
8A 40
97 90
LDAA BUFFER+4
ORAA #40H
STAA BUFFER+4
96 8F
8A 40
97 8F
LDAA BUFFER+3
ORAA #40H
STAA BUFFER+3
96 8E
8A 40
97 8E
LDAA BUFFER+2
ORAA #40H
STAA BUFFER+2
96 8D
84 BF
97 8D
LDAA BUFFER+1
ANDA #~40H
STAA BUFFER+1
96 8C
84 BF
97 8C
LDAA BUFFER
ANDA #~40H
STAA BUFFER
39
RTS
;---------------------------------------------------------
86 02
97 94
86 00
97 95
BD C4 2E
KEY_DATA
LDAA #2
STAA STATE
; STATE =2 FOR DATA MODE
LDAA #0
STAA ZERO_FLAG
STILL_DATA
JSR READ_MEMORY
96 91
84 BF
97 91
LDAA BUFFER+5
ANDA #~40H
STAA BUFFER+5
96 90
84 BF
97 90
LDAA BUFFER+4
ANDA #~40H
STAA BUFFER+4
96 8F
84 BF
97 8F
LDAA BUFFER+3
ANDA #~40H
STAA BUFFER+3
96 8E
84 BF
97 8E
LDAA BUFFER+2
ANDA #~40H
STAA BUFFER+2
96 8D
8A 40
97 8D
LDAA BUFFER+1
ORAA #40H
STAA BUFFER+1
96 8C
8A 40
97 8C
LDAA BUFFER
ORAA #40H
STAA BUFFER
39
RTS
; READ MEMORY
READ_MEMORY
96
97
96
97
96
84
97
85
LDAA DISPLAY
STAA HL
LDAA DISPLAY+1
STAA HL+1
Page 15 of 40
MON68.LST
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
C436
C439
C439
C43B
C43D
C43D
C43D
C43D
C440
C441
C441
C441
C441
C441
C441
C441
C443
C445
C445
C447
C449
C449
C44B
C44D
C44F
C451
C451
C454
C455
C455
C455
C455
C455
C457
C459
C459
C45B
C45D
C45F
C461
C463
C465
C467
C469
C46B
C46D
C46F
C46F
C470
C470
C470
C470
C470
C472
C474
C476
C476
C479
C47B
C47D
C47F
C481
C483
C483
C483
C486
C487
C487
C487
C487
C487
C487
C489
C48B
C48D
C48D
2/11/2558 17:06
BD C1 D1
JSR ADDRESS_DISPLAY
DE 84
A6 00
LDX
HL
LDAA 0,X
;STAA GPIO1
BD C1 C3
39
JSR DATA_DISPLAY
RTS
; KEY PC, SET CURRENT USER ADDRESS
86 02
97 94
KEY_PC
LDAA #2
STAA STATE
; STAATE =2 FOR DATA MODE
86 00
97 95
LDAA #0
STAA ZERO_FLAG
96
97
96
97
LDAA USER_PC
STAA DISPLAY
LDAA USER_PC+1
STAA DISPLAY+1
; JSR READ_MEMORY
JSR STILL_DATA
RTS
98
96
99
97
BD C4 06
39
; KEY REGISTER
; SET STATE TO 3 FOR REGISTER INPUT WITH HEX KEY
86 03
97 94
86
97
86
97
86
97
86
97
86
97
97
03
91
8F
90
BE
8F
00
8E
00
8D
8C
39
KEY_REG
LDAA
STAA
LDAA
STAA
LDAA
STAA
STAA
LDAA
STAA
STAA
LDAA #3
STAA STATE
; STAATE = 3 FOR REGISTER DISPLAY
#3
BUFFER+5
#8FH
BUFFER+4
#0BEH
BUFFER+3
LDAA #0
BUFFER+2
#0
BUFFER+1
BUFFER
RTS
; INCREMENT CURRENT ADDRESS BY ONE
;
96 94
81 14
26 11
7C
96
81
2D
86
97
KEY_INC
00 C9
C9
0A
04
00
C9
INC DEMO_NO
LDAA DEMO_NO
CMPA #10
BLT SKIP_INC2
LDAA #0
STAA DEMO_NO
BD C1 C3
39
SKIP_INC2
96 94
81 05
27 4D
SKIP_INC1
81 07
LDAA STATE
CMPA #20
BNE SKIP_INC1
JSR DATA_DISPLAY
RTS
LDAA STATE
CMPA #5
BEQ REL_KEY_PRESSED
CMPA #7
Page 16 of 40
MON68.LST
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
C48F
C491
C491
C491
C493
C495
C495
C497
C499
C499
C499
C499
C499
C499
C49B
C49D
C49D
C49F
C4A1
C4A1
C4A1
C4A3
C4A4
C4A6
C4A6
C4A6
C4A6
C4A9
C4AA
C4AA
C4AA
C4AA
C4AA
C4AA
C4AA
C4AA
C4AA
C4AC
C4AE
C4AE
C4B0
C4B2
C4B4
C4B6
C4B6
C4B9
C4BB
C4BD
C4BF
C4C1
C4C2
C4C2
C4C2
C4C2
C4C2
C4C2
C4C2
C4C2
C4C4
C4C6
C4C6
C4C8
C4CA
C4CC
C4CE
C4CE
C4D1
C4D3
C4D5
C4D7
C4D9
C4DA
C4DA
C4DA
C4DA
C4DA
2/11/2558 17:06
27 61
BEQ SEND_INC1
81 1E
27 2D
CMPA #30
BEQ COPY_KEY_PRESSED
81 1F
27 11
CMPA #31
BEQ COPY_KEY_PRESSED1
; NORMAL INCREMENT CURRENT ADDRESS BY ONE
86 02
97 94
86 00
97 95
DE 96
08
DF 96
BD C4 06
39
LDAA #2
STAA STATE
; STATE =2 FOR DATA MODE
LDAA #0
STAA ZERO_FLAG
LDX DISPLAY
INX
STX DISPLAY
; JSR READ_MEMORY
JSR STILL_DATA
RTS
COPY_KEY_PRESSED1
; Save ENDING address
DE 96
DF A9
LDX DISPLAY
STX END_ADDRESS
86
97
86
97
20
94
00
95
LDAA #32
STAA STATE
LDAA #0
STAA ZERO_FLAG
BD
86
97
86
97
39
C3 D6
B3
8C
02
8D
JSR STILL_ADDRESS
LDAA #0B3H
STAA BUFFER
LDAA #2
STAA BUFFER+1
RTS
COPY_KEY_PRESSED
; Save start address
DE 96
DF A3
LDX DISPLAY
STX START_ADDRESS
86
97
86
97
1F
94
00
95
LDAA #31
STAA STATE
LDAA #0
STAA ZERO_FLAG
BD
86
97
86
97
39
C3 D6
8F
8C
02
8D
JSR STILL_ADDRESS
LDAA #08FH
STAA BUFFER
LDAA #2
STAA BUFFER+1
RTS
REL_KEY_PRESSED
Page 17 of 40
; STATE 32 FOR KEY GO COPYING MEMORY
MON68.LST
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
C4DA
C4DA
C4DA
C4DA
C4DC
C4DE
C4DE
C4E0
C4E2
C4E4
C4E6
C4E6
C4E9
C4EB
C4ED
C4EF
C4F1
C4F2
C4F2
C4F2
C4F2
C4F2
C4F2
C4F4
C4F6
C4F6
C4F8
C4FA
C4FC
C4FE
C4FE
C501
C503
C505
C507
C509
C50A
C50A
C50A
C50A
C50A
C50A
C50A
C50A
C50A
C50A
C50A
C50C
C50E
C510
C510
C513
C515
C517
C519
C51B
C51C
C51E
C51E
C521
C521
C521
C522
C522
C522
C522
C522
C522
C522
C524
C526
C526
C528
C52A
C52A
C52A
2/11/2558 17:06
; Save start address
DE 96
DF A3
LDX DISPLAY
STX START_ADDRESS
86
97
86
97
06
94
00
95
LDAA #6
STAA STATE
LDAA #0
STAA ZERO_FLAG
BD
86
97
86
97
39
C3 D6
B3
8C
02
8D
JSR STILL_ADDRESS
LDAA #0B3H
STAA BUFFER
LDAA #2
STAA BUFFER+1
RTS
SEND_INC1
DE 96
DF A3
; Save start address
LDX DISPLAY
STX START_ADDRESS
86
97
86
97
08
94
00
95
LDAA #8
STAA STATE
LDAA #0
STAA ZERO_FLAG
BD
86
97
86
97
39
C3 D6
8F
8C
02
8D
JSR STILL_ADDRESS
LDAA #08FH
STAA BUFFER
LDAA #2
STAA BUFFER+1
RTS
; DECREMENT CURRENT ADDRESS BY ONE
;
96 94
81 14
26 12
7A
96
97
81
2C
4F
97
KEY_DEC
00 C9
C9
C9
00
03
DEC DEMO_NO
LDAA DEMO_NO
STAA DEMO_NO
CMPA #0
BGE SKIP_DEC2
CLRA
STAA DEMO_NO
C9
BD C1 C3
LDAA STATE
CMPA #20
BNE SKIP_DEC1
SKIP_DEC2
39
JSR DATA_DISPLAY
RTS
SKIP_DEC1
86 02
97 94
86 00
97 95
DE 96
LDAA #2
STAA STATE
; STAATE =2 FOR DATA MODE
LDAA #0
STAA ZERO_FLAG
LDX DISPLAY
Page 18 of 40
MON68.LST
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
C52C
C52D
C52F
C52F
C532
C533
C533
C533
C533
C533
C533
C533
C535
C537
C539
C539
C539
C53B
C53D
C53D
C53F
C541
C541
C543
C545
C545
C547
C549
C549
C549
C549
C54B
C54D
C54F
C552
C553
C553
C555
C557
C55A
C55B
C55B
C55D
C55F
C562
C562
C564
C566
C569
C569
C56B
C56D
C570
C570
C570
C570
C570
C570
C571
C571
C571
C574
C574
C575
C575
C575
C576
C576
C576
C576
C576
C576
C576
C579
C579
C57A
2/11/2558 17:06
09
DF 96
DEX
STX DISPLAY
; JSR READ_MEMORY
JSR STILL_DATA
RTS
BD C4 06
39
; KEY GO WRITE USER REGISTERS TO STACK AND USE RTI TO JUMP TO USER PROGRAM
;
KEY_GO
96 94
81 20
27 38
LDAA STATE
CMPA #32
BEQ GO_STATE32
81 06
27 51
CMPA #6
BEQ GO_STATE6
81 08
27 34
CMPA #8
BEQ GO_STATE8
81 0A
27 31
CMPA #10
BEQ SHORT_GO_STATE10
81 14
26 31
CMPA #20
BNE SKIP_GO1
; GO FOR COPYING DATA
; EXECUTE KEY GO STATE 20 DEMO PROGRAMS
96
81
26
BD
39
C9
04
04
CA 81
LDAA DEMO_NO
CMPA #4
BNE DEMO2
JSR DEMO_LCD
RTS
81 01
26 04
BD CA 98
39
DEMO2
CMPA #1
BNE DEMO3
JSR DEMO_LED
RTS
81 00
26 03
7E CA AA
DEMO3
CMPA #0
BNE DEMO4
JMP RUN_DOT
81 02
26 03
7E CA B4
DEMO4
CMPA #2
BNE DEMO5
JMP BCD_COUNTING
81 03
26 03
7E CA F7
DEMO5
CMPA #3
BNE DEMO6
JMP CLOCK_PGM
; CHECK SUB FUNCTION FOR STATE=20
DEMO6
39
7E C5 E3
RTS
GO_STATE32
39
39
JMP GO_COPY_MEMORY
RTS
GO_STATE8
RTS
SHORT_GO_STATE10
BD C6 B9
JSR GO_STATE10
39
RTS
Page 19 of 40
MON68.LST
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
C57A
C57A
C57A
C57A
C57A
C57A
C57A
C57A
C57A
C57A
C57A
C57C
C57C
C57C
C57C
C57E
C57E
C580
C581
C583
C584
C586
C587
C589
C58B
C58D
C58E
C58E
C58E
C58E
C58E
C58E
C58E
C58E
C58E
C58E
C590
C592
C592
C592
C592
C592
C592
C592
C594
C595
C596
C598
C598
C598
C598
C59A
C59C
C59E
C59E
C5A0
C5A2
C5A4
C5A4
C5A4
C5A4
C5A4
C5A4
C5A4
C5A4
C5A4
C5A6
C5A8
C5AA
C5AA
C5AA
C5AA
C5AC
C5AE
C5B0
C5B0
2/11/2558 17:06
SKIP_GO1
9F A1
STS SAVE_SP
; SAVE SYSTEM STACK
; NOW SWITCH TO USER STACK
9E 9E
96
36
96
36
96
06
DE
D6
96
39
97
96
A0
9C
9B
9A
LDS USER_SP
; NOW LOAD WITH USER STACK
LDAA DISPLAY+1
PSHA
LDAA DISPLAY
PSHA
LDAA USER_P
TAP
LDX USER_IX
LDAB USER_B
LDAA USER_A
RTS
; KEY GO WITH RELATIVE CALCULATION
; FIND OFFSET BYTE
GO_STATE6
DE 96
DF A5
LDX DISPLAY
STX DESTINATION
; NOW COMPUTE OFFSET_BYTE = DESTINATION - START_ADDRESS
; THE REAL PC WILL BE NEXT INTSRUCTION ADDRESS (+2 FROM BRANCH INSTRUCTION
DE A3
08
08
DF B0
LDX START_ADDRESS
INX
INX
STX TEMP16
; SAVE CURRENT PC TO TEMP16
96 A6
90 B1
97 A8
LDAA DESTINATION+1
SUBA TEMP16+1
STAA OFFSET_BYTE+1
96 A5
92 B0
97 A7
LDAA DESTINATION
SBCA TEMP16
STAA OFFSET_BYTE
;
;
;
;
96 A8
84 80
27 09
CHECK IF THE OFFSET BYTE WAS BETWEEN -128 (FF80) TO +127 (007F)
IF BIT 7 OF THE OFFSET BYTE IS 0, THE HIGH BYTE MUST BE ZERO
IF BIT 7 OF THE OFFSET BYTE IS 1, THE HIGH BYTE MUST BE FF
OTHERWISE, THE OFFSET BYTE WAS OUT OF RANGE, SHOW ERROR THEN
LDAA OFFSET_BYTE+1
ANDA #80H
BEQ CHK_OFFSET_HIGH
; CHECK HIGH BYTE MUST BE FF (-1)
96 A7
81 FF
26 18
LDAA OFFSET_BYTE
CMPA #0FFH
BNE OUT_OFF_RANGE
7E C5 B7
JMP IN_RANGE
Page 20 of 40
MON68.LST
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
C5B3
C5B3
C5B3
C5B5
C5B7
C5B7
C5B7
C5B7
C5B9
C5BA
C5BA
C5BC
C5BE
C5BE
C5C0
C5C0
C5C3
C5C3
C5C5
C5C7
C5C8
C5C8
C5C8
C5C8
C5CA
C5CC
C5CE
C5D0
C5D2
C5D4
C5D6
C5D8
C5DA
C5DC
C5DE
C5DE
C5E0
C5E2
C5E2
C5E3
C5E3
C5E3
C5E3
C5E3
C5E3
C5E3
C5E3
C5E3
C5E3
C5E5
C5E7
C5E7
C5E7
C5E9
C5EB
C5ED
C5EF
C5EF
C5EF
C5F1
C5F2
C5F4
C5F4
C5F4
C5F6
C5F7
C5F9
C5F9
C5F9
C5FB
C5FB
C5FD
C5FD
C5FD
C5FD
C5FF
2/11/2558 17:06
96 A7
26 11
CHK_OFFSET_HIGH
LDAA OFFSET_BYTE
BNE OUT_OFF_RANGE
; STORE OFFSET TO THE 2ND BYTE OF BRANCH INSTRUCTION
DE A3
08
IN_RANGE LDX START_ADDRESS
INX
96 A8
A7 00
LDAA OFFSET_BYTE+1
STAA 0,X
DF 96
STX DISPLAY
BD C4 06
JSR STILL_DATA
86 02
97 94
39
LDAA #2
STAA STATE
RTS
OUT_OFF_RANGE
86
97
86
97
86
97
86
97
86
97
97
02
91
8F
90
03
8F
03
8E
00
8D
8C
STAA
LDAA
STAA
LDAA
STAA
LDAA
STAA
LDAA
STAA
STAA
LDAA #2
BUFFER+5
#8FH
BUFFER+4
#3
BUFFER+3
#3
BUFFER+2
#0
BUFFER+1
BUFFER
86 02
97 94
LDAA #2
39
RTS
STAA STATE
; SERVICE KEY GO FOR COPY KEY
GO_COPY_MEMORY
DE 96
DF A5
LDX DISPLAY
STX DESTINATION
COPY1
DE
A6
DE
A7
A3
00
A5
00
LDX START_ADDRESS
LDAA 0,X
LDX DESTINATION
STAA 0,X
DE A5
08
DF A5
LDX DESTINATION
INX
STX DESTINATION
DE A3
08
DF A3
LDX START_ADDRESS
INX
STX START_ADDRESS
9C A9
CPX END_ADDRESS
26 EA
BNE COPY1
; STORE LAST BYTE AS WELL
DE A3
A6 00
LDX START_ADDRESS
LDAA 0,X
Page 21 of 40
MON68.LST
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
C601
C603
C605
C605
C605
C605
C608
C608
C60A
C60C
C60D
C60D
C60D
C60D
C60D
C60D
C60D
C60D
C60D
C60D
C60D
C60D
C60D
C60D
C60D
C60D
C60D
C60D
C60D
C60D
C60D
C60D
C60F
C610
C612
C612
C614
C614
C616
C618
C619
C619
C61A
C61C
C61C
C61C
C61E
C61E
C620
C622
C622
C625
C625
C626
C626
C626
C626
C626
C628
C628
C62A
C62A
C62C
C62E
C62F
C62F
C630
C632
C632
C632
C635
C635
C636
C636
C636
C636
2/11/2558 17:06
DE A5
A7 00
LDX DESTINATION
STAA 0,X
BD C4 06
JSR STILL_DATA
86 02
97 94
39
LDAA #2
STAA STATE
RTS
; INSERT ONE BYTE WITHIN 256 BYTES
; CURRENT LOCATION WILL BE DISPLAY+1
DE 96
08
DF 96
KEY_INS
C6 00
A6 FE
A7 FF
09
LDX DISPLAY ; GET CURRENT DISPLAY ADDRESS
INX
STX DISPLAY
LDAB #0
INSERT
LDAA 0FEH,X
STAA 0FFH,X
DEX
5A
26 F8
DECB
BNE INSERT
86 00
LDAA #0
DE 96
A7 00
LDX DISPLAY
STAA 0,X
BD C4 06
JSR STILL_DATA
39
RTS
; DELETE ONE BYTE AT CURRENT DISPLAY ADDRESS
; SHIFTED UP 256 BYTES
DE 96
KEY_DEL
C6 00
A6 01
A7 00
08
LDX DISPLAY ; GET CURRENT DISPLAY ADDRESS
LDAB #0
DELETE
LDAA 1,X
STAA 0,X
INX
5A
26 F8
DECB
BNE DELETE
BD C4 06
JSR STILL_DATA
39
RTS
; SINGLE STEP KEY
; ENABLE BREAK SIGNAL SO AT THE 8TH OF E CLOCK, THE NMI WILL PRODUCE
Page 22 of 40
MON68.LST
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
C636
C636
C636
C636
C638
C638
C638
C638
C63A
C63A
C63C
C63D
C63F
C640
C640
C642
C643
C643
C645
C646
C646
C648
C649
C649
C64B
C64C
C64C
C64E
C64F
C64F
C651
C654
C654
C654
C655
C655
C655
C655
C655
C655
C655
C655
C655
C657
C65A
C65A
C65C
C65C
C65C
C65C
C65C
C65C
C65C
C65C
C65C
C65C
C65C
C65C
C65C
C65C
C65C
C65C
C65C
C65C
C65C
C65D
C65F
C65F
C660
C662
C662
C663
C665
C665
C666
C668
2/11/2558 17:06
KEY_STEP
9F A1
STS SAVE_SP
; SAVE SYSTEM STACK
; NOW SWITCH TO USER STACK
9E 9E
LDS USER_SP
; NOW LOAD WITH USER STACK
96 97
36
96 96
36
LDAA DISPLAY+1
PSHA
LDAA DISPLAY ; PUSH PC
PSHA
96 9D
36
LDAA USER_IX+1
PSHA
96 9C
36
LDAA USER_IX
PSHA
96 9A
36
LDAA USER_A
PSHA
; PUSH A
96 9B
36
LDAA USER_B
PSHA
; PUSH B
96 A0
36
LDAA USER_P
PSHA
C6 FF
F7 80 02
LDAB #$FF
STAB PORT1
; NOW ENABLE 74LS164
3B
RTI
; 10 CYCLES
; PUSH IX
; PUSH CONDITION CODE REGISTER
NMI_SERVICE
; STAA GPIO1
86 BF
B7 80 02
LDAA #0BFH
STAA PORT1
20 00
BRA
; STOP BREAK SIGNAL
SWI_SERVICE
; RTI
; SAVE CPU REGISTERS TO USER REGISTERS
; SWI INSTRUCTION 3FH
SWI_SERVICE
;
;
;
;
;
;
;
POP
POP
POP
POP
POP
POP
POP
CC
ACCB
ACCA
IXH
IXL
PCH
PCL
32
97 A0
PULA
STAA USER_P
32
97 9B
PULA
STAA USER_B
32
97 9A
PULA
STAA USER_A
32
97 9C
PULA
STAA USER_IX
; SAVE CONDITION CODE REGISTER
Page 23 of 40
MON68.LST
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
C668
C669
C66B
C66C
C66C
C66E
C66F
C671
C671
C671
C671
C673
C673
C675
C675
C678
C678
C679
C679
C679
C679
C67B
C67D
C67D
C67F
C681
C684
C686
C688
C68A
C68C
C68D
C68D
C68D
C68D
C68D
C68D
C68F
C691
C693
C695
C697
C699
C69B
C69D
C69F
C6A1
C6A3
C6A5
C6A7
C6A7
C6A9
C6AB
C6AB
C6AE
C6B1
C6B4
C6B4
C6B6
C6B8
C6B8
C6B9
C6B9
C6B9
C6BB
C6BE
C6BE
C6C1
C6C4
C6C4
C6C4
C6C7
C6C7
C6C9
C6CB
C6CD
2/11/2558 17:06
32
97 9D
32
PULA
STAA USER_IX+1
PULA
97 98
32
97 99
STAA USER_PC
PULA
STAA USER_PC+1
9F 9E
STS USER_SP
9E A1
LDS SAVE_SP
; RESTORE SYSTEM STACK AND GET BACK TO MONITOR
BD C4 41
JSR KEY_PC
; DISPLAY CURRENT PC
39
RTS
;--------------------------------------------------------------
86 05
97 94
86
97
BD
86
97
86
97
39
00
95
C3 D6
AE
8C
02
8D
KEY_REL
LDAA #5
STAA STATE ; STATE = 5 FOR RELATIVE BYTE CALCULATION
LDAA #0
STAA ZERO_FLAG
JSR STILL_ADDRESS
LDAA #0AEH
STAA BUFFER
LDAA #2
STAA BUFFER+1
RTS
KEY_DOWNLOAD_HEX
86
97
86
97
86
97
86
97
86
97
86
97
97
B3
91
85
91
A3
90
3F
8F
B3
8E
00
8D
8C
LDAA
STAA
LDAA
STAA
LDAA
STAA
LDAA
STAA
LDAA
STAA
LDAA
STAA
STAA
#0B3H
; PRINT LOAD
BUFFER+5
#85H
BUFFER+5
#0A3H
BUFFER+4
#3FH
BUFFER+3
#0B3H
BUFFER+2
#0
BUFFER+1
BUFFER
86 0A
97 94
LDAA #10
STAA STATE
BD C9 FF
CE CB A7
BD CA 14
JSR CLR_SCREEN
LDX #DOWNLOAD
JSR PSTR
86 FF
97 CA
LDAA #$FF
STAA MUTE
39
86 01
B7 80 00
; TURN OFF BEEP
RTS
GO_STATE10
LDAA #1
STAA GPIO1
CE CB B6
BD CA 14
LDX #DOWNLOAD2
JSR PSTR
BD C2 14
JSR GET_RECORD
96 89
81 00
26 08
LDAA _ERROR
CMPA #0
BNE FOUND_ERROR
Page 24 of 40
; GET INTEL HEX FILE
MON68.LST
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
C6CD
C6D0
C6D3
C6D5
C6D5
C6D8
C6DB
C6DB
C6DB
C6DB
C6DD
C6DF
C6E2
C6E2
C6E3
C6E3
C6E3
C6E3
C6E5
C6E7
C6E7
C6E9
C6EB
C6ED
C6EF
C6EF
C6F1
C6F3
C6F5
C6F7
C6F7
C6F9
C6FC
C6FD
C6FD
C6FD
C6FD
C6FD
C6FD
C700
C701
C701
C701
C701
C703
C705
C705
C707
C709
C709
C70C
C70E
C710
C712
C714
C715
C715
C715
C715
C715
C715
C715
C715
C715
C717
C719
C71B
C71B
C71D
C71F
C721
C723
C725
C725
C726
C729
2/11/2558 17:06
CE CB D0
BD CA 14
20 06
CE CB DD
BD CA 14
LDX #COMPLETE
JSR PSTR
BRA SKIP_ERROR
FOUND_ERROR
LDX #ERROR_FOUND
JSR PSTR
SKIP_ERROR
86 02
97 94
BD C4 06
LDAA #2
39
RTS
86 14
97 94
86
97
86
97
1F
91
03
90
86
97
86
97
BE
8F
00
8E
STAA STATE
JSR STILL_DATA
KEY_DEMO
LDAA #20
; STATE 20 FOR KEY DEMO
STAA STATE
LDAA #1FH
; PRINT Prg
STAA BUFFER+5
LDAA #03H
STAA BUFFER+4
LDAA
STAA
LDAA
STAA
96 C9
BD C1 C3
39
#0BEH
BUFFER+3
#0
BUFFER+2
LDAA DEMO_NO
JSR DATA_DISPLAY
RTS
73 00 CA
39
KEY_MUTE
COM MUTE
RTS
86 1E
97 94
KEY_COPY
LDAA #30
STAA STATE
; STATE = 30
86 00
97 95
LDAA #0
STAA ZERO_FLAG
BD
86
97
86
97
39
JSR STILL_ADDRESS
LDAA #0AEH
STAA BUFFER
LDAA #2
STAA BUFFER+1
RTS
C3 D6
AE
8C
02
8D
;------------------- HEX KEY FOR ADDRESS ------------------96 95
81 00
26 0A
86
97
86
97
97
HEX_ADDR
LDAA ZERO_FLAG
CMPA #0
BNE SHIFT_ADDRESS
01
95
00
96
97
LDAA #1
STAA ZERO_FLAG
LDAA #0
STAA DISPLAY
STAA DISPLAY+1
0C
79 00 97
79 00 96
SHIFT_ADDRESS CLC
ROL DISPLAY+1
ROL DISPLAY
Page 25 of 40
MON68.LST
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
C72C
C72C
C72D
C730
C733
C733
C734
C737
C73A
C73A
C73B
C73E
C741
C741
C743
C745
C747
C747
C747
C747
C74A
C74A
C74B
C74B
C74B
C74B
C74D
C74F
C751
C751
C753
C755
C755
C757
C759
C75B
C75B
C75D
C75F
C760
C761
C762
C763
C765
C767
C767
C767
C76A
C76B
C76B
C76B
C76B
C76B
C76B
C76B
C76D
C76F
C771
C771
C773
C773
C776
C776
C778
C77A
C77C
C77E
C780
C782
C784
C786
C787
C787
C787
C789
C78B
2/11/2558 17:06
0C
79 00 97
79 00 96
CLC
ROL DISPLAY+1
ROL DISPLAY
0C
79 00 97
79 00 96
CLC
0C
79 00 97
79 00 96
CLC
ROL DISPLAY+1
ROL DISPLAY
ROL DISPLAY+1
ROL DISPLAY
96 97
9A 83
97 97
LDAA DISPLAY+1
ORAA REG_C
STAA DISPLAY+1
; JSR READ_MEMORY
BD C3 D6
JSR STILL_ADDRESS
39
RTS
;------------------------- HEX KEY FOR DATA MODE --------------------------
96 95
81 00
26 0A
HEX_DATA
LDAA ZERO_FLAG
CMPA #0
BNE SHIFT_DATA
86 01
97 95
LDAA #1
STAA ZERO_FLAG
86 00
DE 96
A7 00
LDAA #0
DE
A6
48
48
48
48
9A
A7
96
00
LDX DISPLAY
STAA 0,X
SHIFT_DATA
83
00
BD C4 06
39
LDX
LDAA
ASLA
ASLA
ASLA
ASLA
ORAA
STAA
DISPLAY
0,X
REG_C
0,X
; JSR READ_MEMORY
JSR STILL_DATA
RTS
;************************ HEX REGSITERS DISPLAY **************************
; DISPLAY USER REGSITERS
96 83
81 00
26 16
HEX_REG
96 9A
LDAA USER_A
; STAA GPIO1
JSR DATA_DISPLAY
BD C1 C3
86
97
86
97
86
97
86
97
39
3F
8E
8D
8F
8D
90
3F
91
LDAA REG_C
CMPA #0
BNE CHK_REG1
LDAA #3FH
STAA BUFFER+2
LDAA #8DH
STAA BUFFER+3
LDAA #8DH
STAA BUFFER+4
LDAA #3FH
STAA BUFFER+5
RTS
; REGISTER ACCA
CHK_REG1
81 01
26 16
CMPA #1
BNE CHK_REG2
Page 26 of 40
MON68.LST
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
C78B
C78D
C78D
C78D
C790
C792
C794
C796
C798
C79A
C79C
C79E
C7A0
C7A1
C7A1
C7A3
C7A5
C7A5
C7A7
C7A7
C7A7
C7A9
C7A9
C7AC
C7AC
C7AE
C7B0
C7B2
C7B4
C7B5
C7B5
C7B5
C7B7
C7B9
C7B9
C7BB
C7BB
C7BD
C7BD
C7C0
C7C2
C7C4
C7C6
C7C8
C7C9
C7C9
C7C9
C7C9
C7CB
C7CD
C7CD
C7CD
C7CD
C7CF
C7D1
C7D3
C7D3
C7D5
C7D7
C7D9
C7D9
C7DB
C7DD
C7DD
C7DF
C7DF
C7E1
C7E3
C7E3
C7E5
C7E7
C7E9
C7E9
C7EB
C7ED
C7ED
2/11/2558 17:06
96 9B
BD
86
97
86
97
86
97
86
97
39
C1 C3
A7
8E
8D
8F
8D
90
3F
91
LDAA USER_B
; STAA GPIO1
JSR DATA_DISPLAY
LDAA #0A7H
STAA BUFFER+2
LDAA #8DH
STAA BUFFER+3
LDAA #8DH
STAA BUFFER+4
LDAA #3FH
STAA BUFFER+5
RTS
81 02
26 10
CHK_REG2 CMPA #2
BNE CHK_REG3
DE 9C
LDX USER_IX
; STAA GPIO1
; REGISTER ACCB
DF 84
STX HL
BD C1 D1
JSR ADDRESS_DISPLAY
86
97
86
97
39
LDAA
STAA
LDAA
STAA
30
8D
26
8C
#30H
BUFFER+1
#26H
BUFFER
RTS
81 03
26 10
CHK_REG3 CMPA #3
BNE CHK_REG4
DE 9E
LDX USER_SP
; STAA GPIO1
STX HL
DF 84
BD
86
97
86
97
39
; REGISTER IX
C1 D1
AE
8D
1F
8C
81 04
26 2F
JSR ADDRESS_DISPLAY
LDAA #0AEH
STAA BUFFER+1
LDAA #1FH
; REGISTER SP
STAA BUFFER
RTS
CHK_REG4
CMPA #4
BNE CHK_REG5
; CONDITION CODE DISPLAY FOR HIGH NIBBLE 11HI
96 A0
84 10
26 06
LDAA USER_P
ANDA #$10
BNE SHOW_BIT4
86 BD
97 8E
20 04
LDAA #ZERO
STAA BUFFER+2
BRA NEXT_BIT1
86 30
97 8E
SHOW_BIT4 LDAA #ONE
STAA BUFFER+2
96 A0
NEXT_BIT1 LDAA USER_P
84 20
26 06
ANDA #$20
BNE SHOW_BIT5
86 BD
97 8F
20 04
LDAA #ZERO
STAA BUFFER+3
BRA NEXT_BIT2
86 30
97 8F
SHOW_BIT5 LDAA #ONE
STAA BUFFER+3
86 30
NEXT_BIT2 LDAA #ONE
Page 27 of 40
MON68.LST
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
C7EF
C7F1
C7F3
C7F3
C7F5
C7F7
C7F9
C7FB
C7FB
C7FB
C7FC
C7FC
C7FC
C7FE
C800
C800
C800
C800
C802
C804
C806
C806
C808
C80A
C80C
C80C
C80E
C810
C810
C812
C814
C816
C816
C818
C81A
C81C
C81C
C81E
C820
C820
C822
C824
C826
C826
C828
C82A
C82C
C82C
C82E
C830
C830
C832
C834
C836
C836
C838
C83A
C83C
C83C
C83E
C840
C840
C840
C842
C844
C846
C848
C849
C849
C849
C84B
C84D
C84D
C850
C852
C854
2/11/2558 17:06
97 90
97 91
STAA BUFFER+4
STAA BUFFER+5
86
97
86
97
LDAA
STAA
LDAA
STAA
8D
8D
37
8C
39
#8DH
; STORE CH, CONDITION CODE HIGH NIBBLE
BUFFER+1
#37H
BUFFER
RTS
81 05
26 49
CHK_REG5
CMPA #5
BNE CHK_REG6
; CONDITION CODE DISPLAY FOR LOW NIBBLE NZVC
96 A0
84 80
26 06
LDAA USER_P
ANDA #$80
BNE SHOW_BIT6
86 BD
97 91
20 04
LDAA #ZERO
STAA BUFFER+5
BRA NEXT_BIT3
86 30
97 91
SHOW_BIT6 LDAA #ONE
STAA BUFFER+5
96 A0
84 04
26 06
NEXT_BIT3 LDAA USER_P
ANDA #4
BNE SHOW_BIT7
86 BD
97 90
20 04
LDAA #ZERO
STAA BUFFER+4
BRA NEXT_BIT4
86 30
97 90
SHOW_BIT7 LDAA #ONE
STAA BUFFER+4
96 A0
84 02
26 06
NEXT_BIT4 LDAA USER_P
ANDA #2
BNE SHOW_BIT8
86 BD
97 8F
20 04
LDAA #ZERO
STAA BUFFER+3
BRA NEXT_BIT5
86 30
97 8F
SHOW_BIT8 LDAA #ONE
STAA BUFFER+3
96 A0
84 01
26 06
NEXT_BIT5 LDAA USER_P
ANDA #1
BNE SHOW_BIT9
86 BD
97 8E
20 04
LDAA #ZERO
STAA BUFFER+2
BRA NEXT_BIT6
86 30
97 8E
SHOW_BIT9 LDAA #ONE
STAA BUFFER+2
NEXT_BIT6
86
97
86
97
39
8D
8D
85
8C
81 06
26 10
CE
EE
DF
BD
00 00
00
84
C1 D1
LDAA
STAA
LDAA
STAA
RTS
CHK_REG6
#8DH
BUFFER+1
#85H
BUFFER
CMPA #6
BNE CHK_REG7
LDX
LDX
STX
JSR
#0
0,X
HL
ADDRESS_DISPLAY
Page 28 of 40
MON68.LST
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
C857
C857
C859
C85C
C85D
C85D
C85D
C85F
C861
C861
C864
C866
C868
C86B
C86B
C86D
C870
C871
C871
C871
C873
C875
C875
C878
C87A
C87C
C87F
C87F
C881
C884
C885
C885
C887
C889
C889
C88C
C88E
C890
C893
C893
C895
C898
C899
C899
C899
C899
C89A
C89A
C89A
C89A
C89A
C89A
C89A
C89A
C89A
C89A
C89A
C89B
C89B
C89B
C89B
C89B
C89B
C89B
C89B
C89B
C89B
C89B
C89B
C89B
C89B
C89B
C89B
C89B
C89B
C89C
2/11/2558 17:06
86 00
BD C1 C3
39
81 07
26 10
CE
EE
DF
BD
LDAA #0
JSR DATA_DISPLAY
RTS
CHK_REG7
00 02
00
84
C1 D1
LDX
LDX
STX
JSR
86 02
BD C1 C3
39
81 08
26 10
CE
EE
DF
BD
CHK_REG8
CMPA #8
BNE CHK_REG9
LDX
LDX
STX
JSR
86 04
BD C1 C3
39
CE
EE
DF
BD
#2
0,X
HL
ADDRESS_DISPLAY
LDAA #2
JSR DATA_DISPLAY
RTS
00 04
00
84
C1 D1
81 09
26 10
CMPA #7
BNE CHK_REG8
#4
0,X
HL
ADDRESS_DISPLAY
LDAA #4
JSR DATA_DISPLAY
RTS
CHK_REG9
00 06
00
84
C1 D1
CMPA #9
BNE CHK_REGA
LDX
LDX
STX
JSR
86 06
BD C1 C3
39
#6
0,X
HL
ADDRESS_DISPLAY
LDAA #6
JSR DATA_DISPLAY
RTS
CHK_REGA
39
RTS
39
RTS
39
RTS
Page 29 of 40
MON68.LST
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
C89C
C89C
C89C
C89C
C89F
C8A1
C8A3
C8A5
C8A7
C8A8
C8A8
C8A8
C8A8
C8AB
C8AD
C8AF
C8B1
C8B3
C8B4
C8B4
C8B4
C8B4
C8B4
C8B7
C8B9
C8BB
C8BD
C8BF
C8C0
C8C0
C8C0
C8C0
C8C0
C8C3
C8C5
C8C7
C8C9
C8CB
C8CC
C8CC
C8CC
C8CC
C8CF
C8D1
C8D3
C8D5
C8D7
C8D8
C8D8
C8D8
C8D8
C8D8
C8D8
C8D9
C8D9
C8DA
C8DA
C8DA
C8DA
C8DA
C8DA
C8DA
C8DA
C8DA
C8DA
C8DA
C8DA
C8DA
C8DA
C8DA
C8DD
C8DD
C8DF
C8E1
C8E1
C8E3
2/11/2558 17:06
;-----------------------------------------------------------BD
86
97
86
97
39
C7 15
AE
8C
02
8D
HEX_REL
JSR HEX_ADDR
LDAA #0AEH
STAA BUFFER
LDAA #2
STAA BUFFER+1
RTS
BD
86
97
86
97
39
C7 15
B3
8C
02
8D
HEX_REL6
JSR HEX_ADDR
LDAA #0B3H
STAA BUFFER
LDAA #2
STAA BUFFER+1
RTS
HEX_COPY31
BD
86
97
86
97
39
C7 15
AE
8C
02
8D
JSR HEX_ADDR
LDAA #0AEH
STAA BUFFER
LDAA #2
STAA BUFFER+1
RTS
HEX_COPY32
BD
86
97
86
97
39
C7 15
8F
8C
02
8D
JSR HEX_ADDR
LDAA #08FH
STAA BUFFER
LDAA #2
STAA BUFFER+1
RTS
HEX_COPY33
BD
86
97
86
97
39
C7 15
B3
8C
02
8D
JSR HEX_ADDR
LDAA #0B3H
STAA BUFFER
LDAA #2
STAA BUFFER+1
RTS
39
HEX_SEND_FILE
RTS
39
HEX_SEND_FILE2
RTS
;
;
;
;
;
SCAN DISPLAY AND KEYBOARD
ENTRY: DISPLAY BUFFER IN PAGE 0
EXIT: KEY = -1 NO KEY PRESSED
KEY >=0 KEY POSITION
REGSITERS USED: X,A,Y
SCAN1
CE 00 8C
LDX #BUFFER
86 00
97 83
SCAN2
LDAA #0
STAA REG_C
86 FF
97 93
LDAA #-1
STAA KEY
Page 30 of 40
MON68.LST
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
C8E5
C8E5
C8E7
C8E9
C8E9
C8EB
C8ED
C8ED
C8ED
C8EF
C8EF
C8F1
C8F1
C8F3
C8F3
C8F6
C8F6
C8F8
C8FB
C8FB
C8FB
C8FB
C8FE
C8FE
C8FE
C8FE
C8FE
C8FE
C8FE
C900
C903
C903
C905
C906
C908
C908
C908
C90A
C90C
C90C
C90F
C90F
C911
C911
C911
C914
C914
C916
C916
C918
C91A
C91A
C91D
C91D
C920
C922
C922
C923
C923
C925
C926
C928
C928
C928
C92B
C92D
C92E
C92E
C92E
C930
C931
C933
C934
C934
C934
C934
2/11/2558 17:06
86 01
97 80
LDAA #1
STAA REG_E
86 06
97 84
LDAA #6
STAA HL
96 80
;to the active column.
KCOL
LDAA REG_E
88 FF
EORA #0FFH
; COMPLEMENT IT
84 BF
ANDA #0BFH
; MUST BE LOW FOR BREAK
B7 80 02
STAA DIGIT
A6 00
B7 80 03
LDAA 0,X
STAA SEG7
; automatic adjust for 1-3 segment display
BD C9 34
JSR AUTOBRIGHTNESS
;
;DELAY3
;
LDAB #$30
DECB
BNE DELAY3
86 00
B7 80 03
LDAA #0
STAA SEG7
; TURN LED OFF
C6 32
5A
26 FD
LDAB #50
DELAY10 DECB
BNE DELAY10
86 06
97 82
LDAA #6
STAA REG_B
B6 80 01
LDAA KIN
97 81
STAA
74 00 81
25 04
KROW LSR REG_D
;Rotate D 1 bit right, bit 0
;of D will be rotated into
BCS NOKEY
;carry flag.
96 83
97 93
LDAA REG_C
STAA KEY
7C 00 83
NOKEY INC REG_C
7A 00 82
26 EF
DEC REG_B
BNE KROW
08
INX
96 80
48
97 80
LDAA REG_E
ASLA
STAA REG_E
7A 00 84
26 C0
39
DEC
BNE
RTS
C6 C8
5A
26 FD
39
DEBOUNCE LDAB #200
DELAY4
DECB
BNE DELAY4
RTS
REG_D
;Increase current key-code by 1.
HL
KCOL
; ADJUST TIME ON IF EQUAL OR LESS THAN 3 BITS ON
AUTOBRIGHTNESS
Page 31 of 40
MON68.LST
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
C934
C934
C935
C937
C937
C939
C939
C93A
C93C
C93F
C93F
C93F
C940
C942
C942
C944
C944
C946
C948
C948
C94A
C94B
C94D
C94E
C94E
C94E
C94E
C94E
C94E
C950
C951
C953
C954
C954
C954
C954
C954
C954
C954
C954
C954
C954
C954
C954
C957
C959
C95B
C95D
C95D
C960
C962
C964
C964
C967
C969
C969
C969
C969
C969
C969
C96B
C96D
C96D
C970
C973
C975
C975
C975
C978
C97A
C97A
C97A
C97D
C97D
C97D
C97D
2/11/2558 17:06
5F
D7 CB
CLRB
STAB BIT1_COUNTER
C6 08
LDAB #8
49
24 03
7C 00 CB
CHECK_BIT1 ROLA
BCC _BIT1
INC BIT1_COUNTER
_BIT1
5A
26 F7
DECB
BNE CHECK_BIT1
96 CB
LDAA BIT1_COUNTER
81 03
2E 06
CMPA #3
BGT NORMAL
C6 03
5A
26 FD
39
DELAY20
; DIMMING FOR <=4 BITS THAT ON
LDAB #3
DECB
BNE DELAY20
RTS
NORMAL
C6 30
5A
26 FD
39
DELAY3
LDAB #$30
DECB
BNE DELAY3
RTS
; tested with 20h 30
;-------------------------------------------------------------------BD
96
81
27
C8 DA
93
FF
1D
B6 80 01
84 40
27 05
BD C9 2E
20 EB
SCANKEY JSR SCAN1
LDAA KEY
CMPA #-1
BEQ KEY_RELEASED
LDAA PORT0
ANDA #40H
BEQ SKIP_DISPLAY5
JSR DEBOUNCE
BRA SCANKEY
SKIP_DISPLAY5
86 14
97 AD
; IF REPEAT KEY WAS PRESSED, SLOW DOWN IT
LDAA #20
STAA REPDELAY
BD C8 DA
7A 00 AD
26 F8
DISPLAY4 JSR SCAN1
DEC REPDELAY
BNE DISPLAY4
CE 00 00
DF 92
LDX #0
STX INVALID
KEY_RELEASED
BD C9 2E
JSR DEBOUNCE
; THEN REPEAT KEY PRESS
; RESET INVALID FLAG
UNTIL_PRESS
BD C8 DA
JSR SCAN1
Page 32 of 40
MON68.LST
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
C980
C982
C984
C986
C986
C989
C989
C98C
C98C
C98E
C991
C991
C993
C993
C995
C997
C997
C999
C99B
C99D
C99D
C99F
C99F
C9A1
C9A1
C9A1
C9A1
C9A2
C9A2
C9A2
C9A5
C9A5
C9A8
C9A8
C9AB
C9AB
C9AD
C9AD
C9AD
C9AD
C9AD
C9AD
C9AD
C9AD
C9AD
C9B0
C9B2
C9B4
C9B4
C9B6
C9B8
C9BA
C9BB
C9BB
C9BB
C9BB
C9BE
C9BE
C9C0
C9C3
C9C6
C9C8
C9CB
C9CE
C9CE
C9CF
C9D1
C9D1
C9D1
C9D1
C9D2
C9D2
C9D2
C9D2
C9D2
C9D2
2/11/2558 17:06
96 93
81 FF
27 F7
LDAA KEY
CMPA #-1
BEQ UNTIL_PRESS
BD C9 2E
JSR DEBOUNCE
BD C8 DA
JSR SCAN1
96 93
CE CC 0B
LDAA KEY
LDX
#KEYTAB
DF B0
STX
TEMP16
9B B1
97 B1
ADDA TEMP16+1
STAA TEMP16+1
86 00
99 B0
97 B0
LDAA #0
ADCA TEMP16
STAA TEMP16
DE B0
LDX TEMP16
A6 00
LDAA
;
39
0,X
; OPEN TABLE
STAA GPIO1
; TEST NOW A IS INTERNAL CODE
RTS
BD C9 54
MAIN
JSR SCANKEY
; scan display and keypad
BD C3 03
JSR KEYEXE
; execute key that pressed
BD C9 AD
JSR BEEP
; beep/no beep after key executed
20 F5
BRA MAIN
; repeat forever
;--------------------------------------------------------; BEEP WHEN KEY PRESSED
;
; CALIBRATED TO 523Hz
; NEW FREQUENCY 673Hz, TESTED 670Hz
B6 80 01
84 40
27 1D
BEEP
LDAA PORT0
ANDA #40H
BEQ NO_BEEP
; CHECK IF REPEAT KEY IS PRESSED, THEN NO BEEP
96 CA
81 00
27 01
39
LDAA MUTE
CMPA #0
BEQ BEEPON
RTS
; IF MUTE=1 THEN NO BEEP
LDX #35h
;
CE 00 35
BEEPON
86
B7
BD
86
B7
BD
BEEP2
LDAA #3FH
STAA PORT1
JSR BEEP_DELAY
LDAA #0BFH
STAA PORT1
JSR BEEP_DELAY
3F
80
C9
BF
80
C9
09
26 ED
02
D2
02
D2
BEEP_PERIOD
DEX
BNE BEEP2
NO_BEEP
39
C6 52
RTS
BEEP_DELAY LDAB #52H
;
#78H
Page 33 of 40
; #09BH CALIBRATED 524Hz
MON68.LST
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
C9D4
C9D5
C9D7
C9D8
C9D8
C9D8
C9D8
C9D8
C9D8
C9D8
C9D8
C9D9
C9DC
C9DE
C9E0
C9E0
C9E3
C9E4
C9E6
C9E7
C9E7
C9E7
C9E7
C9E7
C9E9
C9EC
C9EE
C9F0
C9F3
C9F5
C9F7
C9F9
C9F9
C9F9
C9FB
C9FC
C9FE
C9FF
C9FF
C9FF
C9FF
C9FF
C9FF
C9FF
CA02
CA02
CA04
CA04
CA06
CA09
CA0B
CA0E
CA0E
CA10
CA11
CA13
CA14
CA14
CA14
CA14
CA14
CA14
CA14
CA16
CA18
CA18
CA19
CA19
CA19
CA19
CA1B
CA1B
CA1E
CA1E
CA20
CA21
2/11/2558 17:06
5A
26 FD
39
BEEP_LOOP DECB
BNE BEEP_LOOP
RTS
; TEST CODE
4C
B7 80 00
8D 02
20 F8
TEST
INCA
STAA GPIO1
BSR DELAY_LED
BRA TEST
CE 07 D0
09
26 FD
39
DELAY_LED LDX #2000
DELAY_LED1 DEX
BNE DELAY_LED1
RTS
; TEST BEEP
86
B7
8D
86
B7
8D
26
20
3F
80 02
0B
BF
80 02
04
F0
EE
C6 A0
5A
26 FD
39
BEEP3
LDAA #3FH
STAA PORT1
BSR BEEP_DELAY1
LDAA #0BFH
STAA PORT1
BSR BEEP_DELAY1
BNE BEEP3
BRA BEEP3
BEEP_DELAY1 LDAB #0A0H
BEEP_LOOP1 DECB
BNE BEEP_LOOP1
RTS
;
; CLEAR DISPLAY
CE 00 32
CLR_SCREEN LDX #50
DF B0
CLR_SCREEN1 STX TEMP16
86
BD
86
BD
0D
C0 88
0A
C0 88
LDAA #13
JSR SEND_BYTE
LDAA #10
JSR SEND_BYTE
DE B0
09
26 EF
39
LDX TEMP16
DEX
BNE CLR_SCREEN1
RTS
; PRINT STRING TO TERMINAL USING 2400 UART
; ENTRY: IX POINTED TO STRING
A6 00
26 01
39
PSTR
LDAA 0,X
BNE SEND_STRING
RTS
SEND_STRING
DF B2
STX IX2
BD C0 88
JSR SEND_BYTE
DE B2
08
20 F1
LDX IX2
INX
BRA PSTR
Page 34 of 40
MON68.LST
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
CA23
CA23
CA23
CA23
CA23
CA23
CA23
CA23
CA23
CA23
CA23
CA23
CA23
CA23
CA23
CA23
CA23
CA23
CA24
CA27
CA29
CA2B
CA2C
CA2D
CA2D
CA2D
CA2D
CA30
CA33
CA34
CA34
CA34
CA37
CA3A
CA3B
CA3B
CA3B
CA3E
CA40
CA43
CA44
CA44
CA46
CA49
CA4B
CA4E
CA51
CA53
CA55
CA58
CA59
CA59
CA59
CA59
CA59
CA59
CA59
CA5B
CA5D
CA5F
CA62
CA63
CA63
CA65
CA67
CA69
CA6C
CA6D
CA6D
CA6E
CA6E
CA6E
CA6E
CA6E
CA6E
CA6E
2/11/2558 17:06
;-------------------- HARDWARE DRIVERS------------------------; TEXT MODE LCD DRIVERS
; wait until LCD ready bit set
36
B6 90 02
84 80
26 F9
32
39
LcdReady
ready
PSHA
LDAA command_read
ANDA #BUSY
BNE ready
; loop if busy flag = 1
PULA
RTS
LCD_command_write
BD CA 23
B7 90 00
39
JSR LcdReady
STAA command_write
RTS
BD CA 23
B7 90 01
39
LCD_data_write
BD CA 23
86 01
BD CA 2D
39
clr_screen
86
BD
86
BD
BD
86
C6
BD
39
InitLcd
38
CA
0C
CA
CA
00
00
CA
JSR LcdReady
STAA data_write
RTS
JSR LcdReady
LDAA #1
JSR LCD_command_write
RTS
2D
2D
3B
59
LDAA #38H
JSR LCD_command_write
LDAA #0CH
JSR LCD_command_write
JSR clr_screen
LDAA #0
LDAB #0
JSR goto_xy
RTS
; goto_xy(x,y)
; entry: A = x position
;
B = y position
C1
26
8B
BD
39
00
06
80
CA 2D
C1
26
8B
BD
39
01
06
C0
CA 2D
goto_xy
BNE case1
CMPB #0
ADDA #80H
JSR LCD_command_write
RTS
39
case1
CMPB #1
BNE case2
ADDA #0C0H
JSR LCD_command_write
RTS
case2
RTS
; write ASCII code to LCD at current position
; entry: A
BD CA 34
putch_lcd
JSR LCD_data_write
Page 35 of 40
MON68.LST
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
CA71
CA72
CA72
CA72
CA72
CA72
CA72
CA72
CA72
CA72
CA74
CA76
CA77
CA77
CA79
CA7C
CA7E
CA7F
CA81
CA81
CA81
CA81
CA81
CA84
CA84
CA87
CA8A
CA8A
CA8C
CA8E
CA91
CA94
CA97
CA97
CA97
CA98
CA98
CA98
CA98
CA98
CA98
CA9A
CA9A
CA9D
CA9F
CAA1
CAA3
CAA3
CAA3
CAA6
CAA7
CAA9
CAAA
CAAA
CAAA
CAAA
CAAA
CAAC
CAAC
CAAF
CAB1
CAB2
CAB4
CAB4
CAB4
CAB4
CAB4
CAB6
CAB6
CAB9
CABB
CABD
CABE
CAC0
CAC0
CAC0
2/11/2558 17:06
39
RTS
; print strings on the LCD
; entry: IX pointed to string
A6 00
26 01
39
pstring
LDAA 0,X
BNE PSTRING1
RTS
DF
BD
DE
08
20
PSTRING1
STX
JSR
LDX
INX
BRA
B2
CA 6E
B2
F1
IX2
putch_lcd
IX2
pstring
; DEMO LCD 20X2 BIG LETTERS LCD
BD CA 44
DEMO_LCD
JSR InitLcd
CE CB 65
BD CA 72
LDX #TEXT1
JSR pstring
86
C6
BD
CE
BD
LDAA #0
LDAB #1
JSR goto_xy
LDX #TEXT2
JSR pstring
00
01
CA 59
CB 75
CA 72
39
RTS
; BINARY COUNTING
#1
86 00
DEMO_LED
B7
8D
8B
20
DEMOLOOP STAA GPIO1
BSR DEMODELAY
ADDA #1
BRA DEMOLOOP
80 00
04
01
F7
CE 00 00
09
26 FD
39
LDAA #0
DEMODELAY
LDX #0000
DEMODELAY1
DEX
BNE DEMODELAY1
RTS
; RUNNING DOT LED
PRM #0
86 01
RUN_DOT
LDAA #1
B7 80 00
8D F2
49
20 F8
RUN_DOT1 STAA GPIO1
BSR DEMODELAY
ROLA
BRA RUN_DOT1
; BCD COUNTING
#2
86 00
BCD_COUNTING LDAA #0
B7
8D
8B
19
20
BCD_COUNT1
80 00
E8
01
F6
STAA GPIO1
BSR DEMODELAY
ADDA #1
DAA
BRA BCD_COUNT1
Page 36 of 40
MON68.LST
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
CAC0
CAC0
CAC0
CAC0
CAC0
CAC0
CAC0
CAC0
CAC2
CAC4
CAC6
CAC8
CACA
CACA
CACB
CACD
CACD
CACF
CAD1
CAD2
CAD4
CAD6
CAD8
CAD8
CAD9
CADB
CADB
CADD
CADF
CAE0
CAE2
CAE4
CAE6
CAE7
CAE9
CAE9
CAEB
CAED
CAEF
CAF1
CAF3
CAF3
CAF4
CAF6
CAF6
CAF6
CAF6
CAF7
CAF7
CAF7
CAF7
CAF7
CAF7
CAF9
CAFB
CAFB
CAFD
CAFF
CB01
CB03
CB03
CB04
CB06
CB08
CB0A
CB0C
CB0E
CB0E
CB0E
CB0F
CB0F
CB0F
CB0F
CB0F
CB11
CB14
2/11/2558 17:06
; UPDATE CLOCK VARIABLES
; ENTER EVERY 10ms FROM IRQ INTERRUPT
SERVICE_IRQ
96
8B
97
81
26
CC
01
CC
64
2C
LDAA
ADDA
STAA
CMPA
BNE
SEC100
#1
SEC100
#100
EXIT_CLOCK
4F
97 CC
CLRA
STAA SEC100
96
8B
19
97
81
26
LDAA SEC
ADDA #1
DAA
STAA SEC
CMPA #60H
BNE EXIT_CLOCK
CD
01
CD
60
1E
4F
97 CD
CLRA
STAA SEC
96
8B
19
97
81
26
4F
97
CE
01
CE
LDAA MIN
ADDA #1
DAA
STAA MIN
CMPA #60H
BNE EXIT_CLOCK
CLRA
STAA MIN
96
8B
97
81
26
CF
01
CF
24
03
LDAA HOUR
ADDA #1
STAA HOUR
CMPA #24H
BNE EXIT_CLOCK
CE
60
10
4F
97 CF
CLRA
STAA HOUR
EXIT_CLOCK
3B
RTI
; CLOCK PROGRAM #3 TEST 10ms TICK MAKING CLOCK DISPLAY
86 7E
97 F8
CLOCK_PGM
LDAA #7EH
STAA $F8
; INSERT HEX CODE FOR JMP SERVICE_IRQ
86
97
86
97
CA
F9
C0
FA
LDAA
STAA
LDAA
STAA
#SERVICE_IRQ>>8
$F9
#SERVICE_IRQ&$FF
$FA
4F
97
97
97
97
97
CC
CD
CE
CF
D0
CLRA
STAA
STAA
STAA
STAA
STAA
SEC100
SEC
MIN
HOUR
RUNSTOP
0E
CLI
; ENABLE IRQ
DISPLAY_CLOCK
96 CC
BD C1 C3
LDAA SEC100
JSR DATA_DISPLAY
Page 37 of 40
MON68.LST
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
CB14
CB16
CB18
CB1A
CB1C
CB1F
CB1F
CB21
CB23
CB25
CB25
CB27
CB29
CB2B
CB2B
CB2B
CB2B
CB2E
CB2E
CB30
CB32
CB34
CB34
CB36
CB38
CB38
CB39
CB3B
CB3D
CB3F
CB41
CB41
CB41
CB41
CB41
CB41
CB43
CB43
CB43
CB43
CB43
CB43
CB43
CB43
CB43
CB43
CB43
CB43
CB46
CB48
CB48
CB48
CB4A
CB4C
CB4C
CB4C
CB4C
CB4E
CB4E
CB50
CB50
CB50
CB50
CB50
CB52
CB55
CB55
CB58
CB5A
CB5A
CB5C
CB5D
CB5F
CB5F
CB62
CB64
2/11/2558 17:06
96
97
96
97
BD
CD
85
CE
84
C1 D1
LDAA SEC
STAA HL+1
LDAA MIN
STAA HL
JSR ADDRESS_DISPLAY
96 8E
8A 40
97 8E
LDAA BUFFER+2
ORAA #$40
STAA BUFFER+2
96 90
8A 40
97 90
LDAA BUFFER+4
ORAA #$40
STAA BUFFER+4
BD C8 DA
JSR SCAN1
96 93
81 FF
27 0D
LDAA KEY
CMPA #-1
BEQ SKIP_SHOW_KEY
81 21
26 09
CMPA #21H
BNE SKIP_SHOW_KEY
4F
97
97
97
97
CLRA
STAA
STAA
STAA
STAA
CC
CD
CE
CF
;
SEC100
SEC
MIN
HOUR
STAA GPIO1
SKIP_SHOW_KEY
20 CC
BRA DISPLAY_CLOCK
;
;
;
;
CHECK KEY
+
CODE
ADDR CODE
GO
CODE
PRESSED
21H
1BH
16H
DISPLAY_START_MSG
CE CB F5
DF B0
LDX #START_MSG+6
STX TEMP16
86 06
97 D1
LDAA #6
STAA K
DISPLAY_MSG1
86 20
LDAA #$20
97 D2
STAA J
DISPLAY_START1
DE B0
BD C8 DD
LDX TEMP16
JSR SCAN2
7A 00 D2
26 F6
DEC J
BNE DISPLAY_START1
DE B0
09
DF B0
LDX TEMP16
DEX
STX TEMP16
7A 00 D1
26 E8
DEC K
BNE DISPLAY_MSG1
Page 38 of 40
MON68.LST
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2912
2913
2913
2914
2915
2915
2916
2917
2918
2919
2920
2921
2921
2922
2922
2923
2923
2924
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
CB64
CB65
CB65
CB65
CB65
CB65
CB65
CB65
CB65
CB65
CB65
CB65
CB65
CB65
CB65
CB65
CB65
CB65
CB65
CB65
CB65
CB65
CB65
CB65
CB6B
CB75
CB7B
CB88
CB88
CB8E
CBA7
CBA7
CBA7
CBA7
CBA7
CBA7
CBAD
CBB6
CBBC
CBD0
CBD6
CBDD
CBE3
CBEF
CBEF
CBF0
CBF1
CBF2
CBF3
CBF4
CBF5
CBF6
CBF7
CBF8
CBF9
CBFA
CBFB
CBFB
CBFB
CBFC
CBFD
CBFE
CBFF
CC00
CC01
CC02
CC03
CC04
CC05
CC06
CC07
CC08
CC09
CC0A
CC0B
CC0B
2/11/2558 17:06
39
RTS
;ssssssssssssssssssssssssss STRINGS CONSTANT sssssssssssssssssssssssssss
;
20204D6F746FTEXT1
726F6C61203638303200
4D6963726F70TEXT2
726F636573736F72204B697400
.BYTE "
Motorola 6802",0
.BYTE "Microprocessor Kit",0
0D0A36383032TEXT3
.BYTE 13,10,"6802 MICROPROCESSOR KIT V1.0",0
204D4943524F50524F434553534F52204B49542056312E3000
0D0A50726573DOWNLOAD .BYTE 13,10,"Press key GO",0
73206B657920474F00
0D0A436C6963DOWNLOAD2 .BYTE 13,10,"Click File>Send File>..",0
6B2046696C653E53656E642046696C653E2E2E00
0D0A4E6F2065COMPLETE .BYTE 13,10,"No error..",0
72726F722E2E00
0D0A43686563ERROR_FOUND .BYTE 13,10,"Checksum error!",0
6B73756D206572726F722100
00
00
9B
BD
BF
AF
00
00
00
00
00
00
START_MSG .BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE 0AFH
.BYTE
.BYTE 0
.BYTE 0
.BYTE 0
.BYTE 0
.BYTE
BD
30
9B
BA
36
AE
AF
38
BF
BE
3F
A7
8D
B3
8F
0F
SEGTAB
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
.BYTE
030H
09BH
0BAH
036H
0AEH
0AFH
038H
0BFH
0BEH
03FH
0A7H
08DH
0B3H
08FH
00FH
0
0
9BH
0BDH
0BFH
0
0
0BDH
;'1'
;'2'
;'3'
;'4'
;'5'
;'6'
;'7'
;'8'
;'9'
;'A'
;'B'
;'C'
;'D'
;'E'
;'F'
;'0'
Page 39 of 40
MON68.LST
2/11/2558 17:06
2958
CC0B
2959
CC0B
; Key-posistion-code to key-internal-code conversion table.
2960
CC0B
2961
CC0B
KEYTAB:
2962
CC0B 03
K0 .BYTE 03H ;HEX_3
2963
CC0C 07
K1 .BYTE 07H ;HEX_7
2964
CC0D 0B
K2 .BYTE 0BH ;HEX_B
2965
CC0E 0F
K3 .BYTE 0FH ;HEX_F
2966
CC0F 20
K4 .BYTE 20H ;NOT USED
2967
CC10 21
K5 .BYTE 21H ;NOT USED
2968
CC11 02
K6 .BYTE 02H ;HEX_2
2969
CC12 06
K7 .BYTE 06H ;HEX_6
2970
CC13 0A
K8 .BYTE 0AH ;HEX_A
2971
CC14 0E
K9 .BYTE 0EH ;HEX_E
2972
CC15 22
K0A .BYTE 22H ;NOT USED
2973
CC16 23
K0B .BYTE 23H ;NOT USED
2974
CC17 01
K0C .BYTE 01H ;HEX_1
2975
CC18 05
K0D .BYTE 05H ;HEX_5
2976
CC19 09
K0E .BYTE 09H ;HEX_9
2977
CC1A 0D
K0F .BYTE 0DH ;HEX_D
2978
CC1B 13
K10 .BYTE 13H ;STEP
2979
CC1C 1F
K11 .BYTE 1FH ;TAPERD
2980
CC1D 00
K12 .BYTE 00H ;HEX_0
2981
CC1E 04
K13 .BYTE 04H ;HEX_4
2982
CC1F 08
K14 .BYTE 08H ;HEX_8
2983
CC20 0C
K15 .BYTE 0CH ;HEX_C
2984
CC21 12
K16 .BYTE 12H ;GO
2985
CC22 1E
K17 .BYTE 1EH ;TAPEWR
2986
CC23 1A
K18 .BYTE 1AH ;CBR
2987
CC24 18
K19 .BYTE 18H ;PC
2988
CC25 1B
K1A .BYTE 1BH ;REG
2989
CC26 19
K1B .BYTE 19H ;ADDR
2990
CC27 17
K1C .BYTE 17H ;DEL
2991
CC28 1D
K1D .BYTE 1DH ;RELA
2992
CC29 15
K1E .BYTE 15H ;SBR
2993
CC2A 11
K1F .BYTE 11H ;2994
CC2B 14
K20 .BYTE 14H ;DATA
2995
CC2C 10
K21 .BYTE 10H ;+
2996
CC2D 16
K22 .BYTE 16H ;INS
2997
CC2E 1C
K23 .BYTE 1CH ;MOVE
2998
CC2F
2999
CC2F
3000
CC2F
3001
CC2F
; VECTOR NMI,RESET AND IRQ
3002
CC2F
3003
CC2F
3004
FFF8
.ORG 0FFF8H
3005
FFF8
3006
FFF8 00 F8
.BYTE 0,0F8H ; RELOCATE IRQ TO RAM VECTOR AT 00F8H
3007
FFFA
3008
FFFA
3009
FFFA
.ORG 0FFFAH
; SWI VECTOR
3010
FFFA
3011
FFFA C6 5C
.BYTE SWI_SERVICE>>8,SWI_SERVICE&$FF
3012
FFFC
3013
FFFC
3014
FFFC
.ORG 0FFFCH
; NMI VECTOR
3015
FFFC
3016
FFFC C6 55
.BYTE NMI_SERVICE>>8,NMI_SERVICE&$FF
3017
FFFE
3018
FFFE
3019
FFFE
.ORG 0FFFEH
3020
FFFE
3021
FFFE C0 00
.BYTE $C0,00
; RESTART
3022
0000
3023
0000
3024
0000
3025
0000
3026
0000
.END
3027
0000
3028
0000
3029
0000
tasm: Number of errors = 0
Page 40 of 40
NOTE