El Fubu

Welcome to a low in KB page (Except for Video Thumbnails)

Z80 For Loop - 2017-07-05 08:10:27

WHILE - FOR:

We usually use B as counter. The main trick here is that DJNZ decrements the counter in B and then checks, so that you don’t need to do two operations.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
LD C, 5
LD A, 0
LD B, 100

.NEXT2:
push BC
LD B, 10
  
.NEXT:
ADD A, C
DJNZ .NEXT
pop BC
      
DJNZ .NEXT2

SparkR gapply mess - 2017-05-12 08:56:31

Hello,

Do not assume anything. Never. Ever. Specially with SparkR (Apache Spark 2.1.0).

When using the gapply function, maybe you want to return the key to mark the results in a function as follows:

countRows <- function(key, values) {
    df <- data.frame(key=key, nvalues=nrow(values))
    return(df)
}   

count <- gapplyCollect(data, "keyAttribute", countRows)
countRows <- function(key, values) {
    df <- data.frame(key=key, nvalues=nrow(values))
    return(df)
}   
count <- gapplyCollect(data, "keyAttribute", countRows)

SURPRISE. You can’t.

You should get this error:

Error in match.names(clabs, names(xi)): names do not match previous names

Well, that’s weird. Why is this happening?

Sony HitBit 55/75P dead VRAM diagnosis - 2017-02-25 10:48:47

Hey!

Recently I bought a broken 75P just for fun (and well, it was cheap :)). It had a video problem which, after reading a couple of msx.org posts (Hit-bit With Broken Graphics and 75P black screen mainly), I believed it was a problem of VRAM as Grauw pointed.

That was a clever way to debug it. Watching how Basic characters are output, you can see which bit is broken in the ASCII chart. Why can you point to which bank is failing if a bit fails?

MSX2Cas - 2016-09-08 07:10:55

Very cool application for the phone. You can easily load .cas files on the phone and play them :).

asMSX bugfix 1: Ifs on .megarom - 2016-09-03 12:49:45

Hello!

Finally some improvements on asMSX. At the start of this project JamQue told me that he had issues using ifs when the “.megarom” clause is active. The issue correction can be seen here in Github.

The problem was that when generating a byte (for example, an LD instruction) it checks if it is able to generate it if the condition established for this level allows it.

Original:

guardar_byte(b)
{
if ((!conditional_level)||(conditional[conditional_level]))
if (type!=MEGAROM)
{
 ...some code...
}
if (type==MEGAROM)
{
 ...some code...
}

The first if will only affect the if(type!=MEGAROM) as it doesn’t provide brackets to define a block, therefore it will get only the next sentence. Also instead of doing if(type==MEGAROM) I just did an else.