CSC270 Assembling 6800 Assembly Programs on OSX/Windows
--D. Thiebaut (talk) 10:59, 19 March 2016 (EDT)
These instructions will allow you to install TASM, the Turbo Assembler, on your OSX/Windows machine, and generate listings of 6800 assembly programs.
Installation on Windows
- To download TASM, go to this page, and go to the end of the page, to find the download link.
- Follow the directions to install TASM. You won't need TLINK or any of the other executables for CSC270.
- Jump to the subsection below on testing your installation.
Installation on Mac OSX
- If you haven't already done so, you will need to install wine, which is a Windows Emulator for the Mac, and will allow you to run a large number of Windows programs on your Mac. This page has instructions on how to install wine. There are other tutorials on the Web, if this one doesn't work for you.
- To download TASM, go to this page, and go to the end of the page, to find the download link.
- The downloaded file should end up in your ~/Downloads directory.
- Double click on the tgz file you have downloaded. It should expand to a folder named TASM.
- Copy TASM32.EXE from the BIN folder into a folder where you keep all your executables. On my Mac, I keep all executable in a folder called ~/bin.
- Make sure the ~/bin folder is in your path, which is defined in your ~/.bash_profile file:
PATH=/Users/thiebaut/bin:/Users/thiebaut/Qt5.2.0/5.2.0/clang_64/bin:$PATH:.
- With your favorite editor (mine is emacs) create a new bash script called tasm. This is how I do it in a Terminal window:
cd cd bin emacs -nw tasm
- and copy the following lines in it:
#! /bin/bash wine ~/bin/TASM32.EXE $@
- (Note: there should be no space at the beginning of each line, and the #! line should be the first one in the script.)
- Make the script you just created executable:
chmod +x ~/bin/tasm
- You are now ready to test your installation.
Testing the Installation
- Still in Terminal, change to a new directory where you will keep all your 6800 assembly programs.
- Create a new file in this directory. It will contain a collection of macros that emulate all the 6800 instructions. This file is called macros.asm and is available macros.asm.
- Create a sample 6800 assembly file, which you will call 6800.asm:
PAGE 65,132 TITLE Example 6800 Program ; --------------------------------------------------------------- ; 6800.asm ; D. Thiebaut ; Demonstrates the use of byte variables, jumps, and ; functions. ; --------------------------------------------------------------- include macros.asm data SEGMENT ASM6800 ORG 0001 a DB 3 b DB 4 result DB ? ENDS code SEGMENT ORG 0010 LDAA a ADDA b STAA result INFLOOP: JSR 0FE52H DB 0B0H JSR DELAY JSR 0FE52H DB 0EDH JSR DELAY BRA INFLOOP DELAY: LDX # 0FFFFh LOOP0: DEX BNE LOOP0 RTS code ENDS END
- Save the file in your new folder. You should now have two files there, 6800.asm and macros.asm.
- Assemble 6800.asm and generate a listing file:
tasm /l 6800.asm Turbo Assembler Version 5.0 Copyright (c) 1988, 1996 Borland International Assembling file: 6800.asm **Error** 6800.asm(24) LDAA(13) Relative quantity illegal **Error** 6800.asm(25) ADDA(13) Relative quantity illegal **Error** 6800.asm(26) STAA(9) Relative quantity illegal Error messages: 3 Warning messages: None Passes: 1
- Don't worry about the errors. They are generated by tasm, and it doesn't like some of the memory accesses we are doing at the 6800 level. The good news is that tasm generated a listing file nonetheless, and it should be in your folder:
ls 6800.LST 6800.asm 6800.asm~ macros.asm macros.asm~
- List/print 6800.LST to get the opcodes for the instructions:
cat 6800.LST
- You should get a listing similar to the one below:
Turbo Assembler Version 5.0 03-19-16 11:13:28 Page 1 6800.asm Example 6800 Program 1 ; --------------------------------------------------- 2 ; 6800.asm 3 ; D. Thiebaut 4 ; Demonstrates the use of byte variables, jumps, and 5 ; functions. 6 ; -------------------------------------------------- 7 8 ; 9 ; --------------------------------------------------- 10 include macros.asm 1 11 1 12 13 14 0000 data SEGMENT 15 ASM6800 16 ORG 0001 17 0001 03 a DB 3 18 0002 04 b DB 4 19 0003 ?? result DB ? 20 0004 ENDS 21 22 0000 code SEGMENT 23 ORG 0010 24 LDAA a 1 25 0010 96 01r DB 096h,i 26 ADDA b 1 27 0012 9B 02r DB 09Bh,i 28 STAA result 1 29 0014 97 03r DB 097h,i 30 31 0016 INFLOOP: JSR 0FE52H 1 32 0016 BD DB 0BDh 1 33 0017 FE52 DW OFFSET 0FE52H 34 0019 B0 DB 0B0H 35 JSR DELAY 1 36 001A BD DB 0BDh 1 37 001B 0026r DW OFFSET DELAY 38 JSR 0FE52H 1 39 001D BD DB 0BDh 1 40 001E FE52 DW OFFSET 0FE52H 41 0020 ED DB 0EDH 42 JSR DELAY 1 43 0021 BD DB 0BDh 1 44 0022 0026r DW OFFSET DELAY 45 BRA INFLOOP 1 46 0024 20 DB 020h 1 47 0025 F0 DB i 48 49 0026 DELAY: LDX # 0FFFFh 1 50 0026 CE DB 0CEh 1 51 0027 FFFF DW 0FFFFh 52 0029 LOOP0: DEX 1 53 0029 09 DB 009h 54 BNE LOOP0 1 55 002A 26 DB 026h 1 56 002B FD DB i 57 RTS 1 58 002C 39 DB 039h 59 60 002D code ENDS