home *** CD-ROM | disk | FTP | other *** search
- .z80 ;
- entry _parms ;
-
- _parms: ld a,' ' ;
- ld (ix-1),a ; leading spaces
- ld a,0ffh ; number of digits
- ld (ix-2),a ;
- xor a ; mask_h
- ld (ix-3),a ; normally Byte-only
- ld a,(hl) ; what?
- cp '0' ;
- ret c ; if error
- jr nz,isnt_zero ;
- ld (ix-1),a ; leading zeroes
- inc hl ;
- ld a,(hl) ;
- cp '1' ;
- ret c ; no correct spec.
- isnt_zero: cp '9'+1 ; number?
- jr nc,no_n ;
- next_digit: sub '0' ;
- ld (ix-2),a ;
- inc hl ;
- ld a,(hl) ;
- sub '0' ;
- cp 10 ;
- jr nc,no_further ;
- ld a,(ix-2) ;
- add a,a ;
- ld (ix-2),a ;
- add a,a ;
- add a,a ;
- add a,(ix-2) ;
- add a,(hl) ;
- jr next_digit ;
-
- no_further: ld a,(hl) ;
- no_n: cp 'a' ; kleinbuchstabe?
- jr nc,is_ok ;
- ld a,0ffh ;
- ld (ix-3),a ; do not mask top bit!
- ld a,(hl) ; get char
- or ' ' ; tolower
- is_ok: sub 'a' ;
- cp 26 ;
- ccf ;
- ret c ; no alphabetic follows
- push hl ;
- ld hl,base_tab ;
- call _adda## ; hl+a => hl
- ld a,(hl) ; get that base
- pop hl ; restore pointer
- or a ; no carry, Sign-Flag
- ret ; base in Akku
-
- base_tab: db 0fdh, 2 ,0feh,10, 11 , 5 ,7, 16 ,0fdh,0fdh
- db 15 ,0fdh, 13 , 9, 8 ,0fdh,4,0fdh,0ffh, 3
- db 6, 14 ,0fdh,16,0fdh, 12
- end ;