funkheld Posted August 6, 2015 Share Posted August 6, 2015 (edited) Hello, good day. Here is the PM-Collison with Picture. atari.hea: ........... iocb = $340 ; IOCB iocom = iocb+2 ; Komenda dla IOCB ioadr = iocb+4 ; (2) Adres bufora dla IOCB iolen = iocb+8 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>!!!!!! new ioaux1 = iocb+10 ; Bajt pomocniczy 1 IOCB ioaux2 = iocb+11 ; Bajt pomocniczy 2 IOCB ....... greeting const _max = 7; _speed = 200; var dlist: array [0..52] of word; p0Data : array [0.._max] of byte; px0 : byte; py0 : byte; pmgMem : Word; i : Byte; name: string; scr,lenght,namew:word; procedure InitDlist(a: word); begin dlist[0]:=$7070; dlist[1]:=$4d70; dlist[2]:=$9060; dlist[3]:=$0d0d; dlist[4]:=$0d0d; dlist[5]:=$0d0d; dlist[6]:=$0d0d;dlist[7]:=$0d0d; dlist[8]:=$0d0d; dlist[9]:=$0d0d; dlist[10]:=$0d0d; dlist[11]:=$0d0d;dlist[12]:=$0d0d; dlist[13]:=$0d0d; dlist[14]:=$0d0d; dlist[15]:=$0d0d; dlist[16]:=$0d0d;dlist[17]:=$0d0d; dlist[18]:=$0d0d; dlist[19]:=$0d0d; dlist[20]:=$0d0d; dlist[21]:=$0d0d;dlist[22]:=$0d0d; dlist[23]:=$0d0d; dlist[24]:=$0d0d; dlist[25]:=$0d0d; dlist[26]:=$0d0d;dlist[27]:=$0d0d; dlist[28]:=$0d0d; dlist[29]:=$0d0d; dlist[30]:=$0d0d; dlist[31]:=$0d0d;dlist[32]:=$0d0d; dlist[33]:=$0d0d; dlist[34]:=$0d0d; dlist[35]:=$0d0d; dlist[36]:=$0d0d;dlist[37]:=$0d0d; dlist[38]:=$0d0d; dlist[39]:=$0d0d; dlist[40]:=$0d0d; dlist[41]:=$0d0d;dlist[42]:=$0d0d; dlist[43]:=$0d0d; dlist[44]:=$0d0d; dlist[45]:=$0d0d; dlist[46]:=$0d0d;dlist[47]:=$0d0d; dlist[48]:=$0d0d; dlist[49]:=$0d0d; dlist[50]:=$0d41; dlist[51]:=a; end; procedure fileget(namew,scr,lenght:word); begin asm { stx @sp ldx #$10 lda #12 sta iocom,x jsr ciov ldx #$10 lda #3 sta iocom,x mwa namew ioadr,x lda #4 sta ioaux1,x jsr ciov ldx #$10 lda #7 sta iocom,x mwa scr ioadr,x mwa lenght iolen,x jsr ciov ldx #$10 lda #12 sta iocom,x jsr ciov ldx @sp rts }; end; begin InitDlist(word(@dlist)); InitGraph(7); DPoke(560,word(@dlist)); DPoke($58,36960); name:='D:MULBI.BIN'; namew:=word(@name); scr:=$9060; lenght:=$f00; fileget(namew,scr,lenght); // Initialize P/M graphics Poke(53277, 3); Poke(54279, 168); pmgMem := 168 * 256; Poke(559, 46); px0 := 40; py0 := 40; p0Data[0] := $ff; p0Data[1] := $81; p0Data[2] := $81; p0Data[3] := $81; p0Data[4] := $81; p0Data[5] := $81; p0Data[6] := $81; p0Data[7] := $ff; // Clear player 0 memory fillchar(pointer(pmgMem+512), 128, 0); // Vertical position of player 0 for i := 0 to _max do begin Poke(pmgMem+512+py0+i, p0Data[i]); end; Poke(53277,3); // Turn on P/M graphics Poke(53256,2); // Size of player 0 (normal size) Poke(704,44); // Player 0 color Poke(53248,px0); // Horizontal position of player 0 repeat // Move player 0 left if Peek(632)=11 then begin Dec(px0); if px0 < 45 then px0 := 45; Poke(53248,px0); Delay(_speed); // Move player 0 right end else if Peek(632)=7 then begin Inc(px0); if px0 > 203 then px0 := 203; Poke(53248,px0); Delay(_speed); // Move player 0 up end else if Peek(632)=14 then begin Dec(py0); if py0 < 16 then py0 := 16; Poke(pmgMem+512+py0-1, 0); Poke(pmgMem+512+py0+_max+1, 0); for i := 0 to _max do begin Poke(pmgMem+512+py0+i, p0Data[i]); end; Delay(_speed-; // Move player 0 down end else if Peek(632)=13 then begin Inc(py0); if py0 > 97+8 then py0 := 97+8; Poke(pmgMem+512+py0-1, 0); Poke(pmgMem+512+py0+_max+1, 0); for i := 0 to _max do begin Poke(pmgMem+512+py0+i, p0Data[i]); end; Delay(_speed-; end; if peek($D004) > 0 then begin Poke($D01E,1); fillchar(pointer(pmgMem+512), 128, 0); px0 := 40; py0 := 40; for i := 0 to _max do begin Poke(pmgMem+512+py0+i, p0Data[i]); end; Poke(53248,px0); end; until keypressed; InitGraph(0); Poke(53277, 0); end. alles.atr Edited August 6, 2015 by funkheld Quote Link to comment Share on other sites More sharing options...
Gury Posted August 6, 2015 Share Posted August 6, 2015 Hi funkheld, nice example. A simple "Don't touch" game example You can change: for i := 0 to _max do begin Poke(pmgMem+512+py0+i, p0Data[i]); end; to Move(@p0Data, pointer(pmgMem+512+py0), _max+1) It's more efficient and faster! Greetings Quote Link to comment Share on other sites More sharing options...
tebe Posted August 6, 2015 Share Posted August 6, 2015 (edited) for i := 0 to _max do begin Poke(pmgMem+512+py0+i, p0Data[i]); end; equivalent (without BEGIN) for i := 0 to _max do Poke(pmgMem+512+py0+i, p0Data[i]); p.s. yes, MOVE is faster then FOR TO DO Edited August 6, 2015 by tebe Quote Link to comment Share on other sites More sharing options...
funkheld Posted August 6, 2015 Author Share Posted August 6, 2015 (edited) Hello. here is the new PM with : Move(@p0Data, pointer(pmgMem+512+py0), _max+1); and open(namew) >>>>> Kanal 1 bget(scr,lenght) close >>>>> Kanal 1 greeting const _max = 7; _speed = 200; var dlist: array [0..52] of word; p0Data : array [0.._max] of byte; px0 : byte; py0 : byte; pmgMem : Word; i : Byte; name: string; scr,lenght,namew:word; procedure InitDlist(a: word); begin dlist[0]:=$7070; dlist[1]:=$4d70; dlist[2]:=$9060; dlist[3]:=$0d0d; dlist[4]:=$0d0d; dlist[5]:=$0d0d; dlist[6]:=$0d0d;dlist[7]:=$0d0d; dlist[8]:=$0d0d; dlist[9]:=$0d0d; dlist[10]:=$0d0d; dlist[11]:=$0d0d;dlist[12]:=$0d0d; dlist[13]:=$0d0d; dlist[14]:=$0d0d; dlist[15]:=$0d0d; dlist[16]:=$0d0d;dlist[17]:=$0d0d; dlist[18]:=$0d0d; dlist[19]:=$0d0d; dlist[20]:=$0d0d; dlist[21]:=$0d0d;dlist[22]:=$0d0d; dlist[23]:=$0d0d; dlist[24]:=$0d0d; dlist[25]:=$0d0d; dlist[26]:=$0d0d;dlist[27]:=$0d0d; dlist[28]:=$0d0d; dlist[29]:=$0d0d; dlist[30]:=$0d0d; dlist[31]:=$0d0d;dlist[32]:=$0d0d; dlist[33]:=$0d0d; dlist[34]:=$0d0d; dlist[35]:=$0d0d; dlist[36]:=$0d0d;dlist[37]:=$0d0d; dlist[38]:=$0d0d; dlist[39]:=$0d0d; dlist[40]:=$0d0d; dlist[41]:=$0d0d;dlist[42]:=$0d0d; dlist[43]:=$0d0d; dlist[44]:=$0d0d; dlist[45]:=$0d0d; dlist[46]:=$0d0d;dlist[47]:=$0d0d; dlist[48]:=$0d0d; dlist[49]:=$0d0d; dlist[50]:=$0d41; dlist[51]:=a; end; procedure close; begin asm { stx @sp ldx #$10 lda #12 sta iocom,x jsr ciov ldx @sp rts }; end; procedure open(namew:word); begin asm { stx @sp ldx #$10 lda #3 sta iocom,x mwa namew ioadr,x lda #4 sta ioaux1,x jsr ciov ldx @sp rts }; end; procedure bget(scr,lenght:word); begin asm { stx @sp ldx #$10 lda #7 sta iocom,x mwa scr ioadr,x mwa lenght iolen,x jsr ciov ldx @sp rts }; end; begin InitDlist(word(@dlist)); InitGraph(7); DPoke(560,word(@dlist)); DPoke($58,36960); name:='D:MULBI.BIN'; namew:=word(@name); scr:=$9060; lenght:=$f00; open(namew); bget(scr,lenght); close; // Initialize P/M graphics Poke(53277, 3); Poke(54279, 168); pmgMem := 168 * 256; Poke(559, 46); px0 := 40; py0 := 40; p0Data[0] := $ff; p0Data[1] := $81; p0Data[2] := $81; p0Data[3] := $81; p0Data[4] := $81; p0Data[5] := $81; p0Data[6] := $81; p0Data[7] := $ff; // Clear player 0 memory fillchar(pointer(pmgMem+512), 128, 0); // Vertical position of player 0 for i := 0 to _max do begin Poke(pmgMem+512+py0+i, p0Data[i]); end; Poke(53277,3); // Turn on P/M graphics Poke(53256,2); // Size of player 0 (normal size) Poke(704,44); // Player 0 color Poke(53248,px0); // Horizontal position of player 0 repeat // Move player 0 left if Peek(632)=11 then begin Dec(px0); if px0 < 45 then px0 := 45; Poke(53248,px0); Delay(_speed); // Move player 0 right end else if Peek(632)=7 then begin Inc(px0); if px0 > 203 then px0 := 203; Poke(53248,px0); Delay(_speed); // Move player 0 up end else if Peek(632)=14 then begin Dec(py0); if py0 < 16 then py0 := 16; Poke(pmgMem+512+py0-1, 0); Poke(pmgMem+512+py0+_max+1, 0); Move(@p0Data, pointer(pmgMem+512+py0), _max+1); Delay(_speed- ; // Move player 0 down end else if Peek(632)=13 then begin Inc(py0); if py0 > 97+8 then py0 := 97+8; Poke(pmgMem+512+py0-1, 0); Poke(pmgMem+512+py0+_max+1, 0); Move(@p0Data, pointer(pmgMem+512+py0), _max+1); Delay(_speed- ; end; if peek($D004) > 0 then begin Poke($D01E,1); fillchar(pointer(pmgMem+512), 128, 0); px0 := 40; py0 := 40; Move(@p0Data, pointer(pmgMem+512+py0), _max+1); Poke(53248,px0); end; until keypressed; InitGraph(0); Poke(53277, 0); end. Edited August 6, 2015 by funkheld Quote Link to comment Share on other sites More sharing options...
funkheld Posted August 6, 2015 Author Share Posted August 6, 2015 how can you : bput (scr, lenght); ? with MAD Pascal: ASM It need only a new file will be created ? How does it work ? Open (.....) BPUT (scr, lenght) close greeting Quote Link to comment Share on other sites More sharing options...
JamesD Posted August 6, 2015 Share Posted August 6, 2015 how can you : bput (scr, lenght); ? with MAD Pascal: ASM It need only a new file will be created ? How does it work ? Open (.....) BPUT (scr, lenght) close greeting Are you saying you want to create a new file and haven't been able to or that you have only been able to create a new file rather than writing to an existing one? Quote Link to comment Share on other sites More sharing options...
funkheld Posted August 6, 2015 Author Share Posted August 6, 2015 Hello. Create a new "MULBI1.BIN" and with bput graphic-byte-data from the screen $9060 write to $f00 byte it. BPUT ($9060, $f00) thanks greeting Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.