8bit-Dude Posted October 26, 2017 Share Posted October 26, 2017 Hey guyz, I have a program mainly written in CC65, and currently I jump from my main program to sub-progs written in MADS for RMT and CIN support. I would like to do everything in CC65, but it only supports 6502 opcodes (MADS macro are not recognized). I have seen that MADS can export header files to CC65, but can it somehow convert an assembly file containing macros to one containing only 6502 opcodes? Thanks in advance!!! Quote Link to comment Share on other sites More sharing options...
pirx Posted October 26, 2017 Share Posted October 26, 2017 (edited) Hi! For true macros - these defined with .MACRO directive - you can get true mnemonics in listing (with "-l" switch). The pseudo macros like 'mva' though - tough luck, no mnemonic output I know of. If the source is huge, it would be possibly the fastest to type some kind of a script to unwind MADS pseudo macros. If you do, please share! Another approach, more intellectually challenging would be modifying MADS source to spit true mnemonics in listing or some other output. It almost does as it spits bytes and we are in the realm of the machine code . Edited October 26, 2017 by pirx Quote Link to comment Share on other sites More sharing options...
Heaven/TQA Posted October 26, 2017 Share Posted October 26, 2017 or what I did in with c64/lynx stuff running xasm code... write a "wrapper"... say RMT e.g. needs to be placed at a certain page aligned memory location plus RMT song module... so you actually know where they are... assemble the stuff in MADS as binary file and then include those in your cc65 project as "data" file? does that make sense? worth a try same with CIN. Quote Link to comment Share on other sites More sharing options...
baktra Posted October 26, 2017 Share Posted October 26, 2017 (edited) or what I did in with c64/lynx stuff running xasm code... write a "wrapper"... say RMT e.g. needs to be placed at a certain page aligned memory location plus RMT song module... so you actually know where they are... assemble the stuff in MADS as binary file and then include those in your cc65 project as "data" file? does that make sense? worth a try same with CIN. RMT and RMT songs (both binary load files) can be included easily to a CC65 project using the means of the LD65 linker. A custom MADS code can also be included by the means of the LD65 linker. As Heaven/TQA pointed out, the main C program just must know on what addresses the MADS code is and LD65 linker must be set not to use the addresses for the C program. You can download sources of the Curse of the Lost Miner game (see BAKTRA Software in my signature), The game is written in CC65, but includes RMT PLAYER and RMT songs. You can check the linker.cfg and gamedata.asm files. Edited October 26, 2017 by baktra 1 Quote Link to comment Share on other sites More sharing options...
EdwardianDuck Posted October 26, 2017 Share Posted October 26, 2017 Alternatively, CA65 supports macros, so you could identify which MADS pseudo macros are used and write CA65 macros for what you need. If it turns out you only need MVA, MWA, INW etc., these are simply enough to write yourself, although using traditional macros you'll lose the optimisations MADS can make (OPT R+). For example. MVA #0 A MVA #0 B becomes LDA #0 STA A STA B whereas a traditional macro won't track this and you'll get LDA #0 STA A LDA #0 STA B Another area to consider is that CA65 is single pass only, so references to labels defined later on the source code (forward references?) won't get optimised to branches where the destination is close enough. Compare and contrast JNE in MADS and the equivalent in the longbranch "macpack" in CA65. Also .proc in CA65 doesn't implement the parameter passing features of MADS. Jeremy Quote Link to comment Share on other sites More sharing options...
8bit-Dude Posted October 26, 2017 Author Share Posted October 26, 2017 Most of the code is straight forward, but there are some sections that cannot easily be converted, like this piece of the CIN code: dlist0: dta d'pp',$70+$80 dta $4e,a(buf0) :50 dta $f,$e dta $f dta $4e,0,h(buf0+$1000) :44 dta $f,$e dta $f dta $41,a(dlist0) dlist1: dta d'pp',$70+$80 dta $4f,a(buf1) :50 dta $e,$f dta $e dta $4f,0,h(buf1+$1000) :44 dta $e,$f dta $e dta $41,a(dlist1) Furthermore, I am also using the RMT player which is a huge amount of code.Maybe I should compile with MADS, and use a dissasembler.... Quote Link to comment Share on other sites More sharing options...
baktra Posted October 26, 2017 Share Posted October 26, 2017 Furthermore, I am also using the RMT player which is a huge amount of code. You can still compile RMT player with XASM/MADS and include its binary form to your CC65 program. You will just need a miniature assembler wrapper. Quote Link to comment Share on other sites More sharing options...
Wrathchild Posted October 26, 2017 Share Posted October 26, 2017 I used RMT in a project in 2007 where I'd converted the rmtplayr.a65 code to build using ca65 and permit the song's rmt to be imported into a segment defined in the linker's cfg file. The rmtplayr.a65 player sources may have changed a little since then but any diff's could easily be incorporated. Happy to dig out and share if you feel that's an easier path. Quote Link to comment Share on other sites More sharing options...
8bit-Dude Posted October 27, 2017 Author Share Posted October 27, 2017 Happy to dig out and share if you feel that's an easier path. That would be awesome! :-) Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.