Jump to content


  • Content Count

  • Joined

  • Last visited

Community Reputation

150 Excellent

About Dmitry

  • Rank

Profile Information

  • Gender

Recent Profile Visitors

3,058 profile views
  1. p.s. given the syntax for that command seems to pair a host slot to a peripheral slot, there could easily be a 'concept' that isn't immediately obvious to me. One thing I want to do is create an ATR locally on my SD Card. Why would I need to pair that to a host? It's massively confusing when using a new device that also has problems - because I don't know if this is how it works, or if it is a problem. I'm almost certain some things I'm trying don't make sense - at the same time, just having random lockups when even typing "DIR" seems kind of obvious I may have an issue with my cart....unless, I caused that lockup with DIR. I notice when it fails to create a disk, it nevertheless shows that disk on subsequent reboots.
  2. Thanks for trying to help! Maybe we can figure something out, but it'll take a bit....as at this moment, I have no idea what you are saying. The MONITOR? button in the flasher? What do those words mean? What I have is a 1200XL (expanded, but I have turned off the rapidus), and a stock 130XE (also using to test, in case it helps). And I have a FujiNet cartridge that I bought from one of the retailers. After I started running into problems, I went ahead and turned on spartdosX in the U1MB on the 1200xL, booted to SDX. Then, even though I have no peripherals attached, I can see the FujiNet utilities in D1: As mentioned in previous posts, I tried various utilities, but they tend to lock up, after using the computer for a couple minutes. I tried to create a disk, not knowing if it is correct syntax or not, but as follows: fnew.com 3,3,1,test.atr. Anyway, that just causes a lockup. As for BBS, I tried both on a 130XE (stock) and the 1200XL, and at different baud rates, and about 4 different BBS listed. It would be odd to include them for demo purposes if they never work at all. I'm assuming this list was curated and is an example of a working one, but if not, that's good to know, is there any BBS to try?
  3. From SpartaDosX, FLD.COM - run once, OK. Run second time: computer hangs. Reboot. Run fld.com 3 times, OK. shows 2 disks, hit switch button, no sound try this: fnew.com 3,3,1,test.atr computer hangs cold start. type fld.com OK, type DIR F*.* - computer hangs This computer is working otherwise, so....any ideas?
  4. I'm very excited to just have received a FujiNet. Now, it doesn't work. So, there is going to be some troubleshooting here. It goes through config and connects to wi-fi. It will download disks from TNFS. However, any attempt create a disk will not succeed. Also if I download disks and attempt to use them, like use BobTerm to connect to Alcatraz BBS - I it won't connect for more than 2 seconds, usually I see at. most a line or two, then the machine locks up and reboots. Also in the config menu, if I go to an empty slot and hit w or r, the machine immediately locks up. Even when loading another terminal like IceT, I've never successfully loaded that program - it tends to hang and reboot. A bum unit? Or this is the state of development so far? How are you using it as an ATR-loader? According to the quick start, the machine is suppose to speak to me (I have that set in the config) when I switch disks, but it never makes any noise. When I ask "how are you using it" - keep in mind you do not need to go into the standard spiel about reading the manual because I have done that - what I mean is the manual doesn't mention how you specifically create your own ATR or load them on the disk. If it is a matter of merely copying them, that simply doesn't work for me, at this stage. I go to an empty slot in config, and select enter and that does nothing. I used another computer to copy over ATR images, but that does nothing. I booted to SDX and looked at the included utilities and tried to use that to create a disk, but it also just says error. Any help would be appreciated...I don't know yet if I just got a non-working unit, or another problem. Could be anything...thanks!
  5. So below, is the first screenshot of the Atari version. The man is a player - not complete yet, of course, I need to add his hands and water bucket. So far work has mostly been about making choices related to the development environment. I am using KickC and Assembler, basically in-line KickAssembler. I chose KickC, because CC65 wouldn't compile right on my Raspberry Pi - mostly compiled but had a weird memory error. Frankly I don't want to make this about my knowledge of Raspberry Pi. KickC installed without issue. On top of that I'm now doing a lot of development on my MacBook Air M1. Unfortunately, I got a lemon, and I'm going to the Apple store to replace it on Monday. The machine constantly reboots. Learning KickC has slowed things down at the start, but will eventually speed things up quite nicely. I am keeping it organized, and I will easily be able to support 20 levels, although the PC version only has 10 so far. I've got the tile loader - and already two levels on the A8 version. I have the main character 1 Player so far. It's going to use a second player for the bucket and balloon. There will be a lot of player and missile re-use in the game....so never mind all that, I'll discuss the strategy as more progress occurs. OK, I will try to limit updates...so next one will be after the man can fire the water balloons and put out a fire....frankly at some point I expect it to go 'fast', because the logic is already in the pc game, but we'll see if that ever holds true...so far it's been slooooow developing.
  6. Oh good grief, after all this looking I finally see the issue......ack never mind....once again, haha... I was setting DMACTL in two places, I just couldn't see it....until now....
  7. funkheld, did you ever get your question answered? I assume you probably already have since the question was a while ago. But anyway, just if anyone looking for kickC answers finds this thread in the future, I will share that even though I know how to set up PM in Basic and Assembly - therefore the links to documentation for Basic and Assembly would not have been helpful to me. Edit: but deleting the rest of this response, because I just finally traced down where my bug was, I was setting DMACTL twice, lol...
  8. This one seems like a bug. If I memcpy 40 * 21 - the program won't display the screen. But if I memcpy 40 * 19 - it will display but, it of course, is missing two lines I want to send. If I change it to two memcpy, 40 * 19 and 40 * 2 - the program won't display the screen. Even if there is some internal limit to memcpy, it is odd that it still doesn't work if split up. It will work by 40 * 18 and 40 * 2, but I shouldn't have to do that. Otherwise, I have at least set up the first screen, with DLI. Using KickC. test.c
  9. I must have a bad ld file, I tried to create it earlier, it is borked. I removed it. Now everything works. yeah....finally, haha...
  10. I did figure out I must use the "export" keyword to keep the variable in the asm file, even if not used. Which it does, and it appears to be OK, but something causes the program to crash. The program works with the charset copy. I comment that out, and then add the address directive and export keyword - it compiles, but the emulator crashes. #pragma target(atarixl) #pragma zp_reserve(0x00..0x7f) #pragma link("atarixlseg.ld") #pragma emulator("/Users/rdupuy/kickc/atari800") #include <atari-xl.h> #include <6502.h> #include <string.h> void main() { //Memory Map //Mode4 screeen does take 960 bytes (reserving 1k) char * const SCR1 = 0x4000; char * const SCR2 = 0x4400; char * const SCR3 = 0x4800; char * const SCR4 = 0x4C00; char * const SCR5 = 0x5000; char * const SCR6 = 0x5400; char * const SCR7 = 0x5800; char * const SCR8 = 0x5C00; //DL cannot cross 4k boundary, reserving 1k for each char * const DL1 = 0x6000; char * const DL2 = 0x6400; char * const DL3 = 0x6800; char * const DL4 = 0x6C00; //Characterset must be aligned along Page (256 bytes) char * const CHARSET1 = 0x7000; char * const CHBAS = 0x02F4; char * const CHBASE = 0xD409; *CHBAS = >CHARSET1; *CHBASE = >CHARSET1; //memcpy(CHARSET1, fontset, 16 * 21); SEI(); memcpy(SCR1, TEXT, 32 * 21); ANTIC->DMACTL = 0x21; // Set ANTIC Display List Pointer ANTIC->DLIST = DISPLAY_LIST; ANTIC->CHBASE = >CHARSET1; // Set colors GTIA->COLPF0 = 0xc8; GTIA->COLPF1 = 0x11; GTIA->COLPF2 = 0x28; GTIA->COLPF3 = 0xFF; for(;;) { } } __address(0x7000) export char fontset[21 * 16] = kickasm {{ .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01 .byte $00,$00,$00,$00,$00,$00,$00,$40,$00,$00,$00,$00,$00,$00,$01,$15 .byte $00,$00,$01,$05,$15,$55,$55,$55,$00,$10,$54,$54,$54,$54,$55,$55 .byte $01,$05,$05,$15,$15,$55,$55,$55,$40,$50,$54,$55,$55,$55,$55,$55 .byte $00,$00,$00,$00,$40,$41,$55,$55,$00,$00,$00,$00,$00,$50,$54,$55 .byte $54,$45,$54,$15,$01,$00,$00,$00,$55,$15,$45,$54,$45,$05,$00,$00 .byte $55,$55,$55,$11,$14,$05,$01,$00,$55,$55,$41,$15,$50,$01,$55,$00 .byte $55,$15,$51,$15,$55,$54,$41,$00,$55,$55,$55,$11,$44,$50,$40,$00 .byte $55,$55,$55,$54,$11,$45,$00,$00,$55,$51,$45,$14,$10,$00,$00,$00 .byte $C0,$FF,$EA,$EA,$EA,$EA,$EA,$FF,$03,$FF,$AB,$AB,$AB,$AB,$AB,$FF .byte $FF,$55,$55,$55,$55,$55,$55,$55,$5A,$5A,$5A,$58,$58,$58,$58,$58 .byte $A5,$A5,$A5,$05,$05,$F5,$F5,$F5,$58,$58,$5A,$5A,$58,$58,$5A,$5A .byte $F5,$F5,$A5,$A5,$F5,$F5,$A5,$A5,$55,$55,$55,$55,$55,$55,$55,$55 .byte $AA,$AA,$A5,$A5,$AA,$AA,$A5,$A5,$AA,$AA,$96,$96,$AA,$AA,$96,$96 .byte $A5,$A5,$A5,$A5,$AA,$AA,$A5,$A5,$96,$96,$96,$96,$AA,$AA,$96,$96 .byte $A5,$A5,$A5,$A5,$A5,$A5,$A5,$AA,$96,$96,$96,$96,$96,$96,$96,$AA .byte $00,$00,$00,$00,$00,$00,$55,$00,$05,$05,$15,$15,$54,$54,$54,$00 .byte $15,$15,$15,$15,$54,$54,$54,$00,$15,$15,$15,$15,$55,$55,$55,$00 .byte $15,$15,$15,$15,$15,$15,$15,$00,$15,$15,$15,$15,$45,$45,$45,$00 .byte $14,$14,$15,$15,$45,$45,$45,$00,$00,$00,$00,$00,$40,$40,$55,$00 .byte $00,$00,$00,$00,$00,$2A,$15,$15,$00,$00,$00,$00,$00,$AA,$55,$55 }}; char TEXT[] = "zzzzzz!\"zzzzzzzzzzzzzzzzzzzzzzzz" "zzz#$%&'()\"zzzzzzzzzzzzzzzzzzzzz" "zzz*+,-./01zzzzzzzzzzzzzzzzzzzzz" "zzzzzzzzzzzzz232323232323zzzzzzz" "zzzzzzzzzzzzz444444444444zzzzzzz" "zzzzzzzzzzzzz565656565656zzzzzzz" "zzzzzzzzzzzzz787878787878zzzzzzz" "zzzzzzzzzzzzz999999999999zzzzzzz" "zzzzzzzzzzzzz565656565656zzzzzzz" "zzzzzzzzzzzzz787878787878zzzzzzz" "zzzzzzzzzzzzz999999999999zzzzzzz" "zzzzzzzzzzzzz565656565656zzzzzzz" "zzzzzzzzzzzzz787878787878zzzzzzz" "zzzzzzzzzzzzz999999999999zzzzzzz" "zzzzzzzzzzzzz56569:;95656zzzzzzz" "zzzzzzzzzzzzz78789<=97878zzzzzzz" "zzzzzzzzzzzzz99999>?99999zzzzzzz" "[email protected]" "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz" "zzzzzzzHIJzHIJzHIJzHIJzHIJzHIJzz" "zzzzzzzKLMzKLMzKLMzKLMzKLMzKLMzz" ; char DISPLAY_LIST[] = { BLANK8, BLANK8, BLANK8, LMS|MODE4, 0x00, 0x40, MODE4, MODE4, MODE4, MODE4, MODE4, MODE4, MODE4, MODE4, MODE4, MODE4, MODE4, MODE4, MODE4, MODE4, MODE4, MODE4, MODE4, MODE4, MODE4, MODE4, MODE4, MODE4, MODE4, JVB, <DISPLAY_LIST, >DISPLAY_LIST };
  11. btw, I did change the charset area to 0x7000 that isn't a typo.
  12. __address(0x2000) SPRITES[64*10]; Hey all, if anyone wants to help, I do appreciate it. I cannot get this to work for anything. But of course I do notice the example doesn't show it working. The example doesn't load any data. It just defines the address and does nothing else, that's why its so helpful to have full examples - because I want to load data directly to that address, and it just doesn't happen. As an experiment, I still split the characters into fontset and fontset2. The snippet below shows how the global variables are defined. Fontset2 goes magically somewhere, and I copy it into the characters area in main(). That works. Fontset, I use the address directive. That does nothing. Code snippet: __address(0x7000) char fontset[ 12 * 16] = kickasm {{ .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01 .byte $00,$00,$00,$00,$00,$00,$00,$40,$00,$00,$00,$00,$00,$00,$01,$15 .byte $00,$00,$01,$05,$15,$55,$55,$55,$00,$10,$54,$54,$54,$54,$55,$55 .byte $01,$05,$05,$15,$15,$55,$55,$55,$40,$50,$54,$55,$55,$55,$55,$55 .byte $00,$00,$00,$00,$40,$41,$55,$55,$00,$00,$00,$00,$00,$50,$54,$55 .byte $54,$45,$54,$15,$01,$00,$00,$00,$55,$15,$45,$54,$45,$05,$00,$00 .byte $55,$55,$55,$11,$14,$05,$01,$00,$55,$55,$41,$15,$50,$01,$55,$00 .byte $55,$15,$51,$15,$55,$54,$41,$00,$55,$55,$55,$11,$44,$50,$40,$00 .byte $55,$55,$55,$54,$11,$45,$00,$00,$55,$51,$45,$14,$10,$00,$00,$00 .byte $C0,$FF,$EA,$EA,$EA,$EA,$EA,$FF,$03,$FF,$AB,$AB,$AB,$AB,$AB,$FF .byte $FF,$55,$55,$55,$55,$55,$55,$55,$5A,$5A,$5A,$58,$58,$58,$58,$58 .byte $A5,$A5,$A5,$05,$05,$F5,$F5,$F5,$58,$58,$5A,$5A,$58,$58,$5A,$5A }}; char fontset2[] = kickasm {{ .byte $F5,$F5,$A5,$A5,$F5,$F5,$A5,$A5,$55,$55,$55,$55,$55,$55,$55,$55 .byte $AA,$AA,$A5,$A5,$AA,$AA,$A5,$A5,$AA,$AA,$96,$96,$AA,$AA,$96,$96 .byte $A5,$A5,$A5,$A5,$AA,$AA,$A5,$A5,$96,$96,$96,$96,$AA,$AA,$96,$96 .byte $A5,$A5,$A5,$A5,$A5,$A5,$A5,$AA,$96,$96,$96,$96,$96,$96,$96,$AA .byte $00,$00,$00,$00,$00,$00,$55,$00,$05,$05,$15,$15,$54,$54,$54,$00 .byte $15,$15,$15,$15,$54,$54,$54,$00,$15,$15,$15,$15,$55,$55,$55,$00 .byte $15,$15,$15,$15,$15,$15,$15,$00,$15,$15,$15,$15,$45,$45,$45,$00 .byte $14,$14,$15,$15,$45,$45,$45,$00,$00,$00,$00,$00,$40,$40,$55,$00 .byte $00,$00,$00,$00,$00,$2A,$15,$15,$00,$00,$00,$00,$00,$AA,$55,$55 .byte $FE }};
  13. P.s. I understand in Assembler, including KickAssembler, that I would use a * directive to tell the assembler where to place output, e.g. *=$4000 “Data”. And I know that from reading the manual. However, I didn't label a memory area called Data in my program. I know of no reason why it's required, except I cannot remove it, or the compile fails.
  14. Not to hijack the thread, but thanks for the linker definition. I think that is what I need. My goal is not to get a smaller XEX file. It's not to make a program run on a 32k atari either. I have 2 goals - and I mention in case that influences the answer, what I do want to do, is use bank switching. I prefer to set up the code to use bank switching from the start, then go bonkers with animations and waste memory as I see fit. However - today, I am not testing bank switching, I just want to start my code in Bank 2, and put my screen in Bank 1. I will then someday swap banks around in the $4000 to $7FFF window as I see fit. The secondary goal, is just to have the memory plan set - just simple reasonable something to get started, I just really cannot spend too much time on minutia, or the project bogs down. So, here is my plan. Start code at $8000 Bank 2. That's be my program code. Put my screen data in $4000, that'll be where Antic finds stuff. Someday I may swap those banks, but today I'm not even doing that. Here is the ld that I created, modified the the ld that was posted earlier in this thread. Does it look like its reasonable? It doesn't crash. But, why do I have to define this segment called "Data". What goes in Data? I'm aware is some super basic question, but it just helps to ask the simplest of questions, because it clarifies. thanks Edit: In case it's not clear, I'm fine with this limitation: My code will not take more than 16K (Bank 2). My characters data/animations will not take more than 64K (16k * 4 banks). Doesn't matter to me if it was technically possible to squeeze out more, that would be for a future project to squeeze the last bit....:). haha...anyway, thanks in advance for any help! //https://atariage.com/forums/topic/313212-funkheld-kickc-questions/ .file [name="%O", type="bin", segments="XexFile"] .segmentdef XexFile .segment XexFile // Binary File Header .byte $ff, $ff // Program segment [start address, end address, data] .word ProgramStart, ProgramEnd-1 .segmentout [ segments="Program" ] // RunAd - Run Address Segment [start address, end address, data] .word $02e0, $02e1 .word %E .segmentdef Program [segments="ProgramStart, Code, Data, Screen, ProgramEnd"] .segmentdef ProgramStart [start=$8000] .segment ProgramStart ProgramStart: .segmentdef Code [startAfter="ProgramStart"] .segmentdef Data [startAfter="Code"] .segmentdef Screen [start=$4000] .segmentdef ProgramEnd [startAfter="ProgramStart"] .segment ProgramEnd ProgramEnd:
  • Create New...