Jump to content
IGNORED

IntyBASIC compiler v1.2.9: The good things are now better!


Recommended Posts

 

Check your generated .cfg file, and check it doesn't exceed the areas indicated in the 42k example.

 

Most crashes are related to it.

 

Well, I hate to admit it, but the crashes were cause by me forgetting to put "PROCEDURE" after the label of a subroutine. INTYBasic didn't complain ... not sure if I should or not.... :) jk
Anyway, thanks for the reply. Good to know about the .cfg file. And thanks for an easy way to get assembler quality stuff onto a classic system!
  • Like 1
Link to comment
Share on other sites

 

 

Well, I hate to admit it, but the crashes were cause by me forgetting to put "PROCEDURE" after the label of a subroutine. INTYBasic didn't complain ... not sure if I should or not.... :) jk
Anyway, thanks for the reply. Good to know about the .cfg file. And thanks for an easy way to get assembler quality stuff onto a classic system!

 

 

I'm glad you could solve your problem. :) And yes, IntyBASIC generates code reasonably good :) still not satisfied with arrays, but for other operations is almost as efficient as assembler.

Link to comment
Share on other sites

 

 

Well, I hate to admit it, but the crashes were cause by me forgetting to put "PROCEDURE" after the label of a subroutine. INTYBasic didn't complain ... not sure if I should or not.... :) jk
Anyway, thanks for the reply. Good to know about the .cfg file. And thanks for an easy way to get assembler quality stuff onto a classic system!

 

Don't feel bad. I misspelled procedure, and spent 10 minutes figuring out why my game not compiling correctly. You can open up .lst. Go directly to the bottom of the list and see if errors are found. And you can jump to the error by using the find feature of the notepad and it'll take you to the line of your code that error were found.

Link to comment
Share on other sites

  • 2 months later...

Just released version 1.2.9, download at first post.

New in version 1.2.9:

  • Moved screen clearing at the very start of program to avoid brief title screen in Sears Intellivision.
  • Added missing C7 note in internal tables.
  • Solved MUSIC.PLAYING failing with MUSIC JUMP.
  • More optimization saving flags state across instructions.
  • Solved bug in PEEK optimization when source address was incremented between two PEEKs.
  • More indications in manual, including documenting CONT3 and CONT4.
  • VOICE.AVAILABLE for checking Intellivoice available.
  • VOICE.PLAYING for checking Intellivoice playing.
  • Solved several bugs in IntyColor and added some new features (replacement of color, generation of cards without checking duplicates, and process of images in chunks of 16 pixel high for MOB generation)
  • Like 5
Link to comment
Share on other sites

The best keeps getting better! Thank you!

 

 

 

Just released version 1.2.9, download at first post.

New in version 1.2.9:

  • Moved screen clearing at the very start of program to avoid brief title screen in Sears Intellivision.
  • Added missing C7 note in internal tables.
  • Solved MUSIC.PLAYING failing with MUSIC JUMP.
  • More optimization saving flags state across instructions.
  • Solved bug in PEEK optimization when source address was incremented between two PEEKs.
  • More indications in manual, including documenting CONT3 and CONT4.
  • VOICE.AVAILABLE for checking Intellivoice available.
  • VOICE.PLAYING for checking Intellivoice playing.
  • Solved several bugs in IntyColor and added some new features (replacement of color, generation of cards without checking duplicates, and process of images in chunks of 16 pixel high for MOB generation)

 

Link to comment
Share on other sites

It seems to me that you forgot to update the version number in the verbose output, so it is a little hard to determine if you're really running 1.2.9 or somehow have an older 1.2.8 in your path that takes precedence. I renamed the new binary to make sure it is the latest version. You might want to re-release it with new version number.

Link to comment
Share on other sites

It seems to me that you forgot to update the version number in the verbose output, so it is a little hard to determine if you're really running 1.2.9 or somehow have an older 1.2.8 in your path that takes precedence. I renamed the new binary to make sure it is the latest version. You might want to re-release it with new version number.

 

I'll check it. Thanks!

  • Like 1
Link to comment
Share on other sites

BTW, one other thing to check: Make sure any variables you allocate in JLP RAM space ($8040 - $9F7F) are marked "-RWBN", just like the variables in Scratch RAM and System RAM. If someone assembles their game in Intellicart .ROM format, it could cause trouble if that address range isn't marked "-RWBN", as the emulated Intellicart/CC3 will interfere with JLP.

 

Why? Because jzIntv actually emulates the Intellicart/CC3 when it sees a .ROM file. So, if that .ROM asks for RAM at $8040 and asks for JLP support, both will conflict with each other.

 

I've updated jzIntv and AS1600 to correctly carry through the "jlp = whatever" setting for both BIN and ROM file formats. I've also added warnings to the assembler and jzIntv when you ask for readable memory in the range $8000 - $9FFF and ask for JLP support, if you're using ROM format. (For BIN format, I have a bit more subtle check, as it's not tied to a specific peripheral like the Intellicart.)

  • Like 1
Link to comment
Share on other sites

It seems to me that you forgot to update the version number in the verbose output, so it is a little hard to determine if you're really running 1.2.9 or somehow have an older 1.2.8 in your path that takes precedence. I renamed the new binary to make sure it is the latest version. You might want to re-release it with new version number.

Updated in first post! so the PC version didn't had the extra syntax because I missed updating main source file (^^)!

 

BTW, one other thing to check: Make sure any variables you allocate in JLP RAM space ($8040 - $9F7F) are marked "-RWBN", just like the variables in Scratch RAM and System RAM. If someone assembles their game in Intellicart .ROM format, it could cause trouble if that address range isn't marked "-RWBN", as the emulated Intellicart/CC3 will interfere with JLP.

 

Why? Because jzIntv actually emulates the Intellicart/CC3 when it sees a .ROM file. So, if that .ROM asks for RAM at $8040 and asks for JLP support, both will conflict with each other.

 

I've updated jzIntv and AS1600 to correctly carry through the "jlp = whatever" setting for both BIN and ROM file formats. I've also added warnings to the assembler and jzIntv when you ask for readable memory in the range $8000 - $9FFF and ask for JLP support, if you're using ROM format. (For BIN format, I have a bit more subtle check, as it's not tied to a specific peripheral like the Intellicart.)

Updated! I hope I didn't broke something! (^^)!

  • Like 2
Link to comment
Share on other sites

  • 2 weeks later...

Oscar,

 

If you're going to add Intellivoice checking, maybe add ECS checking as well? This is the code I've been using:

 

check_ecs: PROCEDURE
ecs_on = 0 'default off, to be safe
i = PEEK($F0)
POKE $F0, i+1
IF PEEK($F0) = i+1 THEN ecs_on = 1
END

 

We talked about this over a year ago, so I don't know if there's a better method. This has been working just fine for me so far.

  • Like 2
Link to comment
Share on other sites

Oscar,

 

If you're going to add Intellivoice checking, maybe add ECS checking as well? This is the code I've been using:

 

check_ecs: PROCEDURE

ecs_on = 0 'default off, to be safe

i = PEEK($F0)

POKE $F0, i+1

IF PEEK($F0) = i+1 THEN ecs_on = 1

END

 

We talked about this over a year ago, so I don't know if there's a better method. This has been working just fine for me so far.

PRGE 2018 is in just over ten months. Just sayin. ?

Link to comment
Share on other sites

Oscar,

 

If you're going to add Intellivoice checking, maybe add ECS checking as well? This is the code I've been using:

 

check_ecs: PROCEDURE

ecs_on = 0 'default off, to be safe

i = PEEK($F0)

POKE $F0, i+1

IF PEEK($F0) = i+1 THEN ecs_on = 1

END

 

We talked about this over a year ago, so I don't know if there's a better method. This has been working just fine for me so far.

 

Just noted the bit "over a year ago", sorry but apparently I'm running in extended time and it looks like Yesterday for me :dunce:

But I still have plans for ECS. ;)

Link to comment
Share on other sites

Just noted the bit "over a year ago", sorry but apparently I'm running in extended time and it looks like Yesterday for me :dunce:

But I still have plans for ECS. ;)

For what it's worth, here's the code I use in P-Machinery. It is based on old discussions on this topic. Perhaps it can be implemented during initialization of IntyBASIC to set an internal flag (that's what P-Machinery does):

;; ======================================================================== ;;
.BOOT.ECS_CHECK PROC
_b.ecs_byte     QEQU    MEMMAP.EcsRam8bit               ; Chosen arbitrarily (any address in ECS RAM will do)

                ; --------------------------------------
                ; Attempt to detect ECS
                ; --------------------------------------
                MVII    #_b.ecs_byte,           R1      ; \_ Pick an ECS RAM address and read what's there
                MVI@    R1,     R0                      ; /
                COMR    R0                              ; \_ Complement it, including upper byte,
                MVO@    R0,     R1                      ; /     and store it back.
                XOR@    R1,     R0                      ; XOR the stored value with original inverted one
                CMPI    #PM.MSB_MASK,           R0      ; Make sure only the lower-byte is cancelled

            IF (.DEV.ReqEcs = PM.TRUE)
                BNEQ    .BOOT.ECS_FAIL                  ;   No?  halt boot sequence with an error message
            ELSE
                BNEQ    @@__done
                FLAG.Set(.PM.SYSINFO.Status, SYSINFO.HasEcs)
            ENDI
 
@@__done:       JR      R5                              ;   Yes? continue with main program
                ENDP
Legend:
  • MEMMAP.EcsRam8bit is the start of ECS extended Scratch RAM
  • PM.MSB_MASK is a mask on the Most Significant Byte of a word ($FF00)
  • .DEV.ReqEcs is an assembler directive stating whether the program requires the ECS (fail if it is not available), or merely wants it (just set a flag of availability).
  • .BOOT.ECS_FAIL is a routine that prints an error message on the screen and halts the program with an infinite loop.
  • FLAG.Set() is a macro that sets a flag bit in the P-Machinery System Information (SYSINFO) status word.
  • Like 2
Link to comment
Share on other sites

  • 3 weeks later...

BTW, you can communicate "Want" vs. "Need" for ECS and Intellivoice to jzIntv and other tools now, through CFGVARs in AS1600. I'm adding a section of docs in the AS1600 documentation on how that works. The short, short version:

 

  • ECS:
    • CFGVAR "ecs_compat" = 0 ; incompatible with ECS
    • CFGVAR "ecs_compat" = 1 ; don't care about ECS
    • CFGVAR "ecs_compat" = 2 ; Enhanced by ECS, but not required
    • CFGVAR "ecs_compat" = 3 ; Requires ECS
  • Intellivoice:
    • CFGVAR "voice_compat" = 0 ; incompatible with Intellivoice
    • CFGVAR "voice_compat" = 1 ; don't care about Intellivoice
    • CFGVAR "voice_compat" = 2 ; Enhanced by Intellivoice
    • CFGVAR "voice_compat" = 3 ; Requires Intellivoice

 

So, if your IntyBASIC game requires Intellivoice and ECS:

ASM CFGVAR "ecs_compat" = 3
ASM CFGVAR "voice_compat" = 3

Then jzIntv and friends will automatically enable Intellivoice and ECS based on the variables in the CFG file (assuming BIN+CFG). If you're using AS1600 and jzIntv posted in the last month or so, that'll also work for ROM files.

 

It'd be great if IntyBASIC had a way to say "Wants ECS" or "Requires ECS", and output these CFGVARs automagically.

  • Like 4
Link to comment
Share on other sites

If I didn't have more important things to do, I would probably look into making a cover of "Money for Nothing" right now.

 

... I want my ECS ...

... I want my Intellivoice ...

... maybe get a blister on your little finger ...

... maybe get a blister on your thumb ...

... money for nothing and your carts for free ...

Edited by carlsson
  • Like 2
Link to comment
Share on other sites

It'd be great if IntyBASIC had a way to say "Wants ECS" or "Requires ECS", and output these CFGVARs automagically.

 

I have a similar feature in P-Machinery. There is a "Require ECS" directive and a "Detect ECS" directive. The former detects the ECS and fails if it is not there; while the latter detects it and sets all necessary system flags and data structures to enable its use. I've already adapted it to support CFGVARs. :)

 

-dZ.

  • Like 1
Link to comment
Share on other sites

"Enhanced by ECS"

 

I am thinking that the most practical use of this is to use (or not use) the extra AY chip. Otherwise, I can't think of an IF...THEN statement where a program might be able to use the additional 2K. Am I not being creative enough?

 

 

 

 

 

BTW, you can communicate "Want" vs. "Need" for ECS and Intellivoice to jzIntv and other tools now, through CFGVARs in AS1600. I'm adding a section of docs in the AS1600 documentation on how that works. The short, short version:

 

  • ECS:
    • CFGVAR "ecs_compat" = 0 ; incompatible with ECS
    • CFGVAR "ecs_compat" = 1 ; don't care about ECS
    • CFGVAR "ecs_compat" = 2 ; Enhanced by ECS, but not required
    • CFGVAR "ecs_compat" = 3 ; Requires ECS
  • Intellivoice:
    • CFGVAR "voice_compat" = 0 ; incompatible with Intellivoice
    • CFGVAR "voice_compat" = 1 ; don't care about Intellivoice
    • CFGVAR "voice_compat" = 2 ; Enhanced by Intellivoice
    • CFGVAR "voice_compat" = 3 ; Requires Intellivoice

 

So, if your IntyBASIC game requires Intellivoice and ECS:

ASM CFGVAR "ecs_compat" = 3
ASM CFGVAR "voice_compat" = 3

Then jzIntv and friends will automatically enable Intellivoice and ECS based on the variables in the CFG file (assuming BIN+CFG). If you're using AS1600 and jzIntv posted in the last month or so, that'll also work for ROM files.

 

It'd be great if IntyBASIC had a way to say "Wants ECS" or "Requires ECS", and output these CFGVARs automagically.

Link to comment
Share on other sites

"Enhanced by ECS"

 

I am thinking that the most practical use of this is to use (or not use) the extra AY chip. Otherwise, I can't think of an IF...THEN statement where a program might be able to use the additional 2K. Am I not being creative enough?

 

World Cup Soccer offers a 4-player mode if the ECS is attached.

 

Games that ordinarily use keypad input might offer ECS keyboard input as an alternative input method. For example, on LTO Flash's menus, if you press a letter on the keyboard, it will cycle through all titles in the menu that start with that letter.

 

Mostly, though, it's the 6ch music.

  • Like 1
Link to comment
Share on other sites

World Cup Soccer offers a 4-player mode if the ECS is attached.

 

Games that ordinarily use keypad input might offer ECS keyboard input as an alternative input method. For example, on LTO Flash's menus, if you press a letter on the keyboard, it will cycle through all titles in the menu that start with that letter.

 

Mostly, though, it's the 6ch music.

Or Ultimate Pong which has a four player version if the ECS is plugged in.

As for 2k, using it optionally would be a challenge since you need to make the game work without the 2k, maybe if you had a random maze rogue-like you could build bigger levels if an ECS was plugged in.

  • Like 1
Link to comment
Share on other sites

As for 2k, using it optionally would be a challenge since you need to make the game work without the 2k, maybe if you had a random maze rogue-like you could build bigger levels if an ECS was plugged in.

 

Or, perhaps a level editor like Scooby Doo had.

 

That 2K would definitely need to be reserved for a feature that only activated when the ECS was attached.

Link to comment
Share on other sites

Yeah, I think there are no good practical options for "optional RAM" in any game that might come out these days... It's not like expanded GRAM to enhance runtime experience, or expanded ROM for larger games. I think the best hardware use is to have an ECS for the second AY and do it on the JLP architecture for expansiveness.

 

 

Or, perhaps a level editor like Scooby Doo had.

 

That 2K would definitely need to be reserved for a feature that only activated when the ECS was attached.

Link to comment
Share on other sites

Yeah, I think there are no good practical options for "optional RAM" in any game that might come out these days... It's not like expanded GRAM to enhance runtime experience, or expanded ROM for larger games. I think the best hardware use is to have an ECS for the second AY and do it on the JLP architecture for expansiveness.

 

If you are using JLP then you get the 2k without the ECS
Link to comment
Share on other sites

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...