A BASIC Compiler and IDE for Amiga Computers

Overview

AQB: A BASIC Compiler and IDE for Amiga Computers

Screenshot

About

Command Reference

AQB Programming Language

IDE

Project Scope

An experiment in alternate history: what AmigaBASIC could have looked like, had it been developed further tailored to the Amiga OS.

What AQB is not: AQB does not try to be a clone of any particular BASIC dialect - neither QuickBASIC, FreeBASIC or VisualBASIC nor any particular Amiga specific BASIC implementation like AmigaBASIC, ACE, HiSoft, GFA, Blitz or AMOS. While it strives to be as compatible as possible with the Microsoft BASIC family of languages (and certainly has many QuickBASIC traits) the primary focus is on the creation of a modern, clean, Amiga OS-compliant, future-proof BASIC that is tailored towards modern Amiga application development.

To be more specific, FreeBASIC is the source of many core AQB language constructs (in many respects AQB can be considered a subset of FreeBASIC) with inspiration for Amiga specific commands mainly from AmigaBASIC, ACE and HiSoft. Main target is Amiga OS compliant application development.

Improvements over AmigaBASIC include:

  • Advanced type system (including UDTs and Pointers, see below)
  • Support for non-static functions and subs (enables recursion)
  • Module support (similar to UNITs in TurboPascal, with full type safety and dependencies)
  • Modern syntax inspired by FreeBASIC and VisualBASIC
  • True native 68k compiler
  • Integrated IDE besides compiler command line interface with
    • syntax highlighting
    • auto-indent
    • folding support
    • source level debugging

Requirements

  • 3 MB RAM
  • OS 2.0 (V36) or newer

Installation

Download a release LHA archive (https://github.com/gooofy/aqb/releases) and unpack it wherever you like, keep the directory structure intact.

AQB should run from this point on without the need for further installation, but for convenience add a "AQB:" assign to your S:user-startup file, e.g.

;BEGIN AQB Assign AQB: "sys:Apps/AQB" ;END AQB

Type System

Basic types:

  • Byte, UByte (8 bits)
  • Integer, UInteger (16 bits)
  • Long, ULong (32 bits)
  • Single (32 Bit FFP floats)

Advanced types

  • Static (C-like, fast) and dynamic (runtime bounds checking) arrays
  • UDTs (structs)
  • OOP (FreeBASIC like)
  • Pointers (C-like, including function/sub pointers)
  • Strings (0-terminated pointers to UByte, C-compatible)

Module System and Runtime

AQB tries to keep the set of commands that are built into the compiler to a minimum and relies on its quite powerful module system to provide most of the commands as part of the runtime system. This means that while the default runtime strives to implement a modern QuickBASIC like dialect tailored to the Amiga, it is quite possible to implement alternative runtime modules that could provide AQB with a different "personality", e.g. one that is closer to AmigaBASIC or GFA BASIC or even languages like BlitzBasic or AMOS.

The goal for AQB's default runtime is to provide a rich set of commands covering typical Amiga OS programming topics like GUI programming, multitasking, graphics and audio combined with resource tracking and error/exception handling. Future plans might also include an automated garbage collector to make memory allocation easier and safer.

AQB is fully link-compatible with the Amiga 68k GCC compiler which means that AQB modules can be implemented in C as well as BASIC (one could even mix these languages within one module, i.e. implement some subprograms in C while others in BASIC).

Intuition / Exec event handling

Since the default runtime wants to enable OS friendly programming no busy waiting is used. Therefore the SLEEP command is used to process pending events, i.e. you will need to call SLEEP regularly in your program, typically form a main loop that could look like this:

WHILE running
    SLEEP
WEND

For event processing you register subroutines using the ON ... CALL family of statements, e.g.

ON WINDOW CALL myWindowHandler

see https://github.com/gooofy/aqb/blob/master/examples/demo/gfx1.bas for a simple example of this approach.

Interesting detail: since AQB supports C-like function pointers, the ON ... CALL family of statements is not built into the compiler but part of the _aqb runtime:

PUBLIC DECLARE SUB ON WINDOW CALL (BYVAL p AS SUB)

Code Generation and Target Systems

At the time of this writing classic 68k Amiga systems is the only compiler target. The idea is to focus on one target and try to make AQB work really well on this platform before expanding to other systems. The AQB compiler is implemented from scratch in C based on Appel's 1997 book "Modern Compiler Implementation in C" and tries to keep system requirements (RAM and CPU) low while still producing somewhat sensible machine code. Originally the AQB code was based on ComMouses's tiger compiler implementation (https://github.com/ComMouse/tiger-compiler) which provided a very useful starting point.

For future expansions to other platforms the current plan is to use an LLVM based backend for all platforms powerful enough to run LLVM which is probably true for most NG Amiga systems (AROS, AmigaOS 4 and MorphOS) and most likely also for highly expanded classic Amiga systems (using accelerator cards such as PiStom or Vampire).

As for the 68k compiler future plans include further reduction of its memory footprint ideally to a point where it is useful on 1MB or even 512K Amiga systems. At that point it might even make sense to implement a 6502 backend targeting modern 8 bit systems like the MEGA65, Commander X16 or C256 Foenix.

Interrupting / break handling in AQB programs

By default, the runtime will check for break signals in i/o routines. Break signals can be sent either by pressing CTRL-C or by using the AmigaDOS BREAK command.

Additionally, the compiler will insert checks for break signals in all loop statements (to protect against endless loops) and in subprogram startup code (to protect against infinite recursion). This is enabled by default but since this will make code longer and cost some performance, it can be switched off using the

OPTION BREAK OFF

statement.

Amiga OS System Programming in AQB

AQB datatypes are very similar to C (C-like strings, structs and pointers) which makes usage of Amiga OS libraries and devices pretty seamless.

Data structures generally can be modeled 1:1 from their C counterparts, a python script semi-automating the task of converting Amiga C library and device headers to AQB is in the works. Here is a preview of what the resulting AQB declarations typically look like:

[...]

TYPE ViewPort
    AS ViewPort PTR NextViewPort
    AS ColorMap PTR ColorMap
    AS CopList PTR DspIns, SprIns, ClrIns
    AS UCopList PTR UCopIns
    AS INTEGER DWidth, DHeight, DxOffset, DyOffset
    AS UINTEGER Modes
    AS UBYTE SpritePriorities, ExtendedModes
    AS RasInfo PTR RasInfo
END TYPE

TYPE Layer_Info
    AS Layer PTR top_layer, check_lp
    AS ClipRect PTR obs, FreeClipRects
    AS LONG PrivateReserve1, PrivateReserve2
    AS SignalSemaphore Lock
    AS MinList gs_Head
    AS INTEGER PrivateReserve3
    AS VOID PTR PrivateReserve4
    AS UINTEGER Flags
    AS BYTE fatten_count, LockLayersCount
    AS INTEGER PrivateReserve5
    AS VOID PTR BlankHook, LayerInfo_extra
END TYPE

EXTERN GfxBase AS VOID PTR

DECLARE SUB Move (rp AS RastPort PTR, x AS INTEGER, y AS INTEGER) LIB -240 GfxBase (a1, d0, d1)
DECLARE SUB RectFill (rp AS RastPort PTR, xmin AS INTEGER, ymin AS INTEGER, xmax AS INTEGER, ymax AS INTEGER) LIB -306 GfxBase (a1, d0, d1, d2, d3)
DECLARE SUB Draw (rp AS RastPort PTR, x AS INTEGER, y AS INTEGER) LIB -246 GfxBase (a1, d0, d1)
DECLARE SUB SetAPen (rp AS RastPort PTR, pen AS INTEGER) LIB -342 GfxBase (a1, d0)

[...]

Keyboard shortcuts:

* F1     - this help screen
* ESC    - toggle console visibility
* S-UP   - page up
* S-DOWN - page down
* Ctrl-T - goto top of file
* Ctrl-B - goto end of file
* Ctrl-Y - delete line
* F5     - compile & run
* F7     - compile
* F9     - toggle breakpoint
* Ctrl-F - find
* Ctrl-N - find next
* Ctrl-M - mark block
* Ctrl-S - save
* Ctrl-C - quit

Benchmark Results

Measured on an A500 configuration (PAL 68000, 3MB RAM) in FS-UAE, Kickstart 1.3

Benchmark AmigaBasic GFA Basic 3.52 BlitzBasic 2.15 HiSoft Basic 2 AQB
ctHLBench integer 33.94s 7.40s 6.96s 12.41s 1.66s
ctHLBench real 23.90s 6.88s 4.99s 4.46s 3.12s
fibonacci no recursion 54.60s guru 28.18 4.09s

Source Code

https://github.com/gooofy/aqb

Comments
  • AQB 0.8. Launch issue

    AQB 0.8. Launch issue

    Hello!

    My setup:

    • Amiga 500+2MB chip ram via ACE2B+ACA500Plus(68000 CPU @ 42MHz, 8 MB fast ram, CF card as HDD)
    • AmigaOS 3.2
    • Fresh version of AQB extracted to AQB:

    What happens:

    • When I try open existing source code - all fine(I even can create new file and try make something inside it)
    • When I try just run AQB via ICON/CLI/etc - it crashes with Guru 8000 0003 error
    opened by nihirash 7
  • Build fails with linker errors

    Build fails with linker errors

    When I build aqb it fails linking the Linux binary aqb. The math library is added to the beginning of the command line, so the linker does not resolve symbols for pow and other math functions. When I add -lm to the end of the command line it works.

    Possibly this is related to the linker used with gcc on Ubuntu 20.04 LTS? I have seen the very same issue in a completely different context before (using the Qbs build system to compile some C programs).

    gcc -Wall -Werror -g -lm -o ../..//target/x86_64-linux/bin/aqb ../..//target/x86_64-linux/obj/aqb.o ../..//target/x86_64-linux/obj/scanner.o ../..//target/x86_64-linux/obj/hashmap.o ../..//target/x86_64-linux/obj/util.o ../..//target/x86_64-linux/obj/frontend.o ../..//target/x86_64-linux/obj/ide.o ../..//target/x86_64-linux/obj/options.o ../..//target/x86_64-linux/obj/errormsg.o ../..//target/x86_64-linux/obj/symbol.o ../..//target/x86_64-linux/obj/link.o ../..//target/x86_64-linux/obj/linscan.o ../..//target/x86_64-linux/obj/ui_linux.o ../..//target/x86_64-linux/obj/ui_amiga.o ../..//target/x86_64-linux/obj/run.o ../..//target/x86_64-linux/obj/temp.o ../..//target/x86_64-linux/obj/assem.o ../..//target/x86_64-linux/obj/env.o ../..//target/x86_64-linux/obj/types.o ../..//target/x86_64-linux/obj/compiler.o ../..//target/x86_64-linux/obj/logger.o ../..//target/x86_64-linux/obj/codegen.o ../..//target/x86_64-linux/obj/regalloc.o ../..//target/x86_64-linux/obj/liveness.o ../..//target/x86_64-linux/obj/color.o ../..//target/x86_64-linux/obj/flowgraph.o ../..//target/x86_64-linux/obj/table.o ../..//target/x86_64-linux/obj/tui.o
    /usr/bin/ld: ../..//target/x86_64-linux/obj/scanner.o: in function `number':
    /home/jochen/projects/amiga/aqb/src/compiler/scanner.c:250: undefined reference to `pow'
    /usr/bin/ld: ../..//target/x86_64-linux/obj/util.o: in function `U_float2str':
    /home/jochen/projects/amiga/aqb/src/compiler/util.c:471: undefined reference to `pow'
    /usr/bin/ld: /home/jochen/projects/amiga/aqb/src/compiler/util.c:487: undefined reference to `floor'
    /usr/bin/ld: /home/jochen/projects/amiga/aqb/src/compiler/util.c:502: undefined reference to `pow'
    /usr/bin/ld: /home/jochen/projects/amiga/aqb/src/compiler/util.c:508: undefined reference to `floor'
    /usr/bin/ld: /home/jochen/projects/amiga/aqb/src/compiler/util.c:536: undefined reference to `floor'
    /usr/bin/ld: ../..//target/x86_64-linux/obj/assem.o: in function `getConstInt':
    /home/jochen/projects/amiga/aqb/src/compiler/assem.c:968: undefined reference to `round'
    /usr/bin/ld: ../..//target/x86_64-linux/obj/codegen.o: in function `CG_getConstInt':
    /home/jochen/projects/amiga/aqb/src/compiler/codegen.c:494: undefined reference to `round'
    /usr/bin/ld: ../..//target/x86_64-linux/obj/codegen.o: in function `CG_transBinOp':
    /home/jochen/projects/amiga/aqb/src/compiler/codegen.c:1500: undefined reference to `round'
    /usr/bin/ld: /home/jochen/projects/amiga/aqb/src/compiler/codegen.c:1500: undefined reference to `round'
    /usr/bin/ld: /home/jochen/projects/amiga/aqb/src/compiler/codegen.c:1715: undefined reference to `pow'
    collect2: error: ld returned 1 exit status
    make[2]: *** [Makefile:31: ../..//target/x86_64-linux/bin/aqb] Fehler 1
    make[2]: Verzeichnis „/home/jochen/projects/amiga/aqb/src/compiler“ wird verlassen
    
    
    opened by gylead 6
  • READ / DATA reading wrong text

    READ / DATA reading wrong text

    I am writing a program that uses READ/DATA statements to populate several arrays with code table information, and I keep getting weird results.

    I finally wrote a simple test program and came up with a fairly consistent behavior: instead of correctly reading DATA statements, there first element in each DATA statement is replaced by the last statement of the program (usually WEND, in this case.)

    Here is an example:

    FOR I=1 TO 2
        READ A$
        PRINT A$
    NEXT
    
    DATA "HELLO", "WORLD"
    
    WHILE INKEY$=""
      SLEEP
    WEND
    

    Output is: WEND WORLD

    After playing with it more, it seems like the first item on a DATA line will be replaced with the last program statement. So programs with multiple lines of DATA statements will return WEND for the first data item per line, followed by the correct items on that line.

    DATA a,b,c,d DATA e,f,g,h

    Would return something like WEND b c d WEND f g h

    I'm currently using AQB on WinUAE with OS 3.1.4, a 68030 CPU selected, 8MB RAM, 1.5MB Slow RAM, 256MB Z3 Fast 256MB Chip RAM. I am also using the UAE Zorro III RTG module.

    I'll try different CPU and memory combinations to see if there's any difference.

    opened by tomxp411 3
  • OPTION BREAK OFF: keeps catching CTRL-C

    OPTION BREAK OFF: keeps catching CTRL-C

    I added this option at top of code, but it keeps breaking the execution when CTRL-C is pressed. It seems that this istruction is ignored.

    Thank you very much for your effort and dedication on this, AQB is a fantastic and promising project.

    opened by marcoslm 3
  • Build problem: AQB: env var not set

    Build problem: AQB: env var not set

    Sorry for reporting that many build problems. I really love the idea of this project and would like to contribute so I try to get this building on my machine.

    Here is another build problem, I do not know (yet) where this is coming from:

    cp startup.o /home/jochen/snap/fsuae/common/FS-UAE/hdd/Exchange/aqb/lib
    ../../..//target/x86_64-linux/bin/aqb -d none -s _brt.sym _brt.bas
    AQB: env var not set.
    
    make[3]: *** [Makefile:11: _brt.sym] Fehler 1
    make[3]: Verzeichnis „/home/jochen/projects/amiga/aqb/src/lib/_brt“ wird verlassen
    
    
    opened by gylead 2
  • Build fails using pushd/popd

    Build fails using pushd/popd

    Some makefiles use pushd and popd. But on Ubuntu 20.04 /bin/sh is used by the make tool which seems to be not bash but some other shell which does not know pushd/popd.

    /home/jochen/projects/amiga/amiga-build-env/bin/m68k-amigaos-ar -crs _brt.a cstartup.o astr.o amath.o autil.o dyna.o data.o dprintf.o
    pushd .. && rm -f startup.o _brt.a && ln -s _brt/startup.o && ln -s _brt/_brt.a && popd
    /bin/sh: 1: pushd: not found
    make[3]: *** [Makefile:22: _brt.a] Fehler 127
    make[3]: Verzeichnis „/home/jochen/projects/amiga/aqb/src/lib/_brt“ wird verlassen
    
    
    opened by gylead 2
  • Compiler crash with

    Compiler crash with "string" + int_var

    I discovered a way to crash the compiler with the following message:

    assertion "0" failed: file "frontend.c", line 726, function: coercion Program aborted

    Attempting to concatenate an integer type to a string will do this every time. For example: DIM n AS INTEGER PRINT "HELLO " + n

    If I use the type correct "HELLO " + STR$(n), the program seems to work as expected.

    The expected result would be either a compiler error (since you can't concatenate strings and numeric types) or an automatic widening conversion (ie: an implicit STR$(n)).

    opened by tomxp411 1
  • Don't use warning level but EXIT_FAILURE+x

    Don't use warning level but EXIT_FAILURE+x

    https://github.com/gooofy/aqb/blob/c977265787c3e3a19133b20b0e5d3de217adecc0/src/compiler/aqb.c#L105 https://github.com/gooofy/aqb/blob/2a9817fd10166f9411153c7879ddbc1b4d1fd10d/src/compiler/ide.c#L1448 https://github.com/gooofy/aqb/blob/a3efd14e457b49b12533261f1c19d350b9665324/src/compiler/util.c#L99

    opened by polluks 1
  • Specific CPU support?

    Specific CPU support?

    My concern

    Certain 68k CPUs do not have features other 68k CPUs have; for example, the 68030 does not have floating-point. While this was typically provided through a 68881 or 68882 add-in floating-point chip, this is not guaranteed.

    Thoughts on fixing

    Some indicator of how this may be handled, such as:

    • Only supporting CPUs such as the 68030 if they come with a floating-point unit.
    • Noting that software floating-point support may be required on some CPUs.
    • A setting or option that returns a compiler error on floating-point, thus allowing a program to be compiled without it.
    opened by MouseProducedGames 1
  • Specific list of supported systems?

    Specific list of supported systems?

    My concern

    The readme states that "classic 68k Amiga systems" are targeted by the compiler; however, this may still leave room for confusion. For example, while I can guess that the Amiga 500 is very likely supported, I am much less sure about, for example, the CD32, and less sure about the A4000.

    Suggestion to fix

    A markdown table listing each system, whether it is supported, and the degree of support, such as a percentile; red/yellow/green; bronze/silver/gold/full; and/or a notes and caveats column.

    How I think this will help

    • It will assist users with an overview of the current support state of a system, and how well AQB can be expected to run on that system.
    • It will assist contributors by providing an idea of where to focus their efforts.
      • A contributor who has improved an area of support, can then raise an issue or PR to have the support state of that system changed; which can notify both users and contributors of an improvement in the level of support.
    opened by MouseProducedGames 1
  • File examples/dev/foo.bas is missing

    File examples/dev/foo.bas is missing

    The Makefile in examples/dev is expecting a file foo.bas which is not found. Should this file be generated somehow or is it just missing in the repository?

    opened by gylead 1
  • Invite

    Invite

    Not really an issue... I just want to extend an invite for you to join us over on the https://gotBASIC.com discord server; I realized that I setup an AQB room (ages ago) and thought to myself this morning after watching @retronick2020 most recent video, "self, why don't you invite the author?". I also had to poke him as to why there was no mention of AQB in the video. 🤔 So if you are so inclined, would love to see you over on this discord server sharing tidbits, updates, thoughts, etc. regarding AQB.

    https://discord.gg/V9U5dMRs

    Hope to see you there!

    opened by DualBrain 1
  • accessing memory

    accessing memory

    I am trying to understand how to change the memory contents of a bitmap_t variable without using the graphic commands.

    is the bitmap_t variable something i can use with memset/peek/poke ?

    opened by RetroNick2020 2
  • Sprites not working in screen modes >15Khz

    Sprites not working in screen modes >15Khz

    I tested the "Sprite tutorials" which opens a window in Workbench screen. My Workbench runs in DBNTSC screen mode.

    SpriteDemo1 : Sprite not displayed SpriteDemo2 : Runtime error 200 at "ILBM LOAD SPRITE" SpriteDemo3 : Sprite not displayed

    This occurs in screen modes with a horizontal frequency greater than15Khz.

    opened by marcoslm 3
  • Sofware failure after closing the

    Sofware failure after closing the "Help" window

    This happens only if AutoUpdateWB is preloaded (tipically in WBStartup).

    My config

    A1200 + Blizzard 1230 MKIV + 64MB. Amiga OS 3.2.1 (the same failure confirmed with 3.2). Some OS tweaks were applied (MuMove4k (exec in fast), fblit & ftext, ReqAttack), but disabling this tweaks does not solve the problem (It also crashes starting the OS in failsafe mode). Same problem in AQB 0.8.0 as in 0.8.1.

    How to reproduce it

    • Ensure that AutoUpdateWB is running (http://aminet.net/package/util/wb/AutoUpdateWB).
    • Open the AQB editor and press F1 to open the Help guide.
    • Close Help by pressing the "Esc" key or the "close" window gadget.
    • Software failure requester appears (error #800000008).

    SnoopDos log

    Just when Help window closes

    169 [1] AmigaGuide® (amigaguide ChangeDir Work:Desarrollo/aqb
    170 aqb OpenLib intuition.library Ver 0 OK
    171 ReqAttack Open Sistema:Prefs/ReqAttac Read Fail 172 aqb OpenFont xen.font Size 8 OK
    173 aqb FindRes MorphOS Fail 174 aqb FindRes MorphOS Fail

    opened by marcoslm 0
Releases(0.8.2)
  • 0.8.2(Jan 28, 2022)

    Improvements:

    • runtime: WAVE, WAVE FREE, SOUND, SOUND WAIT, SOUND STOP, SOUND START commands added
    • runtime: WAVE() function added
    • runtime: IFF8SVX LOAD WAVE, IFF8SVX READ WAVE commands added
    • runtime: BITMAP MASK statement added
    • runtime: CLEAR statement added
    • runtime: MID$, UCASE$, LCASE$, INSTR, LEFT$, RIGHT$ functions added
    • runtime: ABS function added
    • runtime: EOF() function added
    • runtime: CLS, LOCATE, SLEEP FOR, PRINT, PRINT#, INPUT, LINE INPUT moved from _aqb to _brt
    • runtime: INPUT#, LINE INPUT#, WRITE, WRITE# statements added
    • runtime: DATE$, POINT functions added
    • compiler: support pure interface modules that have no code

    Bug Fixes:

    • ide: EZRequest on source write fails instead of a plain exit()
    • ide: ENDIF auto-indentation fixed
    • examples: tetris code cleanup, use custom fonts
    • compiler: fix float handling in DATA statements
    • compiler: fix coord/coord2 error handling
    • compiler: do not abort on type system inconsistencies (e.g. unresolved forwarded types)
    • compiler: check and resolve all forward ptrs
    • compiler: fix err msg position for constant declaration expression
    • compiler: fix string type coercion (fixes #17, thanks to Tom Wilson for reporting this one)
    • compiler: fix negative numeric literal handling in DATA statements
    • compiler: fix string handling in DATA statements (fixes #18, thanks to Tom Wilson for reporting this one)
    • compiler: fix ENDIF SLE stack underflow
    • runtime: fix INT() behavior (matches ACE now), add CLNG() to online help
    • runtime: fix LINE INPUT
    • use EXIT_FAILURE for fatal error conditions (fixes issue #13 by polluks)
    • add "$VER" version string
    Source code(tar.gz)
    Source code(zip)
    aqb-0.8.2.lha(434.76 KB)
  • 0.8.1(Dec 27, 2021)

    Improvements:

    • runtime: SPRITE() function added
    • runtime: SPRITE SHOW command added
    • runtime: SPRITE MOVE command added
    • runtime: SPRITE FREE command added
    • runtime: ILBM LOAD SPRITE command added
    • runtime: POINTER SPRITE command added
    • runtime: POINTER CLEAR command added
    • runtime: FONT and FONT FREE commands added
    • runtime: FONT() function added
    • runtime: TEXTWIDTH() function added
    • runtime: FONSTYLE command added
    • runtime: FONSTYLE() function added
    • runtime: ON BREAK CALL command added
    • runtime: BOB() function x/y offset arguments added
    • ide: editor will use the system text font now
    • ide: editor horizontal scrolling implemented

    Bug Fixes:

    • ide: editor RTG high/true color rendering fixed
    • ide: write INI file on deinit only (seems to help with AmigaOS 3.2 68000 stability)
    • ide: disable unavailable/unimplemented menu items
    • help: fix function node refs in amigaguide help
    Source code(tar.gz)
    Source code(zip)
    aqb-0.8.1.lha(314.05 KB)
  • 0.8.0(Dec 17, 2021)

    Improvements:

    • Major new feature: source level debugging
    • ide: debug mode mode plus output added
    • ide: debug/console view added
    • ide: SMART_REFRESH window for faster+reliable refresh handling
    • ide: editor breakpoints (F9)
    • compiler: OPTION DEBUG statement added
    • compiler: TRACE statement added
    • compiler: BREAK statement added
    • compiler: generate debug info
    • debugger: exit or continue choice on traps, runtime errors and debug breaks
    • debugger: display stacktrace, source line and registers
    • runtime: CTRL-C will issue a DEBUG BREAK when debugger is active
    • runtime: BITMAP_t supports continous plane allocation suitable for BOB use now
    • runtime: BITMAP OUTPUT command added
    • runtime: VWAIT command added
    • runtime: LOCATE XY command added
    • runtime: CIRCLE command added
    • runtime: COLOR command: optional draw mode argument added
    • runtime: new AnimSupport module added
    • runtime: GELS INIT command added
    • runtime: GELS REPAINT command added
    • runtime: BOB() function added
    • runtime: BOB MOVE command added
    • runtime: BOB SHOW command added
    • runtime: BOB HIDE command added
    • runtime: ILBM LOAD BOB command added
    • MIT license applied consistently

    Bug Fixes:

    • runtime: INPUT statement fixed
    • build system: makefile portability enhancements
    • build system: fix library link order (J. Becher)
    • compiler: fix BYREF recursive argument passing
    • compiler: fix BYREF argument assignment
    • compiler: fix IF/ELSE namespaces
    • compiler: fix BYTE/UBYTE/UINTEGER to SINGLE conversion
    • linker: handle duplicate symbols gracefully
    • ide: fix run state display
    Source code(tar.gz)
    Source code(zip)
    aqb-0.8.0.lha(289.47 KB)
  • 0.7.3(Oct 17, 2021)

    Improvements:

    * ide/runtime: handle and display program exit ERR code
    * ide: keep ASL file requester path
    * ide: fix multiview (help viewer) wb startup
    * runtime: IFFSupport module added
    * runtime: BLIT() function added
    * runtime: BLIT FREE instruction added
    * runtime: GET instruction added
    * runtime: PUT instruction added
    * runtime: ALLOCATE, DEALLOCATE, \_MEMSET added
    * runtime: PALETTE LOAD instruction added
    * runtime: SCREEN/WINDOW: use original graphics/intuition flags
    * runtime: INKEY$: no implicit sleep
    * compiler: add generic #fno syntax
    

    Bug Fixes:

    * ide: fix cursor line in buf2line()
    * compiler: fix subprogram call error handling
    * compiler: fix record/class field memory offsets
    * compiler: fix module type serialization
    * compiler: detect multiple declarations of same constant identifier
    
    Source code(tar.gz)
    Source code(zip)
    aqb-0.7.3.lha(250.09 KB)
  • 0.7.2(Sep 24, 2021)

    Improvements::

    * documentation: full online documentation in amiga guide format
    * ide: make editor auto-formatting much less aggressive (respect user's whitespace and case choices)
    * runtime: ON MOUSE CALL instruction added
    * runtime: MOUSE ON|OFF instruction added
    * runtime: MOUSE() function added
    * runtime: ON MOUSE MOTION CALL instruction added
    * runtime: MOUSE MOTION ON|OFF instruction added
    

    Bug Fixes::

    * ide: fix changed marker position
    * ide: keep DOS Output() when executing program from within IDE
    * ide: fix line length check on cursor up/down
    * ide: fix vertical scroll area
    * ide: fix run memleak
    * ide: fix UI slowdown bug (added proper Begin/EndRefresh calls)
    * compiler: fix EOL token leak, REM comment processing
    
    Source code(tar.gz)
    Source code(zip)
    aqb-0.7.2.lha(204.38 KB)
  • 0.7.1alpha1(Sep 17, 2021)

    Improvements::

    * runtime/ide: detect and handle CTRL-C breaks
    * ide: handle workbench startup + argument
    * ide: create icons for source code files and binaries
    * compiler/runtime: String concatenation implemented
    * compiler: SLEEP FOR statement added
    * runtime: workbench startup code added
    * runtime: auto-open WINDOW 1 on first text output in debug/worbench startup mode
    

    Bug Fixes::

    * compiler: CLI return code fixed
    * compiler: handle varPtr in BinOp expressions
    * compiler: reset compiler options on each compiler run
    * ide: do not crash if non-existing file is specified as cmd line argument
    * ide: fix refresh while program is running
    * runtime: fix _aqb shutdown crash
    * runtime: fix INKEY buffer handling
    * runtime: fix TIMER nullpointer access
    
    Source code(tar.gz)
    Source code(zip)
    aqb.lha(188.33 KB)
  • 0.7.0alpha2(Sep 4, 2021)

    Improvements::

    * "Run" menu added
    * PATTERN RESTORE (ACE) statement added
    

    Bug Fixes::

    * compiler: for loop floating point step fixed
    * compiler: SINGLE -> INTEGER const conversion fixed
    * runtime: restore all non-scratch registers on premature program end (END / EXIT statements)
    * ide: SELECT CASE autoformat fixed
    * ide: Editor line join folding fixed
    * ide: Preserve floating point literals when auto-formatting
    * examples: 3dplot fixed
    
    Source code(tar.gz)
    Source code(zip)
    aqb-0.7.0alpha2.lha(184.69 KB)
  • 0.7.0alpha1(Aug 27, 2021)

Owner
Guenter Bartsch
Free software enthusiast, Linux admin, artificial intelligence, hardware, embedded systems coder. Follow me on twitter: @_Gooofy_
Guenter Bartsch
Colang - Programming language and compiler —WORK IN PROGRESS—

Co programming language Building Initial setup: ./init.sh will install the following into deps/: ckit build tool and rbase library ckit-jemalloc memor

Rasmus 70 Dec 5, 2022
This repository is a summary of the basic knowledge of recruiting job seekers and beginners in the direction of C/C++ technology, including language, program library, data structure, algorithm, system, network, link loading library, interview experience, recruitment, recommendation, etc.

?? C/C++ 技术面试基础知识总结,包括语言、程序库、数据结构、算法、系统、网络、链接装载库等知识及面试经验、招聘、内推等信息。This repository is a summary of the basic knowledge of recruiting job seekers and beginners in the direction of C/C++ technology, including language, program library, data structure, algorithm, system, network, link loading library, interview experience, recruitment, recommendation, etc.

huihut 27k Dec 31, 2022
Learn basic elements in C++ and learn CMake

learn-cpp-cmake Learn basic elements in C++ and learn CMake This repo has code from several sources. If you think we have violated any copyright law o

mafiaboy009 6 Mar 1, 2022
A Compiler Writing Journey

In this Github repository, I'm documenting my journey to write a self-compiling compiler for a subset of the C language. I'm also writing out the details so that, if you want to follow along, there will be an explanation of what I did, why, and with some references back to the theory of compilers.

Warren 7.5k Dec 31, 2022
a header-only crossplatform type-safe dynamic compiler generator based on C++ 17.

Mu Compiler Generator MuCompilerGenerator(MuCplGen) a Header-Only dynamic compiler generator based on C++ 17. Why MuCplGen? header-only cross-platform

MuGdxy 11 Dec 31, 2021
Basic eBPF examples in Golang using libbpfgo

libbpfgo-beginners Basic eBPF examples in Golang using libbpfgo. Accompanying slides from my talk at GOTOpia 2021 called Beginner's Guide to eBPF Prog

Liz Rice 166 Dec 28, 2022
Basic Fortnite Internal Cheat Source

Basic Fortnite Internal Cheat Source That's a basic fortnite cheat internal source for pasters and for people that just want to learn from it. This is a trash code that will be improved when I have time and when I want.

Android1337 13 Jun 13, 2022
C++ Programs from Basic to Advanced lavel.

✨️ C++ Programs (Basic to Advanced Level) ??️ ??️ Local Environment Setup If you are still willing to set up your environment for C++, you need to hav

Atul Tripathi 1 Oct 23, 2021
✨️ C Programs (Basic to Advanced Level - Chapter wise) 🚀️

✨️ C Programs (Basic to Advanced Level - Chapter wise) ??️ ??️ Tutorial Table Days Topics Day 1 Chapter 1: Variables, Constants, and Keywords Day 2 Ch

Atul Tripathi 1 Oct 22, 2021
A project uses for beginners, who wants to learn basic Cpp.

Learning Basic Cpp The basic project for who wants to learn Cpp. Notes: All the files are coded using Microsoft Visual Studio 2019. If you want to cod

null 1 Jan 28, 2022
The C++ Core Guidelines are a set of tried-and-true guidelines, rules, and best practices about coding in C++

The C++ Core Guidelines are a collaborative effort led by Bjarne Stroustrup, much like the C++ language itself. They are the result of many person-years of discussion and design across a number of organizations. Their design encourages general applicability and broad adoption but they can be freely copied and modified to meet your organization's needs.

Standard C++ Foundation 36.6k Jan 6, 2023
Welcome to my dungeon. Here, I keep all my configuration files in case I have a stroke and lose all my memory. You're very welcome to explore and use anything in this repository. Have fun!

Fr1nge's Dotfiles Welcome to my dungeon. Here, I keep all my configuration files in case I have a stroke an d lose all my memory. You're very welcome

Fr1nge 33 Oct 28, 2022
This repository contains notes and starter code for Bit manipulation and mathematics session for DSA bootcamp organized by Codeflows.

Bitmanipulation_maths This repository contains notes and starter code for Bit manipulation and mathematics session for DSA bootcamp organized by Codef

Joe 7 Jun 15, 2022
cpp fundamentals and questions for beginners and intermediates

DSA 60 days Hi people! So we have started grasping dsa concepts and solving problems from 12 July. And we shall continue till September 10 Starting fr

Sushree Satarupa 211 Jan 5, 2023
A demonstration of implementing, and using, a "type safe", extensible, and lazy iterator interface in pure C99.

c-iterators A demonstration of implementing, and using, a "type safe", extensible, and lazy iterator interface in pure C99. The iterable is generic on

Chase 69 Jan 2, 2023
About Write a program to create a circular doubly linked list and perform insertions and deletions of various cases

Write a program to create a circular doubly linked list and perform insertions and deletions of various cases Circular Doubly Linked List Circular Dou

MH Miyazi 3 Aug 28, 2021
This repository aims to solve and create new problems from different spheres of coding. A path to help students to get access to solutions and discuss their doubts.

CPP-Questions-and-Solutions ?? This repository aims to solve and create new problems from different spheres of coding, which will serve as a single po

null 49 Oct 3, 2022
The Repository Contains all about Data Structure and Algorithms with Practice problems, series, and resources to follow!

?? The Complete DSA Preparation ?? This repository contains all the DSA (Data-Structures, Algorithms, 450 DSA by Love Babbar Bhaiya,STriver Series ,FA

Pawan Roshan Gupta 5 Oct 6, 2022
Starting with OpenCV and Qt on MacOS is a bit of difficult if you haven't installed and used libraries in XCode.

OpenCV and Qt on MacOS Introduction Starting with OpenCV and Qt on MacOS is a bit of difficult if you haven't installed and used libraries in XCode. T

Martin Kersting 3 Oct 20, 2022