PLUS4-MACHINE-LANGUAGE-MONITOR-{D-MON} -------------------------------------------------------------------------------------------------- TOOL: D-MONitor EXPLORING-ADVENTURE {Commodore PLUS4} Language: Machine Language {assembler} Extra: none Author: Misel Zivanovic Note: (C) 10th of OCTOBER 2026 - www.lived.ch, mzretro.ch Doc Revision: 1.1 Last update: 12:57 11.10.2026 Remark: Before I landed here, checking D-MON, I have also stumbled over many other ML-Monitors for the Commodore Plus4 while searching for a worthy TEDMON replacement After Ice-Monitor, Profi-Monitor, Hypra-Monitor, Super-Monitor, SMON, StarMon+4 it can be said how D-MON is like a big lottery win compared to just before mentioned ML-Monitors! There are a few more ML-Monitors waiting on their turn and who knows, it can be that I'll consider them to join the club and have them ready for download on my website! --------------------------------------------------------------------------------------------------- FLOPPY DISK CONTENT: --------------------------------------------------------------------------------------------------- 0 "d-mon/szaki " 2a 1 "d-mon/szaki",8,1 prg 1 "Pd-mon v1 /szaki" prg 23 "Md-mon v1 /szaki" prg 55 "d-mon v1.0/intro" prg 0 "----------------" src [this part here below was added by me!] 0 "can be restarted" src 0 "with sys 1536 " src 0 "after the exit " src 0 "with x " src 0 "----------------" src 584 blocks free. --------------------------------------------------------------------------------------------------- IF CASE YOU WONDER! CAN I DO BASIC PROGRAMMING while D-MON is resident in the memory of Commodore Plus4? *************************************************************************************************** Yes, it can be done by typing this 3 POKE commands in direct mode! It means: BEFORE you start typing any BASIC LINE NUMBERS poke 43,1:poke 44,64: poke 16384,0:new This will move BASIC start to $4000. You can use BASIC 3.5 and access the D-MONitor with SYS 1536. WHAT I HAVE NOTICED: High resolution graphic access was corrupted. Meaning, my demo program did the job, but it looked awful. Well, at least it didn't crashed. I guess D-MON is somehow effecting the access to it. Normal, text mode, screen isn't effected! Demo example ran without any issues. FURTHERMORE: After exiting the D-MON it is actually not really exited. It's still pulling strings in the background. Probably that's why the high resolution screen isn't working properly. *************************************************************************************************** NOW LET'S START "D-MON" and see what we will find: D-MON is divided in 3 files and it is obviously occupying memory spaces here and there! There is an INTRO file on the disk, but to run that every time you can't recall what is doing what and how... It's a challenge, yes! What was easy to find out, is how to re-start it after the exit with 'X' from the ML-Monitor. Now we will torture the existing D-MONitor commands! This information below very probably can't be called a test or review, it's more like exploring adventure and let's see what we can find out! We will start with the basic commands first, e.g. A,D,F,T,>,M... Because that is what most ML-Monitors are having in common and what also is used most of the times. In addition, let's take right here a look at how number systems can be converted because TEDMON CANNOT do that but it is extremely useful. # - decimal $ - hexadecimal % - binary Basically and practically, this is the main reason why I was looking for an alternative ML-Monitor. Otherwise TEDMON is actually good, but this D-MONitor is just better! Examples for #50, $a0, %00100000, %00010000, %00001000: d-mon v1.0 by szaki from nst pc sr ac xr yr sp nv-bdizc irq read ; ffff ff ff 00 00 00 11111111 ce0e rom #50 = $0032 = %00000000'00110010 $a0 = #160 = %00000000'10100000 %00100000 = $0020 = #32 %00010000 = $0010 = #16 %00001000 = $0008 = #8 While this actually is great, it looks that extended usage isn't possible. It means you cannot use it when you assemble a code, e.g. 2000 lda #85 or 2000 sta %001000000. This will not work as only hexadecimal numbers are accepted. Well, end of the day, being able to convert it, is better than not being able to at all. So thumbs up here! --------------------------------------------------------------------------------------------------- ASSEMBLE [A] or also [.] This looks very acceptable and is much better than Ice-Monitor {where you do not see if it is a one, two, three bytes command!} This view below is very useful {but also what TEDMON of the Commodore Plus4 is offering}. Not complaining here! This is GREAT! a 2000 a9 00 lda #$00 a 2002 8d 00 0c sta $0c00 a 2005 ee 01 20 inc $2001 a 2008 18 clc a 2009 ad 00 0c lda $0c00 a 200c 69 01 adc #$01 a 200e 8d 01 0c sta $0c01 a 2011 00 brk a 2012 In addition to TEDMON [A] command this one will also accept new addressing mode! Example: .2000 lda #"a" will result in lda #$41 .2000 lda "b" will result in lda $42 AND THEN THERE IS [ASC] .2000 asc "we are mastering DMONitor" Note: {this will give you ascii codes from the test which you can later read and use} {Note: D-MON will save CAPITOL characters with inverse code mode! See example pictures!} ASC command is a great addition and can help a lot when you have to deal with text! --------------------------------------------------------------------------------------------------- DISASSEMBLE [D]: Now this is slightly different from the TEDMON and is offering additional information, I was wondering where is the benefit of that and found it actually in ASC command/mnemonic. You can see the text already in D listing, not need to use M or N command. Compared to Ice-Monitor, it isn't listing the full screen! It's more like TEDMON, meaning you get to see only 21 bytes by typing { D 2000 }. If you want to see more you must add the end address too! In other words, your command should look like this { D 2000 2022 } d-mon v1.0 by szaki from nst pc sr ac xr yr sp nv-bdizc irq read ; 2017 b0 00 ff 00 f6 10110000 ce0e rom d 2000 2022 . 2000 c9 20 cmp #$20 : I . 2002 41 4d eor ($4d,x) : AM . 2004 20 54 48 jsr $4854 : TH . 2007 45 20 eor $20 : E . 2009 cb c9 sbx #$c9 : KI . 200b ce c7 20 dec $20c7 : NG . 200e 2d 20 c4 and $c420 : - D . 2011 2d cd cf and $cfcd : -MO . 2014 ce a2 00 dec $00a2 : N"@ . 2017 bd 00 20 lda $2000,x : =@ . 201a 9d 00 0c sta $0c00,x : ]@l . 201d e8 inx : H . 201e e0 15 cpx #$15 : ?u . 2020 d0 f5 bne $2017 : PU . 2022 60 rts : ? There is also SHIFT + D command which is effecting screen preview dependent on the JSR or JMP command in your code. It can be controlled with ENTER, SPACE and DOWN ARROW KEY and STOP to exit the active mode! Here an example: {well, you need to try out this one yourself, it can't be really properly exampled!} --------------------------------------------------------------------------------------------------- FILL [F]: This is indeed very useful one and I love to use it to see what will happen when I zero a memory area when you use a program {e.g. like D-MONitor} and want to see where you can peek and poke without destroying the program itself. Basically, you search for a free area to put your code in. We will not toss an army of zero's to the area $0600 because that would be our end, haha... While TEDMON allows you to chose just one byte to fill-in the area of your choice, D-MONitor is allowing more. Why exactly this is beneficial, i cannot tell. Usually you basically just want to get rid of the data there and 00, e,g, F 2000 3fff 00 would do the job just perfect. With D-MONitor you can add more: F 2000 3fff 05 a0 b0 ff 00 05 Well, let me know if you find the logic and necessity behind this extended functionality. SHIFT + F: This is some kind of copy/paste process if I am asked. SHIFT + F 2000 3000 2fa0 2fff Will fill in the area from $2000 until $3000 with the data which are located between $2fe0 - $2fff Maximum range of data area cannot exceed $ff {256 bytes, 0 - 255} --------------------------------------------------------------------------------------------------- TRANSFER [T] This is a good one and i love to use it on Commodore C128 to transfer the ROM font to RAM with just one line of code. Then i can modify it, save it to disk and done! T command of D-MONitor is allowing to access every single byte and transfer it to everywhere you want... But use it with precaution while crashing the PC is just few bytes away with this command! Example: T 2000 2500 3800 Will transfer the area between $2000 and $2500 to $3800 and up {+ $500 bytes} --------------------------------------------------------------------------------------------------- /////////////////////////////////////////////////////////////////////////////////////////////////// 16:11 10.10.2026 /////////////////////////////////////////////////////////////////////////////////////////////////// ALL OTHER COMMANDS of D-MONitor: U - List the memory on the screen {scroll up/down. STOP to stop/exit} N - List the memory on the screen but it can be modified < - You can enter the values manually M - Same as ted, but it is listing a full screen and it allows you to scroll the memory in both directions {up/down, cursor keys}. Hit STOP to exit! R - Shows register status, then bits, IRQ and READ from {RAM/ROM > $07f8} Note: The monitor normally accesses RAM up to $8000 and ROM thereafter. If you want to access all RAM, change location $07F8 to $80 (see M command). To switch back to ROM, change it back to $00. SHIFT+R {change the READ {RAM or ROM, $07f8} G - Execute assembly lines {e.g. G 2000} Note: pay also attention to $0f78 SHIFT+G This is like GOSUB {JSR} command and is expecting RTS at the end to return to D-MONitor Note: G {without SHIFT} is JMP and is expecting BRK to return to D-MONitor {if RTS is present, it will return to BASIC!} I - With this one it is possible to enter your own interrupt address {default is $ce0e} Basically, modify the IRQ Vector {be sure to know what you are doing!} SHIFT+T Type the memory between two values. E.g. SHIFT + T 2000 200c SHIFT+S It makes a SEQ source list on the disk. It knows the illegal codes too. The source is good only for JKL/BSZ because of the illegal codes. The name of the file will be "source" {Note: to be honest, know idea what the above information is trying to tell me???} {The list is what? Source? From where to where?} {Will it just make a SEQ source list without any additional input... Strange command!} {OPEN - NEED TO TRY THIS OUT!, 15:32 10.10.2026} * - Showing a floppy disk content. {Note: If there is any mistake, exit and type MONITOR and press cr. [Hmmm...what is cr?] @ - Showing a disk device status. / - A disk command {same as: open 1,8,15:print #1,"...":close 1} [and what is doing that, right? Exactly my question, haha...] L - LOAD a binary file to memory. Examples: L"file" - loading a while to where it was located during saving L"file" 2000 - loading a file to $2000 L"file,s" 2000 - loading a SEQ file to $2000 SHIFT+L Kills the Autostart out of the file and type where could it start. It prints out 'alarm' when it could start! Example: SHIFT+L "my-file" Note: press any key to continue when it is done <--- READ the memory of the drive. Values must be between 0 and 6 Example: Way READ -> <- WRITE CODE DRIVE PLUS4 0 $000-$0ff $1000-$10ff 1 $100-$1ff $1100-$11ff 2 $200-$2ff $1200-$12ff 3 $300-$3ff $1300-$13ff 4 $400-$4ff $1400-$14ff 5 $500-$5ff $1500-$15ff 6 $600-$6ff $1600-$16ff ^=arrow WRITING the memory of the drive using. See previous part <--- {arrow showing left} up SHIFT+C Change bytes. Example: SHIFT + C byte1 / byte2 {Note: bytes1 is to be changes with byte2!} [Honestly, i have no idea what is this good for? No address area, nothing??] [Well, the author knows it, we don't need to know it, hehe] Y - THE RELOCATOR I guess this will do what it says! Relocate a program to another location and make it be executable again. When using JMP and JSR you actually cannot transfer your program to another location because all the JMP addresses will be wrong. Not valid for branch commands as we know! Branch commands jumping is always correct! SYNTAX: Y old-address-start old-address-end new-start-address address1 address2) EXAMPLE: Y 1000 2000 3000 1000 fd00 The addresses of 3 byte commands will be relocated to $3000 if its address is between $1000 and $fd00. If you miss the last two values, the will be the same as first 2! /////////////////////////////////////////////////////////////////////////////////////////////////// CONCLUSION: D-MON is loaded with functionality. Many are clear as day, some are a little mystery. Good that decimal, hexadecimal and binary numbers can be converted. Too bad that this availability is limited to just that purpose! A couple of minutes ago, I quickly checked the StarMon+4 and that ML-Monitor is actually offering what here is missing. 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! Arithmetic functionality unfortunately isn't available. Anyway, D-MON is a fantastic TEDMON replacement! However, i couldn't find any SAVE command??? I guess SAVING can be done with the TEDMON even though it sounds crazy, hahaha... Main thing: It can be saved! Despite all that, it probably will be difficult to find better TEDMON alternate! ---------------------------------------------------------------------------------------------------