Saturday, May 20, 2017
Building a 68000 Single Board Computer - Programming Examples
I earlier mentioned the book 68000 Assembly Language Programming, Second Edition, by Lance A. Leventhal, Doug Hawkins, Gerry Kane, and William D. Cramer. The book has many complete programming examples listed in it that help explain 68000 programming.
The book recommends entering and running the programs ona 68000-based system. I've been doing that, and it makes the code much clearer than simply reading the text. With the 68000 TUTOR software it is very easy to disassemble code in memory, display amd enter memory values, and run the program examples. I typically step through the code an instruction at a time using the trace function, looking at the values of the registers and selected memory locations.
Here is a typical disassembly of some example code:
TUTOR 1.3 > MD 4000 24 ;DI
004000 307C6001 MOVE.W #24577,A0
004004 7003 MOVEQ.L #3,D0
004006 4281 CLR.L D1
004008 4282 CLR.L D2
00400A 6008 BRA.S $004014
00400C D241 ADD.W D1,D1
00400E 3601 MOVE.W D1,D3
004010 E54B LSL.W #2,D3
004012 D243 ADD.W D3,D1
004014 1418 MOVE.B (A0)+,D2
004016 D242 ADD.W D2,D1
004018 51C8FFF2 DBF.L D0,$00400C
00401C 33C100006004 MOVE.W D1,$00006004
004022 4E75 RTS
While I could enter the programs as hex data from the text, or use TUTOR's built-in assembler, I have been entering the source code on a Linux computer and cross-assembling it using the VASM assembler. Then I can load the Motorola hex (run) file generated by the assembler into the TS2 computer over the serial port.
Here is the source code corresponding to the disassembly above:
DATA EQU $6000
PROGRAM EQU $4000
STRING EQU $6001 ADDRESS OF FOUR DIGIT BCD STRING
RESULT EQU $6004 ADDRESS OF RESULT
ORG PROGRAM
PGM_7_4A MOVEA.W #STRING,A0 POINTER TO FIRST BCD DIGIT
MOVEQ #4-1,D0 NUMBER OF DIGITS(-1) TO PROCESS
CLR.L D1 CLEAR FINAL RESULT - D1
CLR.L D2 CLEAR DIGIT REGISTER
BRA.S NOMULT SKIP MULTIPLY FIRST TIME
LOOP ADD.W D1,D1 2X
MOVE.W D1,D3
LSL.W #2,D3 8X = 2X * 4
ADD.W D3,D1 10X = 8X + 2X
NOMULT MOVE.B (A0)+,D2 NEXT BCD DIGIT,(D2[15-8] UNCHANGED)
ADD.W D2,D1 ADD NEXT DIGIT
DBRA D0,LOOP CONTINUE PROCESSING IF STILL DIGITS
MOVE.W D1,RESULT STORE RESULT
RTS
END PGM_7_4A
The VASM assembler is almost entirely compatible with the Motorola assembler and I have had to make only a very few changes to the code listed in the book. I did find a couple of errors, too.
So far I have entered almost four chapters worth of examples, just over thirty programs. I have placed the code on my github account. I'll continue doing so until I either get bored or finish the examples.
assembly code examples
ReplyDeleteGet current Segment Values