PLUS4-MACHINE-LANGUAGE-MONITOR-{StartMon+4} -------------------------------------------------------------------------------------------------- TOOL: StarMon+4 EXPLORING-ADVENTURE {Commodore PLUS4} Language: Machine Language {assembler editor, viewer} Extra: none Author: Misel Zivanovic Note: (C) 11th of OCTOBER 2026 - www.lived.ch, mzretro.ch Doc Revision: 1.0 Last update: 18:21 11.10.2026 Remark: This is another very solid replacement ML-Monitor for TEDMON. It had no instructions, but as you can see below, i could, very probably find the huge majority and now this Machine Language Monitor is finally really usable. I can say: thanks to the developer to make the commands easy to use and easy to discover. That was a huge help here! Well, it took me a while of course, but at least it was doable! I previously have explored the D-MON and this one is in the same winner category! {and maybe even slightly better! But just maybe} In any case, both are great {and better than TEDMON} --------------------------------------------------------------------------------------------------- To my surprise, this one does support number systems in assembly mode! In other words, writing a line of assembly code like: A 2000 lda #64 will actually work! HOWEVER, converting decimal to hexadecimal is something i cannot execute! It's not existing or I cannot figure out how to do it! Well, already this is more than sufficient. Basically the the value of this possibilities is actually even higher. With StartMon+4 you can type A 2000 LDA #64 will be accepted! A 3000 LDA 3000 will be accepted! A 3000 LDA 100,x will be accepted! A 3000 LDA %1111,x will be accepted! A 3000 STA %01000010 will be accepted! A 3000 STA %0111 will be accepted! A 3000 STA 3072 will be accepted! A 3000 STA 5000,x will be accepted! NOTE: The values will be converted to hexadecimal value as soon as you hit ENTER! Converting the numbers manually isn't possible {Or i have no idea how to do it!} Anyway, already what it can do made it qualify itself for this exploring round and also as a worthy TEDMON replacement! Can it actually beat the D-MON, which was already pretty decent and very usable? Couldn't find any instruction, so exploring and digging is our motto here. Going through the mud and retro dust for the glory of the retro world {nicely said, right, haha} Before we do that, let's actually add some additional info. StarMon+4 can be started with SYS 24576 {$6000}. It also means that BASIC area from $1000, decimal 4096 is free for your BASIC program. It also means, however, that using the high resolution screen basically would work, but as we all know by now. Turning ON the Graphic also means to move the BASIC start address to $4000 and that is leaving us then with 8KB {$4000-$6000} free memory for the BASIC 3.5 program. Not so bad et the end of the day. Many smart things can be squeezed inside of 8KB BASIC source code if it's done properly. The graphics memory can be then used for assembly routines, to load any intro graphics first and then load the assembly routine in the same space. If you check my other lessons, you'll find how easily this can be achieved, from BASIC 3.5! Back to business... StarMon+4 COMMANDS: {Without official guide, I cannot tell if this is all} {I found this out by trying the commands out} --------------------------------------------------------------------------------------------------- COMMAND EXAMPLE DESCRIPTION A .A 2000 lda #$00 Will add #$00 to accumulator. Use .A to write assembly code. ; [semicolon] can also be used to replace or add a single line of assembly code. E.g. .; 2000 lda #$10 D D 2000 Will list an assembly code to the screen {full screen} D D 2000 2020 Will list just the defined area! This command will also show you an ASCII part on the right side! : .:2000 a1 20 10 ff a8 Allows you to directly type byte values into memory M M 2000 Will list a memory in bytes from 2000 {22 lines / 8 bytes each} M M 2000 2030 Will list just the defined area! I I 2000 Will list 22 lines of 32 bytes in each line! I I 2000 2001 Will list just 1 line with 32 bytes I I 2000 201f Will also list just 1 line with 32 bytes I I 2000 2021 Will list 2 lines with 32 bytes each {I bet you got the point, right!} T T 0c00 0c28 0d00 Will transfer the content between $0c00 - $0c28 to $0d00 F F 0c00 0c28 51 Will fill the 1st screen line with the gfx code #$51, little ball F F 0c00 0c28 51 52 52 51 Will fill the 1st line with this gfx pattern {in loop mode} U 2000 200f Will list a memory as D, a slightly different however. Here an example: .d 2000 200f .; 2000 9d 00 0c sta $0c00,x T]@l .; 2003 60 rts T? .; 2004 85 07 sta $07 Teg .; 2006 a9 18 lda #$18 T)x .; 2008 00 brk T@ .; 2009 00 brk T@ .; 200a ff ??? T? .; 200b ff ??? T? .; 200c ff ??? T? .; 200d ff ??? T? .; 200e 00 brk T@ .; 200f 00 brk T@ .u 2000 200f .; 2000 9d 00 0c sta $0c00,x T]@l .; 2003 60 rts T? .; 2004 85 07 sta $07 Teg .; 2006 a9 18 lda #$18 T)x .; 2008 00 brk T@ .; 2009 00 brk T@ .; 200a ff ff ff ins $ffff,x T??? .; 200d ff 00 00 ins $0000,x T?@@ . R R Will show the register status and the flags G G Will do nothing or better said: it will exit to BASIC! G G 2000 Will execute the code at $2000 {use BRK as end command to return to ML-Monitor} {use RTS to return to BASIC} Example: .A 2000 lda #$05 .; 2002 sta $0c00 .; brk J J J is like restarting the StarMon+4 inside of the StarMon+4? Show again registers and the flags. Just like the R command. J J 3000 Will execute the program located at $3000 and STAY in ML-Monitor if the end command is RTS. Basically, this is like GOSUB 3000 {not GOTO! GOTO is G} @ @ Will show the floppy disk status S S"DEMO.ML-SYS8192" 08 2000 2010 Will save a file {assembly} to disk {mem area $2000 to $2010} L L"DEMO.ML-SYS8192" 08 Will try to load a "DEMO.ML-SYS8192" from floppy device 8 into memory where it was saved! L L"DEMO.ML-SYS8192" 08 3000 Will try to load a "DEMO.ML-SYS8192" from floppy device 8 into memory to $3000 NOTE: NOT ALL PROGRAMS CAN BE RELOCATED THIS WAY! This is more suitable for data, than actual assembly programs! L L"DEMO*" 08 2600 Will load a first program that is starting with DEMO in its name to memory location $2600 O O 1 {it's O like in Omega} Now this one is doing something. Entering a special mode or whatever with a back arrow <--, but i can't do anything there, except exit with X {and ENTER} H H 2000 20100 05 This will search for 05 value inside the given address range! Q Q This ends the StarMon+4 and exits to BASIC with a BASIC message. SYS 24576 can re-start the StarMon+4 though! V V 1 It's bringing PRESS PLAY ON TAPE message. All other numbers are showing I/O errors! {It's probably VERIFY, but I can't figure out how to use it} C C 2000 2010 3000 3010 It compares the area $2000-2010 with $3000-3010 and list the differences as memory addresses. E.g. 2001 2005 2008 - Which means that this 3 addresses aren't the same and the rest is! --------------------------------------------------------------------------------------------------- That's it folks, can't find more. I am positive surprised as it is impressive how much is offered and to be honest I have not expected to probably find close to all there is {I guess} --------------------------------------------------------------------------------------------------- It is definitely way better than TEDMON and compared to D-MON, the ASC** command is missing {or I cannot find it}. Saving is possible here and using all three number system when writing an assembly code is giving it a small touch of real assembly editors and making things much easier. Combining a BASIC program and using StarMon+4 is no problem. Even involving the hires graphics screen will work and actually gives you the space, as mentioned, to be really creative. IS SOMETHING NOT SO GOOD? Well, because you asked! StarMon+4 is not showing tokens and also not the addresses! What you see is the actual start address and no token also the typed addresses aren't listed! Is that something that should scared me off? The absolute beginners might have problems with it, but not necessarily if they pay attention. In any case, the thinking process is more challenging than with the addresses. Especially when you have to deal with the low/high bytes. You will not have this as a visible something in front of you, but you'll just know it is there! Basically, it is easy as this: Remember that the actual address is the token start address and then the actually spaces based on the mnemonic/command used! StarMon+4 is showing nothing between the token and the mnemonic/command as you can see. But when you see 2002 and the next one is 2005, you know that: TOKEN is 2002, LOW-BYTE $00 {2003} and HIGH-BYTE $0c {2004} YES, a beginner will need a while, but D command will show it with addresses and if you stuck, just call the D command and the day is saved! --------------------------------------------------------------------------------------------------- Example: {was first written in StarMon+4!} StarMon+4 Assembly Code: D-MON Assembly Code: {this one indeed is a bit more clear/helpful} .a 2000 lda #$00 a 2000 a9 00 lda #$00 .; 2002 sta $0c00 a 2002 8d 00 0c sta $0c00 .; 2005 lda $0c00 a 2005 ad 00 0c lda $0c00 .; 2008 clc a 2008 18 clc .; 2009 adc #$01 a 2009 69 01 adc #$01 .; 200b sta $0c01 a 200b 8d 01 0c sta $0c01 .; 200e adc #01 a 200e 69 01 adc #$01 .; 2010 sta $0c02 a 2010 8d 02 0c sta $0c02 .; 2013 lda #$00 a 2013 a9 00 lda #$00 .; 2015 sta $ff19 a 2015 8d 19 ff sta $ff19 .; 2018 lda #$00 a 2018 a9 00 lda #$00 .; 201a ldx #$00 a 201a a2 00 ldx #$00 .; 201c ldy #$00 a 201c a0 00 ldy #$00 .; 201e iny a 201e c8 iny .; 201f bne $201e a 201f d0 fd bne $201e .; 2021 inx a 2021 e8 inx .; 2022 bne $201c a 2022 d0 f8 bne $201c .; 2024 inc $2014 a 2024 ee 14 20 inc $2014 .; 2027 lda $2014 a 2027 ad 14 20 lda $2014 .; 202a cmp #$10 a 202a c9 10 cmp #$10 .a 202c beq $2031 a 202c f0 03 beq $2031 .; 202e jmp $2015 a 202e 4c 15 20 jmp $2015 .; 2031 lda #$00 a 2031 a9 00 lda #$00 .; 2033 sta $2014 a 2033 8d 14 20 sta $2014 .; 2036 rts a 2036 60 rts StarMon+4 can definitely be recommended because it really is cool as Santa! **ASC can be easily replaced or better said a workaround would be to write a text in first text screen line {upper left corner} and then using the T command to transfer the content to the address where the text is needed or will be. Example: {execute in ML-MONITOR environment} $0c00, dec 3072+24 {end of the text}, $0c18 ____________ |hello, my name is plus4! | | T 0c00 0c18 2a00 Will copy the text to $2a00 where you can then access it! ---------------------------------------------------------------------------------------------------