>From a BBS I am on

Jun 15, 2003 14:54 from Scalar

The Apple II series has assembly programming built into the system ROM.

In all version of the ROM, the monitor provides a "disassembler", which will
take an arbitrary bank of memory and attempt to spit it out as assembly code.
This is the "L" command in the system monitor.

In the Applesoft/Floating point Apples (all Apple IIe and onward, later II+
models) there is also a built-in code assembler, accessible with the "!"
command in the monitor.

Note that that later IIe could be "enhanced" with a revision upgrade of the CPU
from "6502" to "65C02" which are functionally identical but the 65C02
supporting some additional opcodes. These opcodes are not known to the built-in
assembler/disassembler in the enhanced IIe. (Don't know if a IIc or IIgs will
display them.)

Getting to the disassembler/assember:

>From basic, enter the monitor with the command "CALL-151"

]CALL -151

*

At the monitor prompt type a memory address and an "L" to dump that region as
assembly code. It will disassemble as much as will fit the screen, so the data
amount varies with the length of the opcodes.

*F800L

F800-   4A          LSR
F801-   08          PHP
F802-   20 47 F8    JSR   $F847
F805-   28          PLA
F806-   A9 0F       LDA   #$0F
F808-   90 02       BCC   $F80C
F80A-   69 E0       ADC   #$E0
F80C-   85 2E       STA   $2E
F80E-   B1 26       LDA   ($26),Y
F810-   45 30       EOR   $30
F812-   25 2E       AND   $23
F814-   51 26       EOR   ($26),Y
F816-   91 26       STA   ($26),Y
F818-   60          RTS
F819-   20 00 F8    JSR   $F800
F81C-   C4 2C       CPY   $2C
F81E-   B0 11       BCS   $F831
F820-   C8          INY
F821-   20 0E F8    JSR   $F8OE
F824-   90 F6       BCC   $F81C
*

It will attempt to disassemble any type of data, and cannot distinguish between
non-machine code and real code. In fact if you give it the wrong starting
address (F801L rather than F800L) it will not know the difference and you'll
possibly see what looks like valid assembly but is in fact completely wrong.
It'll spit out wrong data until there's an error and it prints ??? or BRK until
the data is good again.


To access the assembler, just type "!" on a monitor line by itself.

*!

!

To start assembling, specify the starting memory range and a colon followed by
the first opcode. To keep on assembling, start each line with a space followed
by the opcode. To finish, type return on a line by itself to exit the
assembler. Here's a very simple program I just made up to fill a bank of memory
with 256 copies of the number 3:

!300:LDY #0
! LDA #3
! STA $2000,Y
! INY
! CPY #0
! BNE 304
! RTS
!

*

As you type each line, it will be replaced with the assembled code.

!300:LDY #0

is replaced by

0300-   A0 00          LDY #00

Note that I did not know the branch target address for BNE UNTIL I had entered
the code. This is one of the big limitations of this built-in assembler. It
cannot calculate the address of branching for you. For larger handwritten
programs like this, sometimes the branch is entered invalid and then you go
back and fix it once the code is fleshed out and the target address can be
known.

This is purely a line-editor assembler, and can only encode what you tell it.
If you don't know the branch target yourself, the built-in Apple II assembler
cannot help you.



If you want a better assembler, you need a product like MERLIN, which offers a
word-processor environment to edit the code, along with the ability to used
labels to mark branches. This way you can designate a spot in the code as a
branch target, and the MERLIN assembler will automatically determine the target
address for you when you are done and compile the code.

MERLIN also supports labeling commonly-used data locations, so that you can use
a common name rather than direct addresses which may mean nothing to the
beginner at assembly.


A third benefit of an assembly-language compiler is something called "memory
portability". The branch opcodes are location independant, and the programming
code can be used anywhere in memory and still run properly. However branch
codes can only run code 128 bytes forward or back from the current location.
branching further requires a JMP command.

JMP is an absolute address, and the target address of a JMP will not change if
the program is moved in memory. A program written for the 0300-03CF memory
block that uses a JMP will crash if you relocate it to 2000-20CF and try to run
it there. If written by hand, you'd have to manually re-edit the code to redo
the JMP's so they will point to valid machine code in the new memory range.

With MERLIN, you can change the address where the code is to be run, and when
compiled MERLIN will automatically retarget all the JMP's so that the program
will still work when run in a different section of memory.


[Antique And Older Computers> msg #24007

Steve Conrad
810 Main
Henrietta, MO 64036
816-494-5692                                     http://sasha91.0pi.com
www.fortunecity.com/rivendell/stonekeep/600

   It is no secret (nor should it come as any surprise) that humankind's
most noble impulses often surface during the most trying of times, that
human spirit rises to the challenge when faced with adversity, that human
strength is born from human failings...Is it any wonder, then, that the
SDF-1 crew became a tighter family after the fortress had been exiled than
it had before?

     From the log of Captain (later Admiral) Henry Gloval



-- 
Apple2list is sponsored by <http://lowendmac.com/> and...

    /      Buy books, CDs, videos, and more from Amazon.com     \
   / <http://www.amazon.com/exec/obidos/redirect-home/lowendmac> \

      Support Low End Mac <http://lowendmac.com/lists/support.html>

Apple2list info:        <http://lowendmac.com/lists/apple2.html>
  --> AOL users, remove "mailto:";
Send list messages to:  <mailto:[EMAIL PROTECTED]>
To unsubscribe, email:  <mailto:[EMAIL PROTECTED]>
For digest mode, email: <mailto:[EMAIL PROTECTED]>
Subscription questions: <mailto:[EMAIL PROTECTED]>
Archive: <http://www.mail-archive.com/apple2list%40mail.maclaunch.com/>

Using a Mac? Free email & more at Applelinks! http://www.applelinks.com

Reply via email to