COMMODORE-PLUS4-ENGLISH-TURBO-ASSEMBLER-MACRO-INSTRUCTION-AND-MORE --------------------------------------------------------------------------------------------------- TOOL: TURBO-ASSEMBLER-MACRO {TASM} Language: Assembler Extra: none Author: Misel Zivanovic Credits: - RAT - {I don't have other names!} Note 0: (C) 09th AUGUST 2026 - www.lived.ch, mzretro.ch Note 1: This is a revision of the original German test file.txt file made by -RAT- for TURBO-ASSEMBLER-v6.0 in early 1990's! Note 2: I added my examples, source codes and also modified the original disk with TURBO-ASSEMBLER-MACRO. Now it is easier to use. The Floppy Disk was credited properly. Instructions for MACRO-PART are missing and will be added in due time! Note 3: MY MINI REVIEW AND ADDITIONAL INFORMATION FROM THE LINE 575 --------------------------------------------------------------------------------------------------- REVISION 1.2 --------------------------------------------------------------------------------------------------- 711 |==================================| | TURBO-ASSEMBLER-MACRO-EXTENDED! | |==================================| |Original doc with some grammatical| | error corrections & adaptation! | | and necessary modifications | |==================================| | EASIER TO USE WITH A LOADER! | |==================================| This time I'm presenting a very good assembler; it was converted by CSORY in 1992!!! [Note www.mzretro.ch] - 8th AUGUST, 2026 [THIS PART HERE OF THE ORIGINAL GERMAN TEXT IS NOT VALID! NOT FOR TASv6.0 and also NOT FOR TASM ] [YOU CAN RE-ENTER BOTH ASSEMBLER EDITORS! More information about further below... ] --------------------------------------------------------------------------------------------------- | Except for one small flaw: Once you exit the program, you can't return to the main program. | --------------------------------------------------------------------------------------------------- However, the advantage of this program is its capacity, which extends to well over 2000 lines (I didn't feel like going any further) because the instructions are stored in only 4 bytes. Furthermore, you don't need to work with line numbers or similar stuff here. You simply type in the source code. It is automatically listed formatted as soon as you move your cursor away from the active line. I can only strongly recommend this compiler to anyone who wants to program in Assembler because it's one of the best I've ever seen on the Plus/4. The built-in one is useless. THE SOURCE CODE: =================================================================================================== In TURBO-ASSEMBLER-v6.0/TURBO-ASSEMBLER-MACRO, source code is written like in a word processor, i.e., without line numbers. 1. Each line contains a maximum of one assembly instruction. 2. A maximum of one label may precede an assembly instruction on the same line. 3. A space must be left between the instruction and the label so that the computer can separate the instruction and the label. 4. Comments are indicated by a semicolon, which must precede the comment. 5. A label can also appear alone on a line. =================================================================================================== Example: ===================== *= $1000 ldx #$00 loop txa sta $0c00,x inx cpx #$07 bne loop rts ===================== INVOICES IN SOURCE TEXT / LOW-HIGH-BYTE { < / > } =================================================================================================== TURBO-ASSEMBLER-v6.0/TURBO-ASSEMBLER-MACRO allows the four basic arithmetic operations {+ - * / } In addition, the less-than sign { < } and greater-than sign { > } can be used for the low and high bytes, respectively! Example: ===================== *= $1000 sei lda #start sta $0315 cli rts start lda $a5 and #31 cmp #5 beq color cmp #10 beq color exit jmp $ce0e color inc $ff19 jmp exit ===================== ALLOWED NUMBER TYPES: =================================================================================================== As explained in the previous assembly course, number types are indicated by a character after LDA #. Here are a few examples: LDA #$00 remains as is because the "$" represents a hexadecimal number. LDA #%00001111 is assembled with LDA #$0f because 00001111 in binary is $0f in hexadecimal. LDA #255 is assembled with LDA #$ff {because 255 is $ff in decimal}. LDA #"A" is assembled with LDA #$41 because $41 is the code for the letter "A". LDA DATA loads the value of the memory location labeled "DATA" in the source code. LDA #4+4 is assembled with LDA #$08. SCREEN STRUCTURE =================================================================================================== The entire top section is for editing, and the second-to-last line is the command line, where error messages and commands are displayed (hence the name). In the bottom line, you will find the following indicators (from left to right): x: Shows the X position within the current line. LINE: Shows the line you are currently editing. BOT:$xxxx: Shows the endpoint of the SOURCE TEXT, i.e., the source code begins there. INSERT: This toggles CHAR and LINE on and off using (INS/DEL and ESC+INST/DEL). CHAR and LINE are turned on or off, i.e., inserting is on/off. LABELS =================================================================================================== Since TURBO-ASSEMBLER-v6.0/TURBO-ASSEMBLER-MACRO doesn't use line numbers (like in BASIC) or memory addresses (like in Assembler), the computer needs to be told where to jump to at a branch or JMP. This is done with labels. Labels are short keywords or abbreviations that precede the assembler instruction. {See the last example above} These labels have the advantage that you can insert any number of commands between the lines without changing anything about the label itself. In the built-in assembler, you would have to change the addresses for each line you wanted to insert. In the Machine Language Monitor (MLM), this would look like this: .2000 ldx #$00 .2002 sta $0c00,x .2005 inx .2006 cpx #32 .2008 bne $2005 .200a rts THE COMMANDS: =================================================================================================== The commands, or rather the editing functions, are controlled partly via function keys, but mostly via the ESC functions. CONTROL =================================================================================================== CURSOR = Control RETURN = Next line F1 = Go back 20 lines (if possible). F7 = Go forward 20 lines F4 = Jump to the first line. F8 = Jump to the last line ESC + Up = Jump to the top line of the screen. ESC + Down = Jump to the bottom line of the screen. ESC + N = GO TO LINE #xx Jumps to line xx ESC + F = FIND: string/text {Searches for ???? in the source code} ASSEMBLE =================================================================================================== ESC + 3 = ASSEMBLE/COMPILE {so you can run it in machine code } {more on this later} ESC + 4 = PRINT FILE {Lists the assembled file [if already written] with its memory address, } {codes, commands, and saves it as a SEQ file to disk (can then be, for example, } {also embedded in text - [very handy for me!] } ESC + 5 = OBJECT FILE {Saves the assembled source code to disk as a program file } EDITING THE SOURCE TEXT =================================================================================================== ESC + U = LIST LABELS Y/N {Lists all used labels to provide an overview in larger programs } {Once all are listed, pressing the appropriate key returns you to the editing } {program back to the editing program } SEARCH AND REPLACE --------------------------------------------------------------------------------------------------- ESC + R = REPLACE text BY text {This function allows you to replace commands or labels with other text. } {After entering the two texts, the cursor jumps to the nearest found entry. } ESC + T = REPLACE {When this function is called, the values ​​specified by "ESR+R" are replaced } ESC + Y = Same as ESC+T {When this function is called, the values ​​specified by "ESR+R" are replaced } BLOCKS --------------------------------------------------------------------------------------------------- ESC + B = BLOCK COMMAND {see further below } {only if block is selected with ESC+M } WRITE@KILL@COPY WRITE: Writes the block to disk. KILL: Deletes the block [with confirmation prompt] COPY: Copies the block to the cursor position --------------------------------------------------------------------------------------------------- INSERT: --------------------------------------------------------------------------------------------------- ESC + 2 = { Inserts a comment line [";-----------------"] } ESC + RET = { Inserts a line } ESC + = { Toggles the "INSERT LINE SHIFT+INST" mode on or off } SHIFT+INST = { Toggles "INSERT CHAR" mode on/off, depending on the setting } MARKERS =================================================================================================== ESC + M = SET MARK 0-9,S,E {Sets a marker in the current line } ESC + ; = KILL MARK {Deletes a marker } ESC + : = ISED MARKERS {Shows which markers have already been used. If they are set, it displays } {the line number here } ESC + G = GO TO MARK #xx {You can use "ESC+M" to mark different positions [0-9,S,E - where S and E } {mark a block]. This function allows you to jump to one of these markers } =================================================================================================== FLOPPY DISK OPERATIONS =================================================================================================== ESC + L = LOAD FILE {Load saved source code } ESC + S = SAVE FILE {Saves the source code to disk } ESC + @ = DISK STATUS {Displays the disk status } ESC + * = DIRECTORY {Displays the disk contents } ESC + D = DISK COMMAND {Sends a disk command to the floppy drive } ESC + W = WRITE FILE {Saves the entire program as a block in SEQ format } ESC + E = ENTER FILE {This function allows you to insert a saved block at a desired location position } ESC+SHIFT S= SAVE filename FROM $1000 TO $2000 {Saves the memory range from $???? to $???? } ESC+SHIFT L= LOAD filename FROM $???? {Loads a program to $???? [useful for converting routines that reside in the } {screen memory of the C-64] } =================================================================================================== WORKING WITH MEMORY =================================================================================================== ESC + I = FILL MEMORY FROM $???? TO $???? WITH $?? {Fills the selected memory area [the range available for coding is specified] } {from $xxxx to $yyyy with the value $zz } {Be careful not to overwrite the source code with the second value } ESC + J = DUMP MEMORY FROM $xxxx to $yyyy {Displays a selected memory area on the screen [as shown in the monitor } {M ???? ????]. Pressing SPACE, during the operation interrupts the process } {Pressing RUN/STOP terminates it } ESC + V = ZEROPAGE MAP {Displays a zero-page overview ["+" = occupied and "-" = free] } ESC + 6 = DATA FROM $0000 to $0000 {Retrieves the codes from $???? to $???? into the source code and saves them there } {as ".BYT" Values. [.BYT see PSEUDO OPCODES] } =================================================================================================== OTHER HELPFUL =================================================================================================== ESC + "+" = $0000 + $0000 = $0000 {The computer calculates the sum of two hexadecimal numbers for you } ESC + "-" = $0000 - $0000 = $0000 {The computer calculates the difference of two hexadecimal numbers for you } ESC + K = F2, F3, F5, F6 - SEQUENCE {The previously mentioned keyboard layout } ESC + O = ENVIRONMENT COLORS {Changes the colors [three options] } ESC + P = EOR code $xx (?) {[Unclear how this is working!] } F2 = FUNCTION KEY F2 {This key, like F3, F5, and F6, can be assigned a function [with ESC+K]. This key } {is normally assigned the PSEUDO opcode ".WORD". [More on this later] } F3 = FUNCTION KEY F3 {This key is assigned the pseudo-opcode ".BYT". [This key can also be assigned } {with ESC+K] } F5 = FUNCTION KEY F5 {Absolutely avoid this KEY, as it has a limited function!! } {It's actually causing a 100% system crash! You can or MUST assign a new } {functionality to this F-Key as soon as possibly or your PC is doomed } {Effecting only TURBO-ASSEMBLER-v6.0! } {NOTE: IT'S WORKING JUST FINE WITH TURBO-ASSEMBLER-MACRO! } ESC + 1 = EXIT TURBOASSEMBLER-v6.0 or TURBO-ASSEMBLER-MACRO {Program ENDS! Jump immediately to BASIC! } {Re-enter TURBO-ASSEMBLER-v6.0 with SYS 1880 } {Re-enter TURBO-ASSEMBLER-MACRO with SYS 758 } ESC + C = COLD START Y/N {Performs a cold start, i.e., a RESET } =================================================================================================== BLOCKS =================================================================================================== With TURBO-ASSEMBLER-v6.0/TURBO-ASSEMBLER-MACRO, it is possible to select a block that you can copy, delete, or save as needed. This makes it possible, for example, to create a routine library, as these saved blocks can be freely chained together. Selecting a block: To select the beginning of the block, press "ESC+M" and then the "S" key. The start is now selected. Now go to the end of the block you want and press "ESC+M" again, and then "E". A section should now be highlighted in blue. This section is your block. Copying a block: Move the cursor to the location where you want the block to appear and press "ESC+B", and then "C". The block will now be inserted at the desired location. Delete block: Press "ESC+B" followed by "K" to delete the block. Save block: Press "ESC+B" followed by "W" and then enter the name. The block will be saved to disk. Load block: Go to the location where you want to insert the block and press "ESC+E" followed by the filename. Source code as a block: Pressing ESC+W saves the entire program as a block. =================================================================================================== PSEUDO-OPCODES =================================================================================================== Pseudo-opcodes aren't actually true assembly instructions, but they're still important for writing a program because they store text, bytes, or similar data in memory. Previously, storing text in memory was very cumbersome because you had to look up the code for each letter. Pseudo-opcodes must always be preceded by a period (".") because the assembly language can't identify them as opcodes otherwise. .OFFS $xx Skips xx bytes at this location. .TEXT "text"` Stores the text "text" in memory at this location. .BYTE $xx` Stores the byte xx at this location. .WORD $xxyy Stores an address at this location in memory, i.e., $xxyy is stored in memory in LOW and HIGH BYTE format, e.g., WORD $2030 .2000 30 20 =================================================================================================== ERROR MESSAGES: =================================================================================================== If you enter a line incorrectly, it will be highlighted in RED. An error message will then appear in the second-to-last line of the screen: TOO MANY LABELS: Too many labels [this hasn't happened to me yet despite over 150 labels] LABLE NAMES OVERFLOW: When too many labels have names that are too long. [also hasn't happened yet] LABEL TOO LONG: Label too long [also hasn't happened yet because TURBO-ASSEMBLER-v6.0 shortens excessively long labels] ILEGAL MNEMONIC: Unknown command. This error message appears if, for example, you enter the command "LDS" instead of "LDA". ILLEGAL PSEUDO-OP: When you type a period followed by an unknown command. For example, use the command ".WRD" instead of ".WORD". QUATATION MARK MISSION: Quotation marks were omitted, for example, in LDA #"a . OPERATOR MISSING: This error occurs when you enter only "LDA" instead of "LDA #$10", meaning it doesn't know which value or address to load. MISSING OPERAND: If you forgot to specify the number, the computer doesn't know whether the number is a hexadecimal, binary, or decimal number. [e.g., instead of "WORD $10", only ".WORD 10"] CLOSE BRACKEST: The brackets were not closed. For example, with LDA #(3*2+4) ILLEGAL QUANTITY: Numbers too long or too large. [For example, "LDA#$0111111111111" this number is of course not representable in hexadecimal.] COMMA EXPECTED: A comma was expected. LABLE MISSING: If you tried to jump to a label that you haven't set yet. [For example, "JMP A" - if "A" isn't anywhere, where should the computer jump to?] OUT OF MEMORY: No more memory [never occurred despite over 2000 lines] TOO MANY LINES: Too many lines (also never occurred) =================================================================================================== ASSEMBLE [ESC + 3] =================================================================================================== During the assembly process, the SOURCE TEXT becomes a runnable machine language program if no errors occur. The following appears on the screen: *************************************** turbo ass. by wolfram roemhild copyright 85 by omikron germany corrected by tronic ***** end of pass 1 first adress : 1000 last adress : 102e ***** end of pass 2 first adress : 1000 last adress : 102e errors : 0 -> press 's' to start or other key to edit *************************************** The assembly process will be aborted at "ERRORS: Z" if an error occurs. These errors can be: [Note www.mzretro.ch] - August 8, 2026 =================================================================================================== [I haven't seen an "ERRORS: Z" error before. Therefore, I conclude that ] [this German description refers to a different [re]vision of TURBO-ASSEMBLER-v6.0! ] [However, it all looks largely compatible! ] =================================================================================================== DOUBLE DEFINED: A label was used more than once, which is not allowed, because the computer cannot choose whether to jump to $2000 or $3000. UNDEFINED STATEMENT: A jump to a label that has not yet been set was attempted. ILLEGAL QUANTITY: Value too large to be represented in hexadecimal form! [e.g., LDA #$23738122] BRANCH OUT OF RANGE: An attempt was made to perform a branch that is more than 128 bytes away from the current location. [Because branches are limited to a maximum of 128 bytes forward or backward! This does not apply to JMP or JSR!] BAD LINE: A line was already flagged as faulty by the editing program and displayed in RED. If no error has occurred, you can start the assembled program directly by pressing the "S" key. This will exit TURBO-ASSEMBLER-v6.0/TURBO-ASSEMBLER-MACRO, and unfortunately, you cannot return to the program. Therefore, save the source code beforehand. [Note www.mzretro.ch] - 08.08.2026 =================================================================================================== [It is possible to return to the editor of TURBO-ASSEMBLER-v6.0 by entering SYS 1880! ] [NOTE THAT TURBO-ASSEMBLER-v6.0 IS RUNNING UNSTABLE UNDER VICE Commodore Plus/4 Emulation! ] [SO YOU BETTER SAVE ANYWAY or even better, USE TURBO-ASSEMBLER-MACRO! ] [ ] [It is possible to return to the editor of TURBO-ASSEMBLER-MACRO by entering SYS 758! ] =================================================================================================== INPUT VARIANTS and HOW IT IS ASSEMBLED/COMPILED! =================================================================================================== SOURCE CODE ASSEMBLED SOURCE CODE LDA #$10 LDA #$10 LDA #1 LDA #$01 LDA #$0001 LDA #$01 LDA #%001111 LDA #$80 LDA #3+2 LDA #$05 LDA A LDA $2030 LDA "A" LDA $41 LDA #"A" LDA #$41 LDA 3+2222 LDA $08B1 LDA $03+2222 LDA $2225 LDA 3*3 LDA $09 LDA #A LDA #$20 LDA A LDA $2030 A .BYT $30 B .BYT $40 I hope you understood it at least somewhat, because it was a heck of a lot of work to find out everything. =================================================================================================== -RAT- =================================================================================================== [Note www.mzretro.ch] - 8th AUGUST, 2026 =================================================================================================== [YES, WE UNDERSTAND EVERYTHING! YOUR EFFORTS ARE HIGHLY APPRECIATED AND RESULTS ARE BEING, ] [AS YOU CAN SEE, "HARVESTED" AND USED EVEN IN 2026! ] [ ] [THANK YOU VERY MUCH! ] =================================================================================================== LINE 575 =================================================================================================== =================================================================================================== .. MINI ********** ********** ** ** **** ********** ** ** .. .. ********** ********** ** ** **** ********** ** ** .. .. ** ** ** ** ** **** ** ** ** .. .. ********** ********** ** ** **** ********** ** * ** .. .. ** ** ** ** ** **** ** ** *** ** .. .. ** ** ********** **** **** ********** ********* .. .. ** **** ********** ** **** ********** ** ** .. =================================================================================================== =================================================================================================== |||||THIS PART IS NOT AVAILABLE AS A SEPARATE .DOC ON MY WEBSITE WWW.MZRETRO.CH - WWW.LIVED.CH||||| ||||| IT HAS NOTHING TO DO WITH - RAT -, BUT IT DOES WITH CSORY ||||| ||||| WHO CONVERTED TURBO-ASSEMBLER-MACRO TO COMMODORE PLUS/4 IN 1992 ||||| =================================================================================================== =================================================================================================== PLUS4-TURBO-ASSEMBLER-MACRO-ENGLISH - MINI REVIEW -------------------------------------------------------------------------------------------------- TOOL: TURBO-ASSEMBLER-MACRO {Converted by CSORY for Commodore PLUS4} Language: Assembler Extra: none Author: Misel Zivanovic Note 0: (C) 6th OF AUGUST 2026 - www.lived.ch, mzretro.ch Note 1: THIS BELOW IS ONLY FOR TURBO-ASSEMBLER-MACRO! -------------------------------------------------------------------------------------------------- UPDATES: 09.08.2026 -------------------------------------------------------------------------------------------------- ************************************************************************************************** I found TURBO-ASSEMBLER-MACRO {TASM} which runs more stable than the TURBO-ASSEMBLER-v6.0 It had no loader and it asked you to do that manually. I made a small loader to spare you from unnecessary sweating. It's more comfortable that way... ENJOY! There was no instruction included for TASM! However, it looks to be TURBO-ASSEMBLER-v6.0 compatible, as I could see after trying it out a bit! UPDATE: 09.08.2026 - { you can use the instructions above this text! } { no MACROS so far, unfortunately } -------------------------------------------------------------------------------------------------- ************************************************************************************************** FIRST THING I MUST SAY: AFTER TRYING IT OUT FOR A WHILE, IT RUNS WAY STABLE COMPARED TO TURBO-ASSEMBLER-v6.0! I HAD ZERO CRASHES! IT DIDN'T CRASHED EVEN IN THE TAPE-BUFFER MEMORY AREA. IT DIDN'T ALSO PRODUCE USABLE CODE THERE AS IT WAS MESSED UP! BUT NO CRASHES THERE LIKE WITH TURBO-ASSEMBLER-v6.0! |***************************************************************************************************| | TURBO-ASSEMBLER-MACRO-FOR-COMMODORE-PLUS4 | |***************************************************************************************************| |**| |**| |**||TTTTTTTTTTTTT| |TT| |TTTTTTTTT| |TT| |TT| |*\ TURBO-ASSEMBLER-MACRO /*||**| |**||TTTTTTTTTTTTT| |TTTTTT| |TTTTTTTTT| |TTT| |TTT| |**\ TURBO-ASSEMBLER-MACRO /**||**| |**| |TT| |TT| |TT| |TT| |TTTTT| |TTTTT| |***\ TURBO-ASSEMBLER-MACRO /***||**| |**| |TT| |TT| |TT| |TT| |TT|TTT|TTT|TT| |****\ TURBO-ASSEMBLER-MACRO /****||**| |**| |TT| |TTTTTTTTTT| |TTTTTTTTT| |TT| |TTT| |TT| |*****|TURBO-ASSEMBLER-MACRO|*****||**| |**| |TT| |TT| |TT| |TT| |TT| |T| |TT| |****/ TURBO-ASSEMBLER-MACRO \****||**| |**| |TT| |TT| |TT| |TT| |TT| |TT| |***/ TURBO-ASSEMBLER-MACRO \***||**| |**| |TT| |TT| |TT| |TTTTTTTTT| |TT| |TT| |**/ TURBO-ASSEMBLER-MACRO \**||**| |**| |TT| |TT| |TT| |TTTTTTTTT| |TT| |TT| |*/ TURBO-ASSEMBLER-MACRO \*||**| |**| |**| |***************************************************************************************************| |***************************************************************************************************| WHERE CAN YOU PLACE YOUR CODE: --------------------------------------------------------------------------------------------------- WARNING: Use this FREE MEMORY areas EXACTLY or LESS than END / more than START addresses! NEVER go BELOW or OVER the areas! Note that the free memory space differs compared to TURBO-ASSEMBLER-v6.0 {in some parts} --------------------------------------------------------------------------------------------------- $0332-$03F2 - 00818-01010 - Cassette Buffer *{STRANGE BEHAVIOR} - 00193 Bytes * = { This area above is, as it looks, used by the TAS{M} for whatever. Assembling the code to } { this small 193 bytes are, always resulted in crash with TURBO-ASSEMBLER! With TASM, it is} { not a crash, fortunately, and you can see how the code is messed up and unusable even } { though TASM reported how it was assembled with zero errors! } { THIS AREA CANNOT BE RECOMMENDED! KEEP DISTANCE! } $03F3-$03F6 - 01011-01014 - Storage for cassette information {Available} - 00004 Bytes $03F7-$0436 - 01015-01078 - RS232 buffer {Available} - 00064 Bytes $0437-$0472 - 01079-01138 - Storage for cassette information {Available} - 00060 Bytes $0BE8-$0BFF - 03048-03071 - Free {Available} - 00018 bytes $0FE8-$0FFF - 04072-04095 - Free {Available} - 00024 Bytes START OF TURBO-ASSEMBLER-MACRO: In contrary to TURBO-ASSEMBLER-v6.0, TURBO-ASSEMBLER-MACRO has the default BASIC AREA $1000 free until the $89f0 {from where the TASM SOURCE CODE {your program} is going down!} In practice, it means that there is approximately 31.2KB free address room which is shared between the ASSEMBLY CODE/TASM SOURCE CODE within this area! In all cases, TURBO-ASSEMBLER-MACRO is much better than TURBO-ASSEMBLER-v6.0 with divided memory areas {and not to forget the TURBO-ASSEMBLER-CHRASHES in ALL MEMORY AREAS!} $1000-$89F0 - 04096-35312 - BASIC START AREA/TASM-SOURCE-CODE {Available} - 31216 Bytes GOOD TO KNOW {reminder}: If you use this memory area, do not forget that the TASM source code is going down from $89f0 to $1000 and if your assembler program starts at $1000, then it is going up towards $89f0. In other words, you cannot use the whole area for your program! And it also means, the less you comment, the larger can your assembly program be! --------------------------------------------------------------------------------------------------- THE FIRST THING YOU NOTICE ON THE ORIGINAL DISK IS THIS: diR 0 "turbo ass macro " 2a 66 "t.a.m.8b00/csory" prg 0 "^^^^^^^^^^^^^^^^" del 0 " it hasn't any" del 0 " boot-programm." del 0 "load it & write." del 0 "$0332 sei" del 0 " sta$ff3f" del 0 " jmp$8b00" del 0 "g 0332" del 598 blocks free. --------------------------------------------------------------------------------------------------- What I was thinking...? LET'S MAKE ONE! In BASIC, of course! Why make it complicated... It just need to do what it MUST do, nothing else! RESULT My TASM floppy disk: NOTE: CSORY was credited properly! diR 0 "www.mzretro.ch " 2a 3 "tasmloader.bas" prg 66 "tasm" prg 0 "----------------" seq 0 "turboassmacro " seq 0 "was converted by" seq 0 "-csory- to " seq 0 "commodore plus4 " seq 0 "in 1992 " seq 0 "----------------" seq 595 blocks free. --------------------------------------------------------------------------------------------------- You can load tasmloader.bas with LOAD"*",8 and then RUN it. {with VICE Emulator, you can drag/drop the floppy disk to Commodore Plus4 emulation screen} You will see this below as next. Press ENTER and when the TURBO-ASSEMBLER-MACRO is loaded, PRESS enter AGAIN to start the program. ------------------------------------ ************************************ press enter to load and then start : turbo-assembler-macro ready. load"tasm",8,1 sys 758 ************************************ ------------------------------------ You can later re-start-enter TASM when you test your code: FROM BASIC: SYS 758 FROM ML-MONITOR: G 2F6 --------------------------------------------------------------------------------------------------- THE BASIC LOADER LISTING: {It's just great that you can write your program here, $1000 which is a default BASIC start address} {That's why i am deleting this loader because you need it just once} {Later only SYS 758 is required to work with TURBO-ASSEMBLER-MACRO} **************************************** 100 rem loader by mzretro / 08-2026 105 rem tasm was converted by csory 110 rem to commodore plus4 back in 1992 115 rem i just made this loader to make 120 rem my life easier 125 rem see original disk why! 130 : 135 printchr$(147):color 0,1:color 4,1 140 a$=chr$(34):b$=chr$(145):color 1,7 145 j$=chr$(153):k$=chr$(18) 150 for a=0 to 6:read d$: b=dec(d$) 155 poke 758+a,b:next 160 data 78,8d,3f,ff,4c,00,8b 165 print "press enter to load and "; 170 print "then start :" 175 print j$+k$+"turbo-assembler-macro" 180 print : print : print 185 print "load"+a$+"tasm"+a$+",8,1" 186 for a=1 to 5:print:next 187 color 1, 6:print b$+k$+"sys 758" 190 print b$+b$+b$+b$+b$+b$+b$+b$+b$+j$ 200 new **************************************** --------------------------------------------------------------------------------------------------- I wrote this to convert the content of the first 12 lines. It's good for BIG SCREEN TITLES... There is also a color version on my website www.mzretro.ch - www.lived.ch {i converted it now to TASM to show a little "larger" code. Check further below, EXAMPLE 2} Listed this here to show the differences between TURBO-ASSEMBLER-MACRO and MERLIN-7501-ASSEMBLER and you can then decide which one to use or which one would be better for your needs. There are old retro-guys existing and still using PAL Assembler. They would surely immediately take the MERLIN-7501-Assembler. --------------------------------------------------------------------------------------------------- EXAMPLE 1: | {RVS for first 12 lines of the screen} | --------------------------------------------------------------------------------------------------- CODE TURBO-ASSEMBLER-MACRO | THE SAME IN MERLIN-7501-ASSEMBLER --------------------------------------------------------------------------------------------------- *= $1000 | 100 com $3000 ldx #$00 | 110 list main lda $0400,x | 120 ldx #$00 cmp #$20 | 130 .loop beq loop1 | 140 lda $0c00,x lda #$20 | 150 cmp #$20 sta $0400,x | 160 beq .j1st loop3 lda $04f0,x | 170 lda #$20 cmp #$20 | 180 sta $0c00,x beq loop2 | 190 .ret1 lda #$20 | 200 lda $0cf0,x sta $04f0,x | 210 cmp #$20 loop4 inx | 220 beq .j2nd cpx #$f0 | 225 lda #$20 bne main | 230 sta $0cf0,x rts | 240 .next loop1 lda #$51 | 250 inx sta $0400,x | 260 cpx #$f0 jmp loop3 | 270 bne .loop loop2 lda #$51 | 280 rts sta $04f0,x | 290 .j1st jmp loop4 | 300 lda #$51 | 310 sta $0c00,x turbo ass mac.converted by csory in 1992| 320 jmp .ret1 x:17 line:0 bot:899d insert: line| 330 .j2nd | 340 lda #$51 | 350 sta $0cf0,x | 360 jmp .next | 370 end --------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------- EXAMPLE 2: | {as above, in COLOR!} | --------------------------------------------------------------------------------------------------- CODE TURBO-ASSEMBLER-MACRO | THE SAME IN MERLIN-7501-ASSEMBLER --------------------------------------------------------------------------------------------------- | *= $1000 | 100 com $3000 ldx #$00 | 110 list loop lda $0c00,x | 120 ldx #$00 cmp #$20 | 130 .loop beq j1st | 140 lda $0c00,x lda #$20 | 150 cmp #$20 sta $0c00,x | 160 beq .j1st ret1 lda $0cf0,x | 170 lda #$20 cmp #$20 | 180 sta $0c00,x beq j2nd | 190 .ret1 lda #$20 | 200 lda $0cf0,x sta $0cf0,x | 205 cmp #$20 next inx | 210 beq .j2nd cpx #$f0 | 215 lda #$20 bne loop | 220 sta $0cf0,x rts | 225 .next ;------------------------ | 230 inx j1st lda #$a0 ;rvs space | 235 cpx #$f0 sta $0c00,x | 240 bne .loop ;------------------------ | 245 rts ldy #$00 ;delay loops | 300 ;------------------------ wait1 iny | 305 .j1st cpy #$e0 ;delay time | 310 lda #$a0 ;rvs space bne wait1 | 320 sta $0c00,x ldy #$00 | 330 ;------------------------ wait2 iny | 340 ldy #$00 ;delay loops cpy #$e0 | 350 .wait1 bne wait2 | 360 iny ;------------------------ | 370 cpy #$e0 ;delay time lda $a5 ;get low byte | 380 bne .wait1 and #$0f ;timer to handle | 390 ldy #$00 adc #76 ;random colors | 400 .wait2 sta $0800,x | 410 iny jmp ret1 | 420 cpy #$e0 ;------------------------ | 430 bne .wait2 j2nd lda #$a0 ;rvs space | 435 ;------------------------ sta $0cf0,x | 440 lda $a5 ;get low byte ;------------------------ | 450 and #$0f ;timer to handle ldy #$00 ;delay loops | 460 adc #76 ;random colors wait3 iny | 470 sta $0800,x cpy #$e0 ;delay time | 480 jmp .ret1 bne wait3 | 600 ;------------------------ ldy #$00 | 610 .j2nd wait4 iny | 620 lda #$a0 ;rvs space cpy #$e0 | 630 sta $0cf0,x bne wait4 | 640 ;------------------------ ;------------------------ | 650 ldy #$00 ;delay loops lda $a5 ;get low byte | 660 .wait3 and #$0f ;timer to handle | 670 iny adc #32 ;random colors | 680 cpy #$e0 ;delay time sta $08f0,x | 690 bne .wait3 jmp next | 700 ldy #$00 | 710 .wait4 turbo ass mac.converted by csory in 1992| 720 iny x:10 line:64 bot:8824 insert: line| 730 cpy #$e0 | 740 bne .wait4 | 750 ;------------------------ | 760 lda $a5 ;get low byte | 770 and #$0f ;timer to handle | 780 adc #32 ;random colors | 790 sta $08f0,x | 800 jmp .next | 810 end | ---------------------------------------------------------------------------------------------------