Mad Pascal

Nie ma róży bez kolców... Miejsce na dyskusję o najmłodszym bracie C64
Wiadomość
Autor
zbyti
Posty: 191
Rejestracja: 12 sty 2021, 14:26

Mad Pascal - TEDzakker

#61 Post autor: zbyti »

W sumie to jak chcemy odegrać muzykę to wystarczy tylko taki kod:

Kod: Zaznacz cały

{$r msx.rc}

// TEDzakker demo music

const
  MUSIC = $4000;

begin
  asm { phr \ lda #0 \ jsr MUSIC \ plr };

  repeat
    pause;
    asm { phr \ jsr MUSIC+3 \ plr };
  until false;
end.
bo pause czeka na zmianę jednego z liczników, który zmienia się podczas przerwania "vbi".

Awatar użytkownika
carrion
Posty: 2329
Rejestracja: 27 lut 2009, 17:38
Kontakt:

Re: Mad Pascal

#62 Post autor: carrion »

zbyti pisze:
17 mar 2021, 18:40
Ale muzyka nie jest moja, to jeden z 3-4 przykładów dołączonych do trackera ;)
a widzisz... nie wiedziałem.
tak czy siak projekt nadal uważam za fajny i czekam na efekt końcowy z Twoją muzyką.
c64portal.pl, retronavigator.com

zbyti
Posty: 191
Rejestracja: 12 sty 2021, 14:26

Re: Mad Pascal

#63 Post autor: zbyti »

Atarowcy użyli sztucznej inteligecji by logo Tron +4 poszło na ich sprzęcie, całkiem całkiem, ale coś przy krawędzi się sieć neuronowa pogubiła ;)
Screenshot_2021-03-18_23-37-42.png
Screenshot_2021-03-18_23-37-42.png (93.36 KiB) Przejrzano 2080 razy
Stephen_Tron+4.xex.zip
(8.19 KiB) Pobrany 67 razy

Awatar użytkownika
carrion
Posty: 2329
Rejestracja: 27 lut 2009, 17:38
Kontakt:

Re: Mad Pascal

#64 Post autor: carrion »

ble :P

jak by ładnie poprosili to by dostali to samo w g2f :)
c64portal.pl, retronavigator.com

zbyti
Posty: 191
Rejestracja: 12 sty 2021, 14:26

Mad Pascal - Plasma

#65 Post autor: zbyti »

msx.rc

Kod: Zaznacz cały

MUSIC rcdata 'demo.tzp.prg' 2
plasma.pas

Kod: Zaznacz cały

// 06_plasma.ras, Turbo Rascal example
// TEDzakker demo music

{$r msx.rc}

uses fastmath;

//-----------------------------------------------------------------------------

const
  COLOURRAM_ADDR = $0800; SCREEN_ADDR = $0c00;
  SCR_W = 40; SCR_H = 25;

  MUSIC = $4000;

  DATA_CHAR: array [0..127] of byte = (
    $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $10, $00, $00, $00, $00,
    $00, $00, $18, $18, $00, $00, $00, $00,
    $00, $00, $38, $38, $38, $00, $00, $00,
    $00, $00, $3c, $3c, $3c, $3c, $00, $00,
    $00, $7c, $7c, $7c, $7c, $7c, $00, $00,
    $00, $7e, $7e, $7e, $7e, $7e, $7e, $00,
    $fe, $fe, $fe, $fe, $fe, $fe, $fe, $00,
    $00, $7f, $7f, $7f, $7f, $7f, $7f, $7f,
    $00, $7e, $7e, $7e, $7e, $7e, $7e, $00,
    $00, $7c, $7c, $7c, $7c, $7c, $00, $00,
    $00, $00, $3c, $3c, $3c, $3c, $00, $00,
    $00, $00, $38, $38, $38, $00, $00, $00,
    $00, $00, $18, $18, $00, $00, $00, $00,
    $00, $00, $00, $08, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00
  );

//-----------------------------------------------------------------------------

var
  DETIRQSRC         : byte absolute $ff09;  //detect IRQ source, and clear IRQ flag
  SETIRQSRC         : byte absolute $ff0a;  //set IRQ source
  RC                : byte absolute $ff0b;  //raser counter bits 0-7
  RAMROMSEL         : byte absolute $ff12;
  CHBAS             : byte absolute $ff13;
  BACKGROUND        : byte absolute $ff15;
  BORDER            : byte absolute $ff19;
  VCOUNT            : byte absolute $ff1d;  //vertical line bits 0-7
  IRQVEC            : word absolute $fffe;

//-----------------------------------------------------------------------------

var
  c1A               : byte = 1;
  c1B               : byte = 5;

  scrn              : PByte absolute $60;

  charset           : array [0..0]   of byte absolute $3000;
  sinusTable        : array [0..255] of byte absolute $3100;
  lookupDiv16       : array [0..255] of byte absolute $3200;
  xbuf              : array [0..39]  of byte absolute $3300;

//-----------------------------------------------------------------------------

procedure InitDivision16;
var x: byte;
begin
  for x:=0 to 255 do lookupDiv16[x] := x shr 4; // Simply store values divided by 16
end;


procedure InitCharset;
begin
  Move(DATA_CHAR, charset, SizeOf(DATA_CHAR));

  // set bit 2
  RAMROMSEL := RAMROMSEL and %11111011;

  // 12 = $3000 / $400 on 2-7 bits
  CHBAS := (CHBAS and %11) or 12 shl 2;
end;

//-----------------------------------------------------------------------------

procedure doPlasma;
var
  _c1a, _c1b : byte;
  i, ii, tmp : byte;
begin
  scrn := pointer(SCREEN_ADDR);
  _c1a := c1A; _c1b := c1B;

  for i := (SCR_W - 1) downto 0 do begin
    xbuf[i] := sinusTable[_c1a] + sinusTable[_c1b];
    Inc(_c1a, 3); Inc(_c1b, 7);
  end;

  for ii := (SCR_H - 1) downto 0 do begin

    tmp := sinusTable[_c1a] + sinusTable[_c1b];
    Inc(_c1a, 4); Inc(_c1b, 9);

    for i := (SCR_W - 1) downto 0 do
      scrn[i] := lookupDiv16[xbuf[i] + tmp];

    Inc(scrn, 40);
  end;

  Inc(c1A, 3); Dec(c1B, 5);
end;

//-----------------------------------------------------------------------------

procedure vbi; assembler; interrupt;
asm {
        phr
        mva #2 DETIRQSRC

        inc c4p_time+2
        bne off
        inc c4p_time+1
        bne off
        inc c4p_time
  off:

        jsr MUSIC+3;
        plr
};
end;

//-----------------------------------------------------------------------------

begin
  asm {
    sei \ sta $ff3f
    txa:pha \ lda #0 \ jsr MUSIC \ pla:tax
  };

  RC := $d8; SETIRQSRC := 2; DETIRQSRC := 2;
  IRQVEC := word(@vbi);

  FillSinHigh(sinusTable); InitDivision16; InitCharset;

  asm { cli };

  repeat
    Pause; doPlasma;
  until false;

end.

https://www.youtube.com/watch?v=Yg10zHR--14

zbyti
Posty: 191
Rejestracja: 12 sty 2021, 14:26

Mad Pascal - HiRes

#66 Post autor: zbyti »

Grafika spakowana za pomocą apultra, z 10Kb zrobił się 1KB :] Logo wykonał http://bocianu.atari.pl/.

hgfx_apl.rc

Kod: Zaznacz cały

APLBIN rcdata 'mp.apl'
hires_apl.pas

Kod: Zaznacz cały

//Mad Pascal logo by @bocianu
{$r hgfx_apl.rc}

uses aplib;

const
  APLBIN = $3000;
  LOGO   = $5800;

var
  SETBITMAP                          : byte absolute $ff06;
  SETMCOLOR                          : byte absolute $ff07;
  BITMAPADDR                         : byte absolute $ff12;
  VIDEOMATRIX                        : byte absolute $ff14;
  BORDER                             : byte absolute $ff19;

begin

  unapl(pointer(APLBIN), pointer(LOGO));

  SETBITMAP := SETBITMAP or $20;
  SETMCOLOR := (SETMCOLOR and $40) or $8;

  // (01011xxx) $5800 = 11 * $800;
  VIDEOMATRIX := %01011000;
  // (xx011xxx) $6000 = 3 * $2000; bit 2 set to 0 means reading from RAM
  BITMAPADDR := %00011000 or (BITMAPADDR and %00000011);

  BORDER := $3d;

  repeat until false;
end.
Screenshot_2021-03-20_11-05-49.png
Screenshot_2021-03-20_11-05-49.png (21.68 KiB) Przejrzano 2027 razy

Awatar użytkownika
carrion
Posty: 2329
Rejestracja: 27 lut 2009, 17:38
Kontakt:

Re: Mad Pascal

#67 Post autor: carrion »

a jest już wersja gry z moją grafiką? dodałbym to jakoś do artykułu?
c64portal.pl, retronavigator.com

zbyti
Posty: 191
Rejestracja: 12 sty 2021, 14:26

Re: Mad Pascal - Tron 4

#68 Post autor: zbyti »

Nie, skoro mam zrobić własną muzę to jeszcze tydzień, muszę się obsługi TEDzakkera nauczyć i coś na nim wymodzić. Dam znać tutaj za kilka dni.

zbyti
Posty: 191
Rejestracja: 12 sty 2021, 14:26

Re: Mad Pascal

#69 Post autor: zbyti »

Jest spora szansa, że muza będzie od Csabo ;) ja się z muzykowaniem na TED nie będę aż tak spieszył :]

Awatar użytkownika
carrion
Posty: 2329
Rejestracja: 27 lut 2009, 17:38
Kontakt:

Re: Mad Pascal

#70 Post autor: carrion »

super news... :lol:
tzn nie że ty odpuszcza muzykowanie tylko że będzie od csabo :)

na Twoją muzę czekam tak czy siak, ale fajnie że pierwszy projekt ma takie wsparcie społeczności.
c64portal.pl, retronavigator.com

zbyti
Posty: 191
Rejestracja: 12 sty 2021, 14:26

Mad Pascal - TED i te inne dźwięki

#71 Post autor: zbyti »

@Carrion nie, nie odpuszczam muzykowania na C16 ale Csabo jest bardzo dobry na tej platformie i muzę pewnie dostanę dziś, więc dzięki temu to wszystko szybciej zepnę niż bym to robił sam. Będę mógł szybciej zająć się czymś innym.

Na dowód, że próbuję zrozumieć jak brzęczy TED poniżej mój najnowszy kod, powstał na bazie mojej ulubionej książki do ogarniania C+4:

Kod: Zaznacz cały

//-----------------------------------------------------------------------------
// Commodore Plus/4, C16 or 264 TED sound frequency tables PAL
// https://www.dtech.lv/techarticles_plus4_freq.html
//-----------------------------------------------------------------------------
const
  a0   =   7; a1   = 516; a2   = 770; a3   = 897; a4   = 960; a5   = 992;
  a0is =  64; a1is = 544; a2is = 784; a3is = 904; a4is = 964; a5is = 994;
  b0   = 118; b1   = 571; b2   = 798; b3   = 911; b4   = 967; b5   = 996;
  c1   = 169; c2   = 597; c3   = 810; c4   = 917; c5   = 971; c6   = 997;
  c1is = 217; c2is = 621; c3is = 822; c4is = 923; c5is = 974;
  d1   = 262; d2   = 643; d3   = 834; d4   = 929; d5   = 976;
  d1is = 305; d2is = 665; d3is = 844; d4is = 934; d5is = 979;
  e1   = 345; e2   = 685; e3   = 854; e4   = 939; e5   = 982;
  f1   = 383; f2   = 704; f3   = 864; f4   = 944; f5   = 984;
  f1is = 419; f2is = 722; f3is = 873; f4is = 948; f5is = 986;
  g1   = 453; g2   = 739; g3   = 881; g4   = 953; g5   = 988;
  g1is = 485; g2is = 755; g3is = 889; g4is = 957; g5is = 990;

//-----------------------------------------------------------------------------
// Zielony mosteczek
//-----------------------------------------------------------------------------
const
  music_notes: array [0..39] of word = (
    c3,c3,c3,c3,e3,g3,f3,e3,d3,c3,
    g3,g3,g3,e3,g3,c4,a3,g3,f3,e3,
    d3,d3,d3,d3,f3,a3,g3,f3,e3,d3,
    c3,c3,c3,c3,e3,g3,f3,e3,d3,c3

  );
  music_duration: array [0..39] of byte = (
    2,2,4,2,2,4,2,2,4,8,
    2,2,4,2,2,4,3,1,2,2,
    2,2,4,2,2,4,3,1,2,2,
    2,2,4,2,2,4,2,2,4,4
  );

//-----------------------------------------------------------------------------

const
  TEMPO = 3;

//-----------------------------------------------------------------------------

{*
$FF0E 0-7 Low byte of frequency for voice 1

$FF0F 0-7 Low byte of frequency for voice 2

$FF10 0-1 High 2 bits of frequency for voice 2

$FF11 0-3 Volume
        4 Select voice 1 (0 = off, 1 = on)
        5 Select voice 2 (0 = off, 1 = on)
        6 Select noise for voice 2 (0 = off, 1 = on)
        7 Sound switch (0 = on, 1 = off)
$FF12 0-1 High 2 bits of frequency for voice 1
      2-7 Nonsound uses
*}
var
  TED_FF0E : byte absolute $FF0E;
  TED_FF11 : byte absolute $FF11;
  TED_FF12 : byte absolute $FF12;

//-----------------------------------------------------------------------------

var
  note      : word;
  duration  : byte;
  i, ii     : byte;

//-----------------------------------------------------------------------------

begin
  //Select voice 1 with maximum volume
  TED_FF11 := $9f;

  for i := 0 to SizeOf(music_duration)-1 do begin
    duration := music_duration[i];
    note := music_notes[i];

    TED_FF0E := Lo(note);
    TED_FF12 := (TED_FF12 and $fc) or Hi(note);

    //Turn on sound
    TED_FF11 := TED_FF11 and $7f;

    for ii := (duration shl TEMPO) downto 1 do pause;

    //Turn off sound
    TED_FF11 := TED_FF11 or $80;

    pause;
  end;

end.
zielony_mosteczek.zip
(376 Bajtów) Pobrany 60 razy

zbyti
Posty: 191
Rejestracja: 12 sty 2021, 14:26

Re: Mad Pascal - Tron +4 FINAL!

#72 Post autor: zbyti »

Title gfx by Carrion
Mad Pascal logo by Bocianu
Music by Csabo
Mad Pascal by TeBe
Game code by zbyti
tron_plus_4.prg.zip
(8.4 KiB) Pobrany 66 razy

Awatar użytkownika
carrion
Posty: 2329
Rejestracja: 27 lut 2009, 17:38
Kontakt:

Re: Mad Pascal

#73 Post autor: carrion »

MEGA Dobra Produkcja!
Gratulacje!

I jestem podwójnie happy że to udało się zrobić tutaj na forum i w okolicach portalu jako "takie grupowe przedsięwzięcie".
Wielkie dzięki też dla Tebe i Bocianu ze sceny Atari. To jest ten rodzaj współpracy między-platformowej, o który zawsze będę walczył! Dzięki

Oczywiście wielkie dzięki dla Csabo! Super udźwiękowienie!
c64portal.pl, retronavigator.com

zbyti
Posty: 191
Rejestracja: 12 sty 2021, 14:26

Re: Mad Pascal

#74 Post autor: zbyti »

@Carrion dzięki, mała prosta gierka ale chwilę zabawy może dać :]

Też jestem bardzo zadowolony ze współpracy, otrzymałem grafikę i muzykę na najwyższym poziomie (co podniosło wartość rilisa), nawet nie musiałem o te rzeczy prosić ;) jedyne co musiałem to nauczyć się jak dostarczoną grafikę/muzykę użyć :]

Tak to ja się mogę w retro bawić - gdy spotyka się entuzjastów, którzy potrafią poprzeć projekt zarówno słowem jak i czynem :D

Mam nadzieję, że następna produkcja będzie krokiem naprzód pod względem kodu jak i dostarczanej rozrywki :]

ODPOWIEDZ