MightyMon Version 3.0 for the VIC-20 Computer --------------------------------------------------------------------------------------------------- This software was coded by C.S.Bruce and it looks very professional on the first sight. Until you then quickly notice how the numbers are decimal and not as usually, hexadecimal. That is why the program counter and the registers are shown like this : ac xr yr sr sp ;000,000,000,000,246 Which is pretty much very weird to see. However, it doesn't end here. Another things is the permanent {universal BASIC line of code to find the correct start address for the MightyMon. It looks like this: 10 sys peek(43)+256*peek(44)+467 We have seen this already. SuperMon+ is using it too. Back then it was obviously not so uncommon line, considering the fact that VIC-20 had from 5KB to 40KB Memory access in different configurations! MightyMon is fortunately also offering an alternative way to get back after your left with X {in ML-Monitor} That is the SYS 820 {There isn't much! Just one JMP 2048 line which is pointing to 2048 DECIMAL!} We could keep that line intact or delete it {because it is occupying the start address of the BASIC} Meaning, you cannot start the assembly code from $1000, but you could from e.g. $1036, dec 4150 and leave this BASIC line alive. That way you can restart the MightyMon with a RUN command, but you'll lose a "few" bytes. On the other hand, you can spare yourself from typing SYS 820! It's up to you, as always! Hehe... Okay, let's get back to SYS 820 one more time for inspection! There is just one line, as said JMP 2048 and it is decimal and not hexadecimal, which was totally irritating at first, but i sticked myself together after a while! When you start MightyMon, you'll get, among other decimal things. also this line: ns:1038 sc:7680 m:d I strongly assume that the part 1038, also isn't $1038 {i thought so because that would jump over the BASIC line} and start the code from there.. No, this is very probably also decimal 1038, hex $040E. And that area is the RAM Expansion, 3KB, BANK 0 from $0400 to $0fff. So that is the area where the assembly code can go. All that bring us again to the memory relocations of the VIC-20 computers. DEFAULT RAM of 5KB and additional 3KB RAM in BANK zero is relocating start of the BASIC to $0400 {now 1038 makes sense again and it really does jump over the BASIC line} SYS 820 is start MightyMon from the address 2048, hex $0800. That is also in BANK 0! Ergo, we don't have the full 3KB {3072 bytes for assembly coding} What is left is 2048 - 1038 = 1010 bytes, hex $03f2 So far, I can tell how this decimal trip was very exhausting and if we watch carefully, it probably and actually can be changed to hexadecimal numbers/system { you sure have noticed m:d in above line}. I really assume that default setting is Mode = Decimal {m:d} Well, i have pressed literally all function keys and all other possible keys and combinations, and this m:d is not changing to m:h! Searching for any form of help command resulted in zero success. Interesting is how some keys are beeping {the error keys probably}. This is what i could fish out of the muddy waters: LOAD command is working! > L "file" 08 {without 08 = load from a tape} SAVE command is working! > S "file" 08 1038 1200 {always add 1 byte more to end address!} SAVE@ command is working! > S "@fil" 08 1038 1200 {overwrite an existing file} VERIFY command is working! > V "file" 08 {Verifying, but brings an I/O error} TRANSFER command is working! > T 7680 7704 7704 {this will copy screen line 1 to screen line 3} MACHINE CODE LISTING command is working! > M 1038 1100 {this will list the memory until 1100} MACHINE CODE LISTING command is working! > M 1038 10ff {this will NOT list the memory! A bug???} : command is working > : 4096 1 {will add A to left screen corner, if screen start is 4096} : command is working > : 4096 001 {will do the same as above} REGISTERS command is working! >`R {will show the register status} HUNT command is working! > H 7680 7800 032 {it can also be 2 digit, {but this thing uses all 3 digit number, e.g. 001} K command is working > K {resetting the ML Monitor to default color palette} K command is working > K 8 {setting the ML Monitor to black screen & border} K command is working > K 8 5 {THIS WILL CRASH THE SCREEN! BE WARNED! {use just 1 digit to be on the safer side} / command is like > no options? {the same as K} . command is like > not working? {it is not showing the next logical address!} D command is working > D 1038 1100 {Use arrow down to show the next mem address} G command is working > G or G $0400 {If no address is provided, it's a go from } {program counter, usually} CONCLUSION: --------------------------------------------------------------------------------------------------- I'AM GIVING UP! THIS THING IS UNUSABLE AS LONG AS I HAVE NO POSSIBILITY TO WRITE A FEW ASSEMBLY LINES WITHOUT THE NECESSITY TO ADD MEMORY ADDRESSES MANUALLY! BRUCE WAS SWEATING FOR NOTHING! I am making it available here only because of the hope someone is or could be more capable than I am, and can figure out everything that I've missed {thanks in advance} --------------------------------------------------------------------------------------------------- 24.05.2026 --------------------------------------------------------------------------------------------------- UPDATE! later on 24.05.2026 What i have managed! Entering these few lines of code! And i only managed this because i added the following addresses manually. You basically need to know that DEX is 1 byte, STA 3 bytes, lda 2 bytes etc. long. Next problem i had: decimal numbers are obviously only for 1 byte, meaning up to 255. For a word addresses, two bytes, you must use hexadecimal numbers. As you can see below, when you do disassemble the code, then decimal number is appearing, and not $900f. During assembling however, it is tossing an error message if you try to write it in decimal} Then: when you try to enter $1e00, it is not working {error} as it is expecting 7680 instead! There still are many unknown factors here and this is driving me nuts, hehehe! Bruce, next time make sure you'll take your time to make a proper instruction for this so Mighty Machine Language Monitor! --------------------------------------------------------------------------------------------------- .1040 lda 000 .1042 sta $900f .1045 rts . .x ready. SYS 820 and dhow the listing again, looks like this. acceptable... ----------------------------------- mighty mon - c.s.bruce ns:1046 sc:7680 m:d ac xr yr sr sp .;000,000,000,000,246 .d 1040 .1040 lda 0 .1042 sta 36879 .1045 rts ----------------------------------- UPDATE, 26.05.2026 --------------------------------------------------------------------------------------------------- Obviously, it's itching when things are not logical or make no sense. I tried this code today and it actually worked. Which is a good news, of course. So working with hexadecimal numbers is actually possible! {Even though, this looks cool, i had to type the following memory location manually, meaning counting bytes!} {that is still a big UNEXCEPTABLE. Can't imagine that this behavior was a standard back then!!!} . $0400 lda #$08 . $0402 sta $900f . $0405 lda #$05 . $0407 sta $0286 . $040a brk . m 1024 1044 {you notice, the listing is still in decimal numbers here} .1024:169,008,141,015 .1028:144,169,005,141 .1032:134,002,000,000 .1036:255,000,255,000 .1040:255,000,255,000 .1044:255 . When i went to execute this, i've reminded myself of the G command. G is like RUN in BASIC, something like GO64 or just GO assembly GO ;-) G $0400 . $0400 lda #$08 . $0402 sta $900f . $0405 lda #$05 . $0407 sta $0286 . $040a brk . g $0400 are you sure? {this is not a GO64 joke, it really asked if I am sure!} {I have added this command to the list above} This is old new: If you disassemble the location, it is shown in decimal too {hope I'll find out one day how to switch to hexadecimal!} .d $0400 $040a .1024 lda #8 .1026 sta 36879 .1029 lda #5 .1031 sta 646 .1034 brk CONCLUSION on 26.05.2026: It is getting better, but we still aren't there...! ---------------------------------------------------------------------------------------------------.