rsh
-
Content Count
12 -
Joined
-
Last visited
Posts posted by rsh
-
-
1 hour ago, rsh said:Yep PORTB magic! ... I would be interested in looking at that same basic program as well. Do you remember what/where I could get it. I found a page but can't seem to find the full code behind it.
I found it https://archive.org/details/1985-11-anticmagazine/page/n55/mode/2up
In the text of the mag. Interesting thing is it seems to be switching modes as well as banks. Not sure why it does this yet (see below).
There are 4 modes to toggle for extended Ram. I'm thinking the "extend" command in Basic XE put's you in: "CPU extended RAM mode" and automatically moves your program in to secondary bank area.
(referenced modes here https://www.atariarchives.org/mapping/appendix16.php )
MODE BANK No. 6502 ANTIC No. Address 0 Extd Extd 0 $0000-$3FFF 1 Main Exd 1 $4000-$7FFF 2 Extd Main 2 $8000-$BFFF 3 Main Main 3 $C000-$FFFF
POKE 54017, 193 + (MODE * 16) + (BANK * 4)
The above program is doing this:
Bank 0 or (1 in program): POKE 54017, 193 + (1 * 16) + (0 *4) = POKE 54017, 209 Mode (extd/extd)
Bank 1 or (2 in program): POKE 54017, 193 + (1 * 16) + (1 *4) = POKE 54017, 213 "
Bank 2 or (3 in program): POKE 54017, 193 + (1 * 16) + (2 *4) = POKE 54017, 217 "
Bank 3 or (Main in program): POKE 54017, 193 + (3 * 16) + (3 *4) = POKE 54017, 253 Mode (main/main)
I believe Basic XE uses this mode: Poke 54017,193 (to start, the move and bput/bget commands must set the Bank and buffer bank data for read/write)
1 Main Exd 1 $4000-$7FFF CPU extended RAM mode
The question now is which mode to pick for ACTION! .. I will try and copy Basic XE's mode and usage and maybe implement the video extended RAM mode (this is like a giant video ram disk)
both would solve my problem.
-
19 minutes ago, slx said:Atari Wiki has Action! code to use RAM under the OS. Maybe you can expand this to use more 130XE RAM.
I will tinker with this as well, thanks! This worries me a little since I want it to work with runtime don't want any gotchas!
-
2 hours ago, 576XE said:I've never programmed in Action! But I understand it's reasons etc.
As far as it's concerned EXTMEM, may be this code can help you someway...
!====================================! ! BANKS.PRG ! ! Using 130XE Extended Banks in ! ! PL65 Programming Language ! !------------------------------------! ! Evgeny Zolotarev,(aka 576XE), 2020 ! !====================================! INCLUDE TERMINAL.LIB !- CONSTANTS & VARIABLES: CONST bkMask=%10010001 BYTE PORTB=$D301,NMIEN=$D40E,bkTag INT bkNum !- DUMMY array representing ---------! !- selected BANK's slice ------------! BYTE bkMem[$4000]=$4000 !- Bank Selector Values -------------! !- Atari800WinPlus 576XE ------------! BYTE bkSel[33] DATA $93, $81,$83,$85,$87,$89,$8B,$8D,$8F, $A1,$A3,$A5,$A7,$A9,$AB,$AD,$AF, $C1,$C3,$C5,$C7,$C9,$CB,$CD,$CF, $E1,$E3,$E5,$E7,$E9,$EB,$ED,$EF; !- Bank Selector Values -------------! !- Altirra 576XE Compy scheme -------! ! BYTE bkSel[33] ! DATA $33, ! $21,$23,$25,$27,$29,$2B,$2D,$2F, ! $61,$63,$65,$67,$69,$6B,$6D,$6F, ! $A1,$A3,$A5,$A7,$A9,$AB,$AD,$AF, ! $E1,$E3,$E5,$E7,$E9,$EB,$ED,$EF; ! String VAR to store in all BANKS STRING inp$[4+27] DATA " => User DATA from Bank #00"; ! Set string as VAR for appending STRING out$[4+27] DATA " "; !- PROCEDURES: !- Clear Screen Procedure -----------! PROC clrScr() CONST clr=255 BEGIN WRTSTR(CHR$(125)) END !- Wait for Any Key Pressed ---------! PROC anyKey() CONST none=255 BYTE CH=764 BEGIN WRTSTR("Wait for a Key...") CR() WHILE CH=none DO ENDWHILE CH=none END !- Place bkSel Tags into PORTB ------! PROC setBk*(BYTE bkTag) BEGIN !- Wrapper STOPs/STARTs IRQ & NMI ---! SEI LDA #$00 STA NMIEN LDA PORTB AND bkMask OR bkTag STA PORTB LDA #$40 STA NMIEN CLI END !- Send bkNum to setBk subroutine ---! PROC setBank(INT bkNum) BEGIN bkTag=bkSel[bkNum] setBk*(bkTag) END !- Writes to Bank -------------------! PROC writBk() BEGIN FOR bkNum=0 TO 32 DO WRTSTR("Writing to BANK #") WRITE(bkNum) CR() IF bkNum<10 THEN inp$[25,25]=STR$(0) inp$[26,26]=STR$(bkNum) ELSE inp$[25]=STR$(bkNum) ENDIF out$=inp$ setBank(bkNum) MOVE(.out,LEN(out$),.bkMem) NEXT END !- Reads from Bank ------------------! PROC readBk() BEGIN FOR bkNum=0 TO 32 DO WRTSTR("Reading BANK #") WRITE(bkNum) CR() setBank(bkNum) MOVE(.bkMem,LEN(out$),.out) WRTSTR(out$) CR() NEXT END !------------------------------------! MAIN() BYTE PORT BEGIN LDA PORTB STA PORT clrScr() anyKey() writBk() anyKey() clrScr() readBk() LDA PORT STA PORTB END ! >>> EOF <<< !Holy Smokes this might be exactly what I need. If I can get this to work... I will see about creating those copy lib calls like Basic XE. Thank you this is another good place to start! appreciate it!
-
1
-
-
19 hours ago, Dmitry said:I'm probably not helping, because i cannot specifically answer your question. But as it happens, I typed in the Ian Chadwick Demo for accessing Antic 130xe extended memory just a few days ago..over Christmas break. It uses regular Atari Basic. It was kind of fun, that is, typing from a magazine again.
In my case, i was examining the Basic, to implement what I needed to do in Assembler. And I found that I just had to look at the code, it was obvious enough from the demo how it works. Which, I cannot say the same from reading the article.
I found the article to be completely incomprehensible, I think it really misdirected by talking about logical addresses that have no importance at all - it just seems to me that was the writing style in the 1980s. I finally just had to ignore the article. But the code is clear, poke portb give the cpu access to the bank, write your data. Poke portb again, give antic access to read the written data, addressing never changes, just the active bank.
And I even found another article, that basically said don't try to use extended ram, unless you have Basic XE! Wow! It's no wonder it didn't catch on more, those magazine articles were highly influential.
Yep PORTB magic! ... I would be interested in looking at that same basic program as well. Do you remember what/where I could get it. I found a page but can't seem to find the full code behind it.
-
Has anyone built lib/proc(s) in ACTION! for accessing the 130xe extra memory banks. Like the Basic XE commands: move srcAddr,destAddr,size,bank and BPUT/BGET #1,start,end,bank would be kicka$$...
Seems this would be a helpful set of functions.
.
-
On 8/5/2020 at 11:32 PM, dmsc said:Hi!
The idea is simple: use the COLRSH O.S. variable to count the current line, so that each DLI is:
DLI: ' Save Registers PHA TXA PHA ' Read current counter and sync LDX COLRSH STX WSYNC ' Read from table and store color LDA table,X STA COLBK ' Increment counter for next DLI INC COLRSH ' Exit DLI PLA TAX PLA RTI
The standard OS will clear COLRSH to 0 on each vertical blank, even when the critical flag is set, whenever the attract mode is skipped.
Have Fun!
I have messed around with this more, not sure I understand the mechanics yet... How do we tie the line of the DLI to the player position? I guess we are using player 2 to multiplex over the other players and change the color in the process. where does the move player2 and color change occur in the DLI?
-
11 hours ago, dmsc said:Hi!
The idea is simple: use the COLRSH O.S. variable to count the current line, so that each DLI is:
DLI: ' Save Registers PHA TXA PHA ' Read current counter and sync LDX COLRSH STX WSYNC ' Read from table and store color LDA table,X STA COLBK ' Increment counter for next DLI INC COLRSH ' Exit DLI PLA TAX PLA RTI
The standard OS will clear COLRSH to 0 on each vertical blank, even when the critical flag is set, whenever the attract mode is skipped.
Have Fun!
Thank you very much. I will see if I can get this to work.
-
This is really cool setup. I'm looking for something simple like this for Action! to add color to players. Everything I've run across requires a VBI and seems very complex... where you don't use one. Do you have an example in Action! Any suggestions. I'm not currently familiar will basic.syn syntax to convert these to raw asm or Action!
-
On 8/13/2011 at 12:20 PM, peteym5 said:I have been experimenting with player/missile graphics multiplexers to get more sprites on the screen. I manage to get 10 multicolor ones at 20 pixels tall just using players so they can only be 8 pixels wide. I did include setting the player double width and quad width for certain sprites. These may be use for a potential future game. I went through and drawn up some mythical monsters like Dragons, Spiders, Bats, Unicorns, Pegasus, Griffins, etc. I am consider making something that goes room by room (like 2600 adventure or NES Zelda) using Antic 4 mode for the walls and stuff in the rooms. I would like to build something original.
This is so Fantastic! Truly amazing! well done! I'm still a little lost on the mechanics. I want to do this in Action! but I am a little stumped. Does anyone have some simple code that does one sprite and couple colors. Is it limited to graphics mode? This should be utility library. I find it amazing that even OSS back when Action! came out. They did not provide some of the cool powerful routines from the already created assembler (written by OSS) from Basic XE (for example rget and print using) great tools. Back then everyone did everything from scratch over and over again.
-
On 6/8/2020 at 10:24 PM, phaeron said:This is a bit strange. You might notice slightly more latency than A8WP but it shouldn't be that bad, and it sounds like something is causing the emulator to bog down. Enable View > Show FPS and make sure you're hitting 60 (may bounce around 59-61 but shouldn't be significantly below that), and check that GPU usage isn't spiking in Task Manager. Altirra's default configuration should be lean on the GPU usage but enabling some options like high artifacting can be bit heavier.
Custom devices can interface to a local network server but don't currently have the ability to access the full memory map, they can only affect their own local device memory. I've thought about the possibility of an automation profile that can access the full address space but it is not currently implemented.
Thank you for the response. I did some testing and restarting Altirria and resetting the config. I got it to work much better, but still does not seem as responsive as WinPlus. Altirria my have some leak that can slow usb device input down.
-
Thank you for version 3.20... truly amazing!!!
Mouse and Paddle emulate. I noticed using a mouse as a paddle is not playable as there major delays and is jerky. To give an example compare it with Atari800winPLus. The difference is stunning.
Try running Kaboom!.bin and you will see what I mean. Atari800WinPlus is smooth as glass.
Not sure if this is in the paddle or the mouse it's self. I noticed using actual atari 2600 paddles it behaves the almost the exact same as with mouse input in Altirra. Unfortunately, Atari800WinPlus does not support a
paddle input for comparison... I'm using the 2600 Daptor D9 for the paddle input to windows 10. I don't think it's the Daptor causing delay since the mouse acts the same, there is a issue with
the paddle input response routines.
I have not tired this on windows 7. Has anyone else noticed this or fixed the problem.

OSS ACTION! programming language
in Atari 8-Bit Computers
Posted · Edited by rsh
Nice! This is cool it says you access all 65K without having to worry about the 16K bank limit. I wonder if it will split read/write across banks as well. Can I shove that in to ACTION! lol not sure but seems to be very clean. Thanks!