Jump to content

576XE

Members
  • Content Count

    806
  • Joined

  • Last visited

Community Reputation

152 Excellent

About 576XE

  • Rank
    Dragonstomper
  • Birthday 03/26/1959

Profile Information

  • Gender
    Male
  • Location
    Moscow, Russia

Recent Profile Visitors

10,635 profile views
  1. Merry Christmas and Happy New Year, FRIENDS! zen
  2. Just using $93 (Which moves BASIC out) instead of $91 makes all work done. BASIC steals 8KiB of high memory and thus reloades and refreshes screen. Phaeron help me and we all happy! Best wishes from Moscow! zen
  3. 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 <<< !
  4. Are you the real highlander McLaneinc? My history goes from a meeting with Nazareth group. Some single malt whisky and then ... I asked, Are You Peter Agnew - really Пётр Агнёв He said NO! Thus I can say some misunderstanding... arived! GOD BLESSED YOU!
  5. Really I always used emulators with BASIC OFF. ... And forgot that 0 for BASIC is BASIC ON! Avery said all truth! $93 instead $91. All works!!! !====================================! ! 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 <<< ! zen
  6. I must say Avery - YOU ARE A MAN! Many thanks and GOD BLESS YOU! Your suggestions are highly appreciated! Best wishes from cold-cold country! zen
  7. Hello, phaeron. At first - Merry Christmas! Season Greetings and Happy New Year! I hope you can help me someway My question: Do you meet some problems with banks switching in Altirra? I wrote PL65 demo program and meet some glitch behavior in emulators Altirra or Atari800WinPlus. No mean Rambo-576 or Compy-576! (With right banks schemas and masks of course.) THERE ARE NOT PROBLEMS IN REAL HW! I found that the problem arises while switching from 0-th (Main) to EXTMEM (back and forth). If I exclude countong from (0 to 32) and use (1 to 32) no problems at all! Here is some screenshots: Rambo Drops 2 lines upscreen and stay there cursor Normal reading counting from (1 to 32) Drops one line upscreen and stay there cursor You can see in Monitor that Writing to Bank 0 is DONE! PL65 SD_X33A.atr !====================================! ! BANKS.PRG ! ! Using 130XE Extended Banks in ! ! PL65 Programming Language ! !------------------------------------! ! Evgeny Zolotarev,(aka 576XE), 2020 ! !====================================! INCLUDE TERMINAL.LIB !- CONSTANTS & VARIABLES: BYTE PORTB=$D301 INT bkNum !- DUMMY array representing ---------! !- selected BANK's slice ------------! BYTE bkMem[$4000]=$4000 !- Bank Selector Values -------------! !- Atari800WinPlus (Rambo) 576XE ----! !BYTE bkSel[33] !DATA $91, ! $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 $31, $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 setBank(INT bkNum) !- Atari800WinPlus 576XE ------------! ! CONST bkMask=%10010001 BYTE bkTag !- Altirra 576XE Compy scheme -------! CONST bkMask=%00110001 BYTE bkTag BEGIN bkTag=bkSel[bkNum] ! Wrapper for NMI & VBI ! SEI ! LDA #0 ! STA $D40E LDA PORTB AND bkMask OR bkTag STA PORTB ! LDA #$40 ! STA $D40E ! CLI 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() BEGIN clrScr() anyKey() writBk() anyKey() clrScr() readBk() END ! >>> EOF <<< ! Anyway I just reported some strange behavior My warmest wishes from Moscow! zen
  8. Hello, friends! I'd like to ask Is it possible to create in LOGO this cross-river puzzle?
  9. Hello, friends! At first I'd like to congratulate you with (not so distant) Holydays! My Season Greatings and wish you Happy new Year! To claryfy previous post I MUST say that I'm WRONG! Really every text lisp line DO NOT ends with CR! but with C-like ZERO! Thus lisp can not read normally edited text! And now... As far as it's concerned Inter-LISP/65 I'd like to present you Real Pretty-printing library. It's for printing to PRINTER (Or Notepad in emulators) It uses EDIT file and must be loaded AFTER! i.e. LISP (LOAD 'D:EDIT) (LOAD 'D2:PRN) It's the pretty-printed code of Library itself: (DEFINEQ TABX (LAMBDA (N) (PROG (COUNT) (SETQ COUNT N) LOOP (SETQ COUNT (SUB COUNT 1)) (COND ((> COUNT 0) (PRIN1 (QUOTE " ")) (GO LOOP))) (RETURN))) ) (DEFINEQ *FORMATS*(NIL) ) ; Because there is NO SUCH FUNCTION! (DEFINEQ TABRET (LAMBDA (N) (PROG NIL (COND (TFLG (RETURN)) ((TERPRI) )) (SETQ TFLG T) (COND ((> N LINE-WIDTH) (TERPRI) (TABX (SUB N LINE-WIDTH))) ((TABX N) )))) ) (DEFINEQ PRLIST (LAMBDA (L) (PROGN (OPEN 7 8 (QUOTE P:)) (PR# 7) (PRINT L) (TERPRI) (PR# 0) (CLOSE 7))) ) (DEFINEQ PRDUMP (LAMBDA (PROPS) (PROGN (OPEN 7 8 (QUOTE P:)) (PR# 7) (MAPCAR PROPS (LAMBDA (X) (PROGN (TERPRI) (PRIN1 (QUOTE "(DEFINEQ ")) (PRIN1 X) (PPRINT (GETD X)) (PRINT RPAR)))) (PR# 0) (CLOSE 7))) ) (DEFINEQ PRPROP (LAMBDA (FNAM) (PROGN (OPEN 7 8 (QUOTE P:)) (PR# 7) (PRINT FNAM) (TERPRI) (PR# 0) (CLOSE 7))) ) (DEFINEQ PRFORM (LAMBDA (X) (PROGN (OPEN 7 8 (QUOTE P:)) (PR# 7) (PROGN (TERPRI) (PRIN1 (QUOTE "(DEFINEQ ")) (PRIN1 X) (PPRINT (GETD X)) (PRINT RPAR)) (PR# 0) (CLOSE 7))) ) They all are very slow but works! As it rewrites some lists as *FORMATS* and forms as TABRET you are NOT recomended to use it normally but just for hard-copy printing. There are 4 forms for pretty-printing: 1. PRLIST - (PRLIST *FORMATS*) 2. PRFORM - (PRFORM 'TABRET) 3. PRPROP - (PRPROP D2:PRN) 4. PRDUMP - (PRDUMP D2:PRN) Best wishes from Moscow! zen PRINT.atr
  10. Does anyone can help me with some strange behaviour in my program. When 4-th bit of PORTB flips/flops GR0 screen blinks and output crashes. After turning ON/OFF all goes normally Your any suggestions will be very appreciated. It's PL65 sample code. !====================================! ! 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 $91, $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; ! 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 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 !- Place bkSel Tags into PORTB ------! 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() BEGIN clrScr() anyKey() writBk() anyKey() clrScr() readBk() END ! >>> EOF <<< ! zen
  11. Anyway I've tried this code in REAL HW -> Working !!! I just only change EXTMEM scheme to someone given by XRAM. Someway all the problems - with us.
  12. Hello, friends! Does anyone can explain me what's wrong with the code? Really I can not find any information about auto-refreshing screen while banks switching from main memory to extended and back. Thanks in advance and best wishes from Moscow
  13. Hello, friends. Recently I wrote simple bank-switching routine in PL/65. !====================================! ! BANKS.PRG ! ! Using 130XE Extended Banks in ! ! PL65 Programming Language ! !------------------------------------! ! Evgeny Zolotarev,(aka 576XE), 2020 ! !====================================! INCLUDE TERMINAL.LIB !- CONSTANTS & VARIABLES: BYTE PORTB=$D301 INT bkNum !- DUMMY array representing ---------! !- selected BANKs slice ------------! BYTE bkMem[$4000]=$4000 !- Bank Selector Values -------------! !- Emulator ONLY(Sic.) Atari 576XE --! BYTE bkSel[33] DATA $91, $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; ! 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 setBank(INT bkNum) CONST bkMask=%10010001 BYTE bkTag BEGIN bkTag=bkSel[bkNum] LDA PORTB AND bkMask OR bkTag STA PORTB END !- Writes to Bank -------------------! PROC writBk() BEGIN FOR bkNum=1 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=1 TO 32 DO WRTSTR("Reading BANK #") WRITE(bkNum) CR() setBank(bkNum) MOVE(.bkMem,LEN(out$),.out) WRTSTR(out$) CR() NEXT END !------------------------------------! MAIN() BEGIN clrScr() anyKey() writBk() anyKey() clrScr() readBk() END ! >>> EOF <<< ! This routine uses 576KiB RAM extension scheme of emulator ONLY! It works perfectly while traversing EXTMEM only i.e. [1..32] but if I try to traverse from MAIN bank to EXTMEM [0..32] it simply clears the screen for a moment and skips one or two strings of output or crashes. Nevertheless the DATA in all banks stays written firmly. I can see it reading emulator's monitor. The routine itself is clear and understandable but I still can not glue what's wrong. PL65 SD_X33A.atr Obviously you can use all codes at your disposal zen
  14. Hello baktra I tried EDIT13 and it's very clear looking and the text is very readable!!! Here <msg .by...> stanza has some digits - it's ASC("...") of MAE controls... And the result... Hello, Marius Is it possible to use all ATASCII Pseudographics in PANTHER and how? Sometimes it's very big problem in programming because some of the symbols are used by editor as control symbols. zen
  15. Hello, baktra. Edit13 is very suitable editor. Is it possible to eliminate CR symbol? The dots evidently shows us the end of line, isn't it? zen
×
×
  • Create New...