CPCWiki forum

General Category => Amstrad CPC hardware => Topic started by: Porchy on 21:34, 03 December 13

Title: Amstrad 6128 HAL/PAL16L8 chip
Post by: Porchy on 21:34, 03 December 13
Following on from my intro thread im now pleased to announce that my HAL16L8 chip recreation is ready for release.
The file is ready to be programmed to a GAL16V8 device and is a drop in replacement with no mods being required.

I have tested this with the following:
The Addams Family
Robocop (with speech)
Pac-Man emulator
Orion Prime.
various other original titles that I got with the system.

No problems encountered at all
I have NOT tested this with any external expansions. When Bryce gets time I think he will do the testing on everything he has and report any issues.

If anyone in the UK requires one of these and cannot program it themselves then I can provide a programmed chip.
Also, the equations that ive created are in no way a secret and will gladly give them to anyone that wants them or if someone want to include it in the wiki then please do

I would like to thank the following people:
arnoldemu for his truth tables, they saved me heaps of time
Charles MacDonald for discovering that latches were being used somewhere
TotO for sending me his chip to start working with
Anyone else that may provide feedback in the future.

Enjoy
Title: Re: Amstrad 6128 HAL/PAL16L8 chip
Post by: TFM on 21:38, 03 December 13
WoW!!!!!!! That's amazing!!!!!!!!!!!!  :) :) :)
Title: Re: Amstrad 6128 HAL/PAL16L8 chip
Post by: Bryce on 21:42, 03 December 13
I can also program them for people on this side of the water if needed.

Bryce.
Title: Re: Amstrad 6128 HAL/PAL16L8 chip
Post by: TFM on 03:05, 04 December 13
You mean north of the lake Chiemsee?  ;)
Title: Re: Amstrad 6128 HAL/PAL16L8 chip
Post by: IanS on 20:21, 06 December 13
Quote from: Porchy on 21:34, 03 December 13
Also, the equations that ive created are in no way a secret and will gladly give them to anyone that wants them or if someone want to include it in the wiki then please do
Can you post the equations in here?
Title: Re: Amstrad 6128 HAL/PAL16L8 chip
Post by: Porchy on 20:29, 06 December 13
A15OUT = (!X2 & !X1 & A14
     # !X3 & !X2 & A14
     # A15);

!X1 = (!A15 & D7ANDD6 & RESET & !IOWR & D0
     # !X1 & RESET & IOWR
     # !X1 & !D7ANDD6 & RESET
     # !X1 & A15 & RESET);

!X2 = (!A15 & D7ANDD6 & RESET & !IOWR & D1
     # !X2 & RESET & IOWR
     # !X2 & !D7ANDD6 & RESET
     # !X2 & A15 & RESET);

!X3 = (!A15 & D7ANDD6 & RESET & !IOWR & D2
     # !X3 & RESET & IOWR
     # !X3 & !D7ANDD6 & RESET
     # !X3 & A15 & RESET);

!CAS1 = (X3 & !X1 & A15 & A14 & !NCAS & !RAMDIS & !CPU & CAS0
     # !X3 & !A15 & A14 & !NCAS & !RAMDIS & !CPU & CAS0
     # X3 & !X2 & X1 & !NCAS & !RAMDIS & !CPU & CAS0
     # !NCAS & CAS0 & !CAS1);

!CAS0 = (X3 & X2 & X1 & !NCAS & !RAMDIS & CAS1
     # X3 & !X1 & !A15 & !NCAS & !RAMDIS & CAS1
     # !X3 & A15 & !NCAS & !RAMDIS & CAS1
     # !X1 & !A14 & !NCAS & !RAMDIS & CAS1
     # !X3 & !A14 & !NCAS & !RAMDIS & CAS1
     # !NCAS & !RAMDIS & CPU & CAS1
     # !NCAS & !CAS0 & CAS1);

A14OUT = (A15 & A14
     # !X1 & A14
     # X3 & A14);
Title: Re: Amstrad 6128 HAL/PAL16L8 chip
Post by: Bryce on 15:46, 10 December 13
Hi Porchy,
       just wanted to confirm: I programmed a GAL16V8D-15QPN and stuck it in a spare 6128 (MC0023C). So far all fine, everything seems to work as normal. I'll leave it in for a few weeks and see if it ever causes a problem, but for now I'd say mission accomplished :) Great work.

Bryce.

The proof:

Title: Re: Amstrad 6128 HAL/PAL16L8 chip
Post by: Porchy on 18:06, 10 December 13
Thanks for testing. I was a bit nervous opening the page when I got notification in case something had gone wrong  ;)
Title: Re: Amstrad 6128 HAL/PAL16L8 chip
Post by: Bryce on 21:47, 10 December 13
Na, you're too negative. I was pretty confident that your work would be good. I have 2 or 3 other 6128 PCBs. I'll check what version they are and test them too if they are different. Then you can tick off which ones have been tested till all versions have been tried. If anybody wants one of these, then let me know (PM).

Bryce.
Title: Re: Amstrad 6128 HAL/PAL16L8 chip
Post by: Porchy on 21:58, 10 December 13
Quote from: Bryce on 21:47, 10 December 13
Na, you're too negative. I was pretty confident that your work would be good. I have 2 or 3 other 6128 PCBs. I'll check what version they are and test them too if they are different. Then you can tick off which ones have been tested till all versions have been tried. If anybody wants one of these, then let me know (PM).

Bryce.

Your right, Ive never had much faith in my own abilities until quite recently and ive got the good people of the internet to thank for that really.

Have you tested the expansion hardware with it too? Thats my main concern right now.
Title: Re: Amstrad 6128 HAL/PAL16L8 chip
Post by: Bryce on 22:24, 10 December 13
No, I only had an hour free today. But that's why I left it in the machine. I'll give it a serious testing over time, but I doubt I'll find any fault.

Bryce.
Title: Re: Amstrad 6128 HAL/PAL16L8 chip
Post by: arnoldemu on 22:32, 10 December 13
@Bryce,great avatar!
Title: Re: Amstrad 6128 HAL/PAL16L8 chip
Post by: Bryce on 22:39, 10 December 13
Quote from: arnoldemu on 22:32, 10 December 13
@Bryce,great avatar!

I felt I needed to express my Christmas spirit[nb]I hate Christmas[/nb] :D It's also explains why I don't comment in the repaint / graphic enhancement threads :)

Bryce.
Title: Re: Amstrad 6128 HAL/PAL16L8 chip
Post by: Bryce on 13:57, 12 December 13
Last night I took a look at what it would take to convert a 464 into a true 100% 6128 compatible 128K machine using this new GAL. My idea was to make a board that would plug under the Z80, as most of the required signals are available there. Although it is possible, it would unfortunately be a very messy mod, involving track cutting to implement the A14out, A15out and CAS0. It would also need quite a few fly-leads soldered to other spots on the board for the signals that aren't available on the Z80 socket (RAMDIS, IOWR, A14out, A15out, CAS0, NCAS and /CPU).

Bryce.
Title: Re: Amstrad 6128 HAL/PAL16L8 chip
Post by: arnoldemu on 14:09, 12 December 13
I have created a page on the wiki with Porchy's JED and equations.
Title: Re: Amstrad 6128 HAL/PAL16L8 chip
Post by: Porchy on 18:36, 12 December 13
Quote from: Bryce on 13:57, 12 December 13
Last night I took a look at what it would take to convert a 464 into a true 100% 6128 compatible 128K machine using this new GAL. My idea was to make a board that would plug under the Z80, as most of the required signals are available there. Although it is possible, it would unfortunately be a very messy mod, involving track cutting to implement the A14out, A15out and CAS0. It would also need quite a few fly-leads soldered to other spots on the board for the signals that aren't available on the Z80 socket (RAMDIS, IOWR, A14out, A15out, CAS0, NCAS and /CPU).

Bryce.


I just got my hands on a 464 yesterday and came to a similar conclusion. Shame but may mock something up to determine how messy a mod would be.
Title: Re: Amstrad 6128 HAL/PAL16L8 chip
Post by: TotO on 18:36, 12 December 13
Quote from: Bryce on 13:57, 12 December 13it would unfortunately be a very messy mod, involving track cutting to implement the A14out, A15out and CAS0. It would also need quite a few fly-leads soldered to other spots on the board for the signals that aren't available on the Z80 socket (RAMDIS, IOWR, A14out, A15out, CAS0, NCAS and /CPU).
It's why, it's not really a good idea. Better to find a 6128 and keep the 464 save of hack.
Title: Re: Amstrad 6128 HAL/PAL16L8 chip
Post by: gerald on 20:10, 03 October 15
Thread resurrection !

I've had a look at the issue using the GAL in the following thread : New yerar, new CPC board (http://www.cpcwiki.eu/forum/amstrad-cpc-hardware/new-yerar-new-cpc-board/msg106955/#msg106955)
The problem also happen on a regular CPC6128 using the GAL instead of the orginal PAL and a memory extension.

The problem is caused by the handling of RAMDIS, which in the GAL version mask a part of the video fetch (hence the artefact).

I've updated the PAL wiki page (http://www.cpcwiki.eu/index.php/PAL16L8) with a fixed version which I've tested on a 6128 with and without a memory extension (XMEM and my own RAM extension).
Test where done with custom memory test (test C3/C4-C7 mode) and few game/demo (Orion prime/Phortem/Still rising/Pacman/Rtype)

For reference, the new equations are :

A14OUT     = !(  !A14
              #   !A15 & !Q0 & Q2 );

A15OUT     = !(  !A15 & !A14
              #   !A15 & !Q1
              #   !A15 & !Q0 & !Q2 );

Q0     = (  D7ANDD6 & nRESET & D0 & !A15 & !nIOWR
          #   !D7ANDD6 & nRESET & Q0
          #   nRESET & A15 & Q0
          #   nRESET & nIOWR & Q0 );

Q1     = (  D7ANDD6 & nRESET & D1 & !A15 & !nIOWR
          #   !D7ANDD6 & nRESET & Q1
          #   nRESET & A15 & Q1
          #   nRESET & nIOWR & Q1 );

Q2     = (  D7ANDD6 & nRESET & D2 & !A15 & !nIOWR
          #   !D7ANDD6 & nRESET & Q2
          #   nRESET & A15 & Q2
          #   nRESET & nIOWR & Q2 );

nCAS0     = (  nCAS
             #   RAMDIS & !nCPU & nCAS0
             #   !A15 & A14 & !nCPU & Q2 & nCAS0
             #   A15 & A14 & !nCPU & Q0 & !Q2 & nCAS0
             #   !nCPU & !Q0 & Q1 & !Q2 & nCAS0
             #   !nCAS1 );

nCAS1     = !(  !RAMDIS & !nCAS & !A15 & A14 & !nCPU & Q2 & nCAS0
             #   !RAMDIS & !nCAS & A15 & A14 & !nCPU & Q0 & !Q2 & nCAS0
             #   !RAMDIS & !nCAS & !nCPU & !Q0 & Q1 & !Q2 & nCAS0
             #   !nCAS & !A15 & A14 & Q2 & nCAS0 & !nCAS1
             #   !nCAS & A15 & A14 & Q0 & !Q2 & nCAS0 & !nCAS1
             #   !nCAS & !Q0 & Q1 & !Q2 & nCAS0 & !nCAS1 );

Title: Re: Amstrad 6128 HAL/PAL16L8 chip
Post by: Munchausen on 10:31, 04 October 15
Quote from: gerald on 20:10, 03 October 15
Thread resurrection !

I've had a look at the issue using the GAL in the following thread : New yerar, new CPC board (http://www.cpcwiki.eu/forum/amstrad-cpc-hardware/new-yerar-new-cpc-board/msg106955/#msg106955)
The problem also happen on a regular CPC6128 using the GAL instead of the orginal PAL and a memory extension.

The problem is caused by the handling of RAMDIS, which in the GAL version mask a part of the video fetch (hence the artefact).

I've updated the PAL wiki page (http://www.cpcwiki.eu/index.php/PAL16L8) with a fixed version which I've tested on a 6128 with and without a memory extension (XMEM and my own RAM extension).
Test where done with custom memory test (test C3/C4-C7 mode) and few game/demo (Orion prime/Phortem/Still rising/Pacman/Rtype)

For reference, the new equations are :

A14OUT     = !(  !A14
              #   !A15 & !Q0 & Q2 );

A15OUT     = !(  !A15 & !A14
              #   !A15 & !Q1
              #   !A15 & !Q0 & !Q2 );

Q0     = (  D7ANDD6 & nRESET & D0 & !A15 & !nIOWR
          #   !D7ANDD6 & nRESET & Q0
          #   nRESET & A15 & Q0
          #   nRESET & nIOWR & Q0 );

Q1     = (  D7ANDD6 & nRESET & D1 & !A15 & !nIOWR
          #   !D7ANDD6 & nRESET & Q1
          #   nRESET & A15 & Q1
          #   nRESET & nIOWR & Q1 );

Q2     = (  D7ANDD6 & nRESET & D2 & !A15 & !nIOWR
          #   !D7ANDD6 & nRESET & Q2
          #   nRESET & A15 & Q2
          #   nRESET & nIOWR & Q2 );

nCAS0     = (  nCAS
             #   RAMDIS & !nCPU & nCAS0
             #   !A15 & A14 & !nCPU & Q2 & nCAS0
             #   A15 & A14 & !nCPU & Q0 & !Q2 & nCAS0
             #   !nCPU & !Q0 & Q1 & !Q2 & nCAS0
             #   !nCAS1 );

nCAS1     = !(  !RAMDIS & !nCAS & !A15 & A14 & !nCPU & Q2 & nCAS0
             #   !RAMDIS & !nCAS & A15 & A14 & !nCPU & Q0 & !Q2 & nCAS0
             #   !RAMDIS & !nCAS & !nCPU & !Q0 & Q1 & !Q2 & nCAS0
             #   !nCAS & !A15 & A14 & Q2 & nCAS0 & !nCAS1
             #   !nCAS & A15 & A14 & Q0 & !Q2 & nCAS0 & !nCAS1
             #   !nCAS & !Q0 & Q1 & !Q2 & nCAS0 & !nCAS1 );


This is great, nice work Gerald! How about a CPLD version of the gate array now? Hehe
Title: Re: Amstrad 6128 HAL/PAL16L8 chip
Post by: gerald on 12:11, 04 October 15
Quote from: Munchausen on 10:31, 04 October 15
This is great, nice work Gerald! How about a CPLD version of the gate array now? Hehe
That's a bit more tricky, and I thing we may end up using obsolete part as well  ;D
Title: Re: Amstrad 6128 HAL/PAL16L8 chip
Post by: Munchausen on 15:48, 04 October 15
I actually looked at the Xilinx XC9500XL, and if you used an I2C D2A for the video signals, you have exactly the right number of IO pins. Of course, discovering this was the easy part...
Title: Re: Amstrad 6128 HAL/PAL16L8 chip
Post by: TotO on 15:57, 04 October 15
XL are 3.3V only... Better to use 5V versions if possible.
Title: Re: Amstrad 6128 HAL/PAL16L8 chip
Post by: Porchy on 16:23, 04 October 15
Quote from: gerald on 20:10, 03 October 15
Thread resurrection !

I've had a look at the issue using the GAL in the following thread : New yerar, new CPC board (http://www.cpcwiki.eu/forum/amstrad-cpc-hardware/new-yerar-new-cpc-board/msg106955/#msg106955)
The problem also happen on a regular CPC6128 using the GAL instead of the orginal PAL and a memory extension.

The problem is caused by the handling of RAMDIS, which in the GAL version mask a part of the video fetch (hence the artefact).

I've updated the PAL wiki page (http://www.cpcwiki.eu/index.php/PAL16L8) with a fixed version which I've tested on a 6128 with and without a memory extension (XMEM and my own RAM extension).
Test where done with custom memory test (test C3/C4-C7 mode) and few game/demo (Orion prime/Phortem/Still rising/Pacman/Rtype)

For reference, the new equations are :

A14OUT     = !(  !A14
              #   !A15 & !Q0 & Q2 );

A15OUT     = !(  !A15 & !A14
              #   !A15 & !Q1
              #   !A15 & !Q0 & !Q2 );

Q0     = (  D7ANDD6 & nRESET & D0 & !A15 & !nIOWR
          #   !D7ANDD6 & nRESET & Q0
          #   nRESET & A15 & Q0
          #   nRESET & nIOWR & Q0 );

Q1     = (  D7ANDD6 & nRESET & D1 & !A15 & !nIOWR
          #   !D7ANDD6 & nRESET & Q1
          #   nRESET & A15 & Q1
          #   nRESET & nIOWR & Q1 );

Q2     = (  D7ANDD6 & nRESET & D2 & !A15 & !nIOWR
          #   !D7ANDD6 & nRESET & Q2
          #   nRESET & A15 & Q2
          #   nRESET & nIOWR & Q2 );

nCAS0     = (  nCAS
             #   RAMDIS & !nCPU & nCAS0
             #   !A15 & A14 & !nCPU & Q2 & nCAS0
             #   A15 & A14 & !nCPU & Q0 & !Q2 & nCAS0
             #   !nCPU & !Q0 & Q1 & !Q2 & nCAS0
             #   !nCAS1 );

nCAS1     = !(  !RAMDIS & !nCAS & !A15 & A14 & !nCPU & Q2 & nCAS0
             #   !RAMDIS & !nCAS & A15 & A14 & !nCPU & Q0 & !Q2 & nCAS0
             #   !RAMDIS & !nCAS & !nCPU & !Q0 & Q1 & !Q2 & nCAS0
             #   !nCAS & !A15 & A14 & Q2 & nCAS0 & !nCAS1
             #   !nCAS & A15 & A14 & Q0 & !Q2 & nCAS0 & !nCAS1
             #   !nCAS & !Q0 & Q1 & !Q2 & nCAS0 & !nCAS1 );



Superb! Thank you
Ill update my list too
Title: Re: Amstrad 6128 HAL/PAL16L8 chip
Post by: Munchausen on 20:19, 04 October 15
Quote from: TotO on 15:57, 04 October 15
XL are 3.3V only... Better to use 5V versions if possible.

Yeah there is a 5V part. Though the 3.3V versions are 5V compatible... not sure how compatible!
Title: Re: Amstrad 6128 HAL/PAL16L8 chip
Post by: Kris on 20:59, 10 October 15
I just upgrade/update the GAL in my 6128; everything seems OK even after 2 hours watching demos :)
Nice job !
Title: Re: Amstrad 6128 HAL/PAL16L8 chip
Post by: jonnixx on 22:58, 20 November 19
Hi,
I never ever did it.
Does anyone compare these?PAL Source Code from here: http://www.cpcwiki.eu/index.php/C%27t_512_KB_internal_RAM_expansion (http://www.cpcwiki.eu/index.php/C%27t_512_KB_internal_RAM_expansion)

D7D6 D0   D3   D4   D1   D2   NCAS A15  A14  GND  ;pin 1..10
CPU  A15S AMUX MUX  LCLK CAS1 CAS0 IOWR A14S VCC  ;pin 11..20
IF (VCC) /LCLK= D7D6 * /A15 * /IOWR               ;load external latch on OUT [7Fxxh],C0h..FFh
IF (VCC) /CAS0= /NCAS * /D4  +                    ;bank bit4=0, select bank 0..15 (CPU and CRTC)            
            /CAS0= /NCAS *  A15 +            
           /CAS0= /NCAS * /A14 +            
         /CAS0= /NCAS *  CPU

IF (VCC) /CAS1= /NCAS * D4 * /A15 * A14 * /CPU    ;bank bit4=1, select bank 16..31 (CPU at 4000h..7FFFh only)

IF (VCC) /A14S= /A14             +                             ;bank bit0
/D0  * D2 * /A15 + /D0  * D3 * /A15 +
/D0  * D4 * /A15

IF (VCC) /A15S= /A14 *  /A15 +               ;bank bit1
/D1  *   /A15 +
/D4  * /D3  * /D2 * /D0 * /A15 +
/D4  * /D3  * /D2 * /D1 * /A15
IF (VCC) /AMUX= /D0  *  D1  * /D2 * /D3 * /D4 * /CPU * /MUX +
A15 *  A14 * /D2 *  D0 *       /CPU * /MUX +
A15 *  A14 * /D2 *  D1 *       /CPU * /MUX +
A15 *  A14 *        D3 *       /CPU * /MUX +
A15 *  A14 *        D4 *       /CPU * /MUX +
/A15 *  A14 *        D2 *       /CPU * /MUX +  ;bank bit2
/A15 *  A14 *        D3 *       /CPU *  MUX    ;bank bit3

IF (GND) /MUX = /MUX      ;dummy (do not output anything on this pin)
IF (GND) /IOWR=/IOWR      ;dummy (do not output anything on this pin)


and I did it:
PIN  1   =      D7D6 ;

PIN  2   =      D0   ;

PIN  3   =      D3   ;

PIN  4   =      D4   ;

PIN  5   =      D1   ;

PIN  6   =      D2   ;

PIN  7   =      NCAS ;

PIN  8   =      A15  ;

PIN  9   =      A14  ;

PIN  10  =      GND  ;

PIN  11  =      CPU  ;

PIN  12  =      A15S ;

PIN  13  =      AMUX ;

PIN  14  =      MUX  ;

PIN  15  =      LCLK ;

PIN  16  =      CAS1 ;

PIN  17  =      CAS0 ;

PIN  18  =      IOWR ;

PIN  19  =      A14S ;

PIN  20  =      VCC  ;

!LCLK = D7D6 & !A15 & !IOWR;


!CAS0 = (!NCAS & !D4)  # (!NCAS &  A15) # (!NCAS & !A14) # (!NCAS &  CPU);

!CAS1 = !NCAS & D4 & !A15 & A14 & !CPU;   

!A14S = !A14 # (!D0  & D2 & !A15) # (!D0  & D3 & !A15) # (!D0  & D4 & !A15);

!A15S = !A14 & !A15 # !D1  & !A15 # !D4  & !D3  & !D2 & !D0 & !A15 # !D4  & !D3  & !D2 & !D1 & !A15;



!AMUX = !D0  &  D1  & !D2 & !D3 & !D4 & !CPU & !MUX #
                 A15 &  A14 & !D2 &  D0 &       !CPU & !MUX #
                 A15 &  A14 & !D2 &  D1 &       !CPU & !MUX #
                 A15 &  A14 &        D3 &       !CPU & !MUX #
                 A15 &  A14 &        D4 &       !CPU & !MUX #
                !A15 &  A14 &        D2 &       !CPU & !MUX # 
                !A15 &  A14 &        D3 &       !CPU &  MUX;

!MUX = !MUX;   

!IOWR = !IOWR;

Many thanks.John
Title: Re: Amstrad 6128 HAL/PAL16L8 chip
Post by: rpalmer on 21:38, 21 November 19
Quote from: jonnixx on 22:58, 20 November 19


!A15S = !A14 & !A15 # !D1  & !A15 # !D4  & !D3  & !D2 & !D0 & !A15 # !D4  & !D3  & !D2 & !D1 & !A15;


!AMUX = !D0  &  D1  & !D2 & !D3 & !D4 & !CPU & !MUX #
                 A15 &  A14 & !D2 &  D0 &       !CPU & !MUX #
                 A15 &  A14 & !D2 &  D1 &       !CPU & !MUX #
                 A15 &  A14 &        D3 &       !CPU & !MUX #
                 A15 &  A14 &        D4 &       !CPU & !MUX #
                !A15 &  A14 &        D2 &       !CPU & !MUX # 
                !A15 &  A14 &        D3 &       !CPU &  MUX;


The equations above are incorrect as you have no brackets to isolate the ORs and ANDs to make any meaning.
The equations should be of the form:
output = (signal1 & signal2) # (!signal1 & signal3)
and not
output = signal1 & signal2 # !signal1 & signal3
The first equation represents:
if signal1 then output = signal2 else output = signal3
The second equation has both signal1 and !signal1 and so you assume left to right evaluation and is compiler dependent.

rpalmer
Title: Re: Amstrad 6128 HAL/PAL16L8 chip
Post by: jonnixx on 23:07, 21 November 19
Thank you very much.
Title: Re: Amstrad 6128 HAL/PAL16L8 chip
Post by: LambdaMikel on 16:05, 22 November 19
Quote from: rpalmer on 21:38, 21 November 19
The equations above are incorrect as you have no brackets to isolate the ORs and ANDs to make any meaning.
The equations should be of the form:
output = (signal1 & signal2) # (!signal1 & signal3)
and not
output = signal1 & signal2 # !signal1 & signal3
That's the same, due to operator precedence. See"2.2.2 Using Logical Operators" in the WinCUPL language reference
http://ww1.microchip.com/downloads/en/DeviceDoc/doc0737.pdf (http://ww1.microchip.com/downloads/en/DeviceDoc/doc0737.pdf)
So no, you do not need any brackets, and the unbracketed versions are compeltely equivalent to bracketed versions AFAIK.It does not harm to put in brackets though, for people not familiar with the operator precedence.
Powered by SMFPacks Menu Editor Mod