Jump to content
IGNORED

Game design thinktank - Retrogaming


Recommended Posts

No - I don't expect Joint projects to easily come together - nor any team effort to, etc...

Even teaming up a programmer with a graphics guy/gal - can be difficult in itself - but not impossible, I'll guess...

 

Getting several programmers to work together, will no doubt be very difficult - maybe impossible...

Someone has to be lead programmer - maybe lucky to have someone consulting.. wonder how Nintendo/etc go about it...

 

The flip side is that I don't like seeing projects which could be that much better - with a little extra help...

Or projects that fail in important areas --- like Crownload - really a fantastic effort - but still had a few rough edges to it, that could have been better? Control issues...

Link to comment
Share on other sites

Getting several programmers to work together, will no doubt be very difficult - maybe impossible...

Someone has to be lead programmer - maybe lucky to have someone consulting.. wonder how Nintendo/etc go about it...

By making it a nine to five job. All of the developers are in the same building and possibly the same office, one person is in charge and someone above them is paying everybody a wage (as well as covering power bills, air conditioning etc.) so they'll listen to that person. The model we use now is more like the "bedroom" coders of the 1980s and current indies, so there is usually one person (more often than not the programmer) acting as lead developer and everybody else is recruited after there's something running to entice them on board with.

 

Which is better (and which produces the better games) is subject to debate, most of the games we love on the A8 and indeed other 8-bit computers come from the "indie" approach (even when things became more commercial at the end of the 1980s it was still the same model in use for a lot of professional developers, just beefed up with a project manager, maybe an office and for sure cross assembly), the popular titles for the Nintendo and Sega systems are products of the businesslike method. Getting the latter to work outside of a commercial environment is insanely difficult though, i've seen people try to get projects going with a team of half a dozen and they rarely get past the first hurdle - i've seen well-meaning big team projects crash and burn in a matter of weeks when nobody would make a call about which graphics mode to work in!

  • Like 1
Link to comment
Share on other sites

For a "normal" game the indie approche is enough. At least for me as "my guys" live (almost) in the same town :) Our problem is more that these two are really busy in RL as they have other hobbies they value more :(

 

However, you see the problem with (most) of these games. Either they are polished with simple (to program) game play or the other way around.

For me that is understandable. If I have a game engine ready I want to get the thing out of the door and not code an additional year to polish it.

I bet there are some A8 coders who wouldn't be able to code a (complex) game, but would be able to do the polishing (intro, inerlude screens, pause screens, ...). Or imagine someone would have had time/motivation to make a cooler level/enemy design for "Heli in the Caves"...

  • Like 1
Link to comment
Share on other sites

  • 2 weeks later...

 

 

 

I was asked to explain indexing files and indexing data in a file (xBios):
We can index the files on the disk. we can " open " all interesting files "at once".
The benefit is that the "open" indexed file is not related with searching the directory, the file is opened immediately. We can do this by function xBIOS_OPEN_FILE and store the file handle of the variables: xDAUX2 ( xBIOS + $3FD ) , xDAUX1 ( xBIOS + $3fe ) in any momnt we can open this file by function xBIOS_OPEN_DEFAULT_FILE and variable xFILE (xBIOS + $3EE) . OPEN_FILE functions can be replaced by xBIOS_FIND_FILE and take handle directly from the buffer ( save time )
We can also index the data in the file. when we are connect all data in one big file, and we want to have immediate access to them, we can do this: open file, move to the interesting point (i.e. xBIOS_SET_FILE_OFFSET) where interesting data begin (it does not have to be a block in a binary file) then grab the handle from xDAUX2, xDAUX1 and offset (variable xBUFFERO xBIOS+$3EB). If at any time a program want to have access to these data store file handle to xFILE var, do xBIOS_OPEN_DEFAULT_FILE and save offset to xBUFFERO. This operation is immediate - without directory searches or read file from start. also you can do xBIOS_LOAD_BINARY_FILE of any indexed point in file. variables and functions such as file offset now operate from this location in the file.
general indexing files or data in the file is related with a single reading at the begining, later access to anywhere in the file is immediate (write 3 bytes), no longer open operation or directory search. indexing is safe, properly working with different densities, relocation buffer or library.
xB v3 has a lot of new features (i.e. binary lib relocator...)

 

 

Today I want to test this (with the older version not the V3 you appended here).

To avoid mistakes which would cost em hours of debugging I want to clarify things.

 

My file should be layouted like this:

- general stuff

- mainpart

- INIAD (jump to start)

- data level 1

- data level 2

...

 

1.) At the start (after the loader jumped through INIAD) I store the file handle and the offset

2.) I do the open_default you explained and then xbios_load_data to load level 1 and store the offset in "off_lev2" for later use

 

and so on for the other levels. sounds easy and logical. But now I have some question:

 

1.) the file handle is the same for teh whole file I assume so I have to store it only once?

2.) You wrote file handle is in XDAUX1+xDAUX2 is it really 16 bit or just 8 bit? As xFILE seems to be 8 bit

3.) The offset is in xBUFFER0 (8 bit) which sounds a bit small as I assume it is the number of bytes

 

OTOH you wrote "(write 3 bytes)" which fits to the rest of your explanation. Could you maybe elaborate what "file handle" and "offset" are?

For now I will implemented it as you described above, maybe it works without problems :) However, if it doesn't work I'd rather wait for a clarification instead of debugging :)

 

Thank you very much in advance

Link to comment
Share on other sites

okay, I wait for a reply to my last message as it doesn't work :(

 

I figured by now that xDAUX1/2 hold the sector number (as everyone with a bit of knowledge of SIO - not me :) - would have assumed).

Before calling "open_default_file" I set xFILE. This value will however never be read (according to Altirra debugger) before the program crashes.

The crash happens because a RTS leads to address 1. Probably this happen sin the part where values are pushed to the stack before JMPing thru INITAD which leads directly to a RTS.

 

As said before, I stop here now instead of debugging further.

 

Please note that I use the older xBIOS and not the V3 you posted here. I may try the V3 later.

Link to comment
Share on other sites

Sorry for the million posts I make today. But older posts can not be edited (at least not to my knowledge)

 

I just made a quick test of the beta-V3 xbios.com and it gives me another error. It seems to use the SIOV routine. which is not available as I disable the OS ROM.

With the older xbios.com this was no problem :(

 

If a mod wants to join my last two posts with this one please go ahead :)

Link to comment
Share on other sites

 
              opt h+l+
              icl 'atarihw.ah'

xBIOS                           equ     $800
; func
xBIOS_LOAD_DATA                 equ     xBIOS+$0c
xBIOS_SET_LENGTH                equ     xBIOS+$1e
xBIOS_SET_DEFAULT_DEVICE        equ     xBIOS+$2a
xBIOS_OPEN_DEFAULT_FILE         equ     xBIOS+$3f
; var
xIRQEN                          equ     xBIOS+$3e8
xFILE                           equ     xBIOS+$3ea
xSPEED                          equ     xBIOS+$3f0
xHSPEED                         equ     xBIOS+$3f1
xBUFFERO                        equ     xBIOS+$3f3 ; offset
xDAUX2                          equ     xBIOS+$3fd ; hi
xDAUX1                          equ     xBIOS+$3fe ; lo

filo            equ     $00
fihi            equ     $03
fio             equ     $06
level           equ     $09

ekr             equ     $2000
chb             equ     $E000

l1_len          equ     $400
l2_len          equ     $300
l3_len          equ     $500

PUPBT1          equ     $033D

                org     PUPBT1
                .byte   c'xxl'  ; make reset key work as reset

                org     ekr
                .byte   d'1,2,3 - change levels           '

                org     $0c00
init1
                jsr     xBIOS_SET_DEFAULT_DEVICE        ; no need AtariOS anymore

                lda     xHSPEED                         ; set UltraSpeed if present
                bmi     @+
                sta     xSPEED
@
                sei
                ldy     #$00 
                sty     dmactl
                sty     nmien
                sty     irqen
                sty     xIRQEN
                lda     #$fe
                sta     portb
                
                sty     $00
                lda     >chb
                sta     $01
                ldx     #$03
@               inc     portb
                lda     ($00),y
                dec     portb           ; ROM OFF
                sta     ($00),y
                iny
                bne     @-
                inc     $01
                dex
                bpl     @-

                lda     <_dl
                sta     DLISTL
                lda     >_dl
                sta     DLISTH

                lda     >chb
                sta     chbase

                lda     #%00100001
                sta     dmactl


                ldy     #$00                    ; 01 level
                jsr     get_file_index
                
                ldy     #$01                    ; 02 level
                jsr     get_file_index
                
                ldy     #$02                    ; 03 level
                jsr     get_file_index


_loop           jsr     klawisze
                jmp     _loop


klawisze        lda     skstat
                and     #%00000100
                beq     @+
_rts            rts
@               lda     kbcode
                cmp     #$1f     ; 1
                beq     loadl1
                cmp     #$1e     ; 2
                beq     loadl2
                cmp     #$1a     ; 3
                bne     _rts
                
loadl3          ldy     #02
                .byte   { NPO $ffff }
loadl2          ldy     #01
                .byte   { NPO $ffff }
loadl1          ldy     #00
                sty     level
                lda     filo,y
                sta     xFILE
                lda     fihi,y
                sta     xFILE+1
                jsr     xBIOS_OPEN_DEFAULT_FILE
                ldy     level
                lda     fio,y
                sta     xBUFFERO
                
load_level      ldx     level_lenH,y
                lda     level_lenl,y
                tay

load_level_data jsr     xBIOS_SET_LENGTH
                ldx     >ekr+32
                ldy     <ekr+32
                jmp     xBIOS_LOAD_DATA

get_file_index  lda     xDAUX1
                sta     filo,y
                lda     xDAUX2
                sta     fihi,y
                lda     xBUFFERO
                sta     fio,y
                jmp     load_level

         
level_lenL      .byte   <l1_len,<l2_len,<l3_len
level_lenH      .byte   >l1_len,>l2_len,>l3_len

_dl
            :3  .byte $70
         	.byte $42,a(ekr)
                .byte $10
            :4  .byte $02
    	        .byte $41,a(_dl)


                ini     init1

                  opt h-
      :l1_len/16  .byte   d'LEVEL 1         '      
      :l2_len/16  .byte   d'LEVEL 2         '*      
      :l3_len/16  .byte   d'LEVEL 3 LEVEL 3 '      
 

first of all, use xB v3. I need change var location and/or func. order to force to use v3

 

> I just made a quick test of the beta-V3 xbios.com and it gives me another error. It seems to use the SIOV routine. which is not available as I disable the OS ROM.

 

v3 could load from any device by default. if you want rom off: use jsr xBIOS_SET_DEFAULT_DEVICE and swith rom off or use xB header eg to reloc lib under OS or... wherewer you want.

 

ok. best to explain on the example.

 

 

===

this can be useful

func:
xBIOS_RENAME                    equ xBIOS+$03
xBIOS_LOAD_FILE                 equ xBIOS+$06
xBIOS_OPEN_FILE                 equ xBIOS+$09
xBIOS_LOAD_DATA                 equ xBIOS+$0c
xBIOS_WRITE_DATA                equ xBIOS+$0f
xBIOS_OPEN_CURRENT_DIR          equ xBIOS+$12
xBIOS_GET_BYTE                  equ xBIOS+$15
xBIOS_PUT_BYTE                  equ xBIOS+$18
xBIOS_FLUSH_BUFFER              equ xBIOS+$1b
xBIOS_SET_LENGTH                equ xBIOS+$1e
xBIOS_SET_INIAD                 equ xBIOS+$21
xBIOS_SET_FILE_OFFSET           equ xBIOS+$24
xBIOS_SET_RUNAD                 equ xBIOS+$27
xBIOS_SET_DEFAULT_DEVICE        equ xBIOS+$2A
xBIOS_CHANGE_DIR                equ xBIOS+$2D
xBIOS_LOAD_BINARY_FILE          equ xBIOS+$30
xBIOS_OPEN_DEFAULT_DIR          equ xBIOS+$33
xBIOS_SET_DEVICE                equ xBIOS+$36
xBIOS_RELOCATE_BUFFER           equ xBIOS+$39
xBIOS_LIST_DIR                  equ xBIOS+$3c
xBIOS_OPEN_DEFAULT_FILE         equ xBIOS+$3f
xBIOS_READ_SECTOR               equ xBIOS+$42
xBIOS_FIND                      equ xBIOS+$45

xBIOS_WRITE_SECTOR              equ xBIOS_FLUSH_BUFFER

after header by defult:

.byte	c'XAUTORUN   '  ; autorun filename
.byte   >$0800          ; lib adr
.byte   >$0700          ; buffer adr
.word   INITAD          ; INITAD
.word   RUNAD           ; RUNAD
.word   AOSV            ; I/O module
.word   AOSV_RELOC      ; reloc proc for I/O module
.byte   $ff             ; portb
.byte   $40             ; nmien
.byte   $c0             ; irqen
.word   xSIOV           ; xSIOV
.byte   { RTS }         ; dummy e.g. reloc for xSIOV

but you can change it e.g:

.byte	c'MYFILE     '  ; autorun filename
.byte   >$D800          ; lib adr
.byte   >$0000          ; buffer adr
.word   $0100           ; INITAD
.word   $FFFC           ; RUNAD
.word   xSIOV           ; I/O module
.word   DUMMY_RTS       ; reloc proc for I/O module
.byte   $fe             ; portb ROM OFF
.byte   $00             ; nmien
.byte   $00             ; irqen
.word   xSIOV           ; xSIOV
.byte   { RTS }         ; dummy e.g. reloc for xSIOV

means xBIOS base is $D800

vars
xIRQEN equ xBIOS+$3e8
xAUDCTL equ xBIOS+$3e9
xFILE equ xBIOS+$3ea
xDIR equ xBIOS+$3ec
xIOV equ xBIOS+$3ee
xSPEED equ xBIOS+$3f0
xHSPEED equ xBIOS+$3f1
xBUFFERH equ xBIOS+$3f2
xBUFFERO equ xBIOS+$3f3
xSEGMENT equ xBIOS+$3f4
xNOTE equ xBIOS+$3f6

test.atr

Edited by xxl
  • Like 2
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...